Суть
Модель не вызывает функцию сама — она выдаёт структурированный запрос на вызов (JSON), который выполняет код вокруг неё, и результат возвращается в контекст следующим шагом цикла ReAct.
Зачем это нужно
Без инструментов LLM только генерирует текст. Tool calling превращает рассуждение в действие в системах. Точность вызова (правильный инструмент + правильные аргументы) — одна из критичных способностей мозга-агента.
Как работает
- Спецификация — JSON Schema:
name,description,parameters. Хорошийdescriptionинструмента решает больше, чем выбор модели. - Типы: API-вызовы, shell/bash, чтение/запись файлов, запросы к БД, вычисления, web-поиск.
- Анти-паттерн: 50+ инструментов в одном агенте → падает accuracy. Дробите на subagents (узкий набор tools на агента).
- Единый стандарт подключения внешних инструментов к любой модели — это MCP.
- Tool = контракт и точка контроля: описывай что делает / какие входы / что возвращает / какие ограничения. Инструмент — точка контроля безопасности, стоимости и предсказуемости:
find_customers(query, limit=5)лучше, чемdatabase(query)(модель понимает, что можно). «Инструмент не прощает плохой подготовки — документация должна быть идеальная». - Детерминизм: хороший инструмент детерминирован;
@tool-декоратор — лишь способ «научить» модель вызывать действие, а не сама логика. - Уточнение про надёжность: function/tool calling задаёт схему как hint — это уровень 2 (≈95–99%), модель может его нарушить. 100%-ю гарантию формата даёт только constrained decoding на уровне генерации (Native Structured Output) — см. Structured Output. То есть «нативный вызов надёжнее промпта» верно, но это ещё не жёсткий контракт.
- В LangGraph: модель получает инструменты через
model.bind_tools([...])и возвращаетtool_calls; их исполняет готовый узелToolNode, результат возвращается в цикл (см. LangGraph ReAct Loop). Альтернатива «MCP-как-tool» — подключить инструмент как узел графа (LangGraph MCP as Node).
Пример
{ "name": "get_weather",
"arguments": { "city": "Berlin", "units": "metric" } }
Связано с
- Agent Anatomy — tool calling = компонент «руки»
- ReAct — результат вызова = ground truth следующего шага
- MCP — стандартизация инструментов под все модели
- Structured Output — function calling = уровень 2; жёсткий контракт даёт constrained decoding
- LangGraph ReAct Loop —
bind_tools+ToolNodeв графе LangGraph
Открытые вопросы
- сколько инструментов на агента до падения accuracy
- как писать
description, чтобы модель не путала инструменты