Генеративный AI
Function Calling и Tool Use
GPT-4 знает всё о Python - но не знает какой pip version в текущем окружении, что в requirements.txt, и какие тесты падают прямо сейчас. Без инструментов LLM - энциклопедия без интернета: умная, но отрезанная от реального мира. Один вызов get_repo_status() даёт модели контекст о проекте, который никакой промпт не заменит.
- **GitHub Copilot Workspace**: агент с инструментами чтения файлов, запуска тестов и создания PR. Получает задачу -> читает кодовую базу -> планирует изменения -> выполняет -> проверяет тесты.
- **Perplexity AI**: поисковый агент использует tool calling для вызова поиска, чтения страниц, извлечения данных. Каждый ответ - результат 3-10 вызовов инструментов за секунды.
- **Финансовые агенты**: Bloomberg и JPMorgan используют LLM с инструментами доступа к рыночным данным, SQL-запросам, генерации отчётов. Аналитик формулирует вопрос - агент вызывает 20+ инструментов.
- **Claude Desktop + MCP**: подключение к локальным файлам, базам данных, API через MCP серверы. Один раз настроил сервер - Claude имеет доступ к данным во всех разговорах.
Предварительные знания
Toolformer и function calling в API
В начале 2023 года Timo Schick и команда Meta AI представили Toolformer - первую LLM, которая сама училась решать, когда и какой внешний инструмент вызвать (калькулятор, поиск, API), вставляя вызовы прямо в текст. До этого инструменты подключали хрупким prompt engineering. Toolformer показал, что вызов инструментов можно сделать обучаемой способностью. В июне 2023 года OpenAI выпустила function calling в API GPT-4 и GPT-3.5: модель стала возвращать структурированный JSON-вызов как first-class возможность. Это превратило tool use из исследовательского трюка в инженерный примитив и открыло дорогу всей экосистеме агентов.
OpenAI Function Calling: схема и механика
Июнь 2023. OpenAI добавляет в Chat API параметр `tools`. Это меняет LLM из генератора текста в оркестратор: модель читает описания доступных функций, решает какую вызвать и с какими аргументами, возвращает структурированный вызов - и ждёт результата. Разработчик выполняет вызов и отправляет результат обратно.
**Parallel tool calls**: GPT-4o может вызвать несколько инструментов за один раунд. Запрос о погоде в двух городах генерирует два параллельных вызова. **tool_choice** контролирует поведение: `auto`, `required`, `none` или конкретный инструмент.
LLM возвращает tool_call с именем функции и аргументами. Кто выполняет реальный вызов API?
Anthropic Tool Use: Claude как агент
Anthropic реализует tool use для Claude схожим образом: инструменты описываются в параметре `tools`, вызов возвращается как блок `tool_use` в content. Ключевые особенности: несколько content блоков (текст + tool_use) за один ответ, и явный `stop_reason: 'tool_use'`.
**Computer Use (Anthropic, 2024)**: Claude получает скриншоты экрана и вызывает инструменты `screenshot`, `click`, `type`. Позволяет автоматизировать задачи в браузере без API. **Разница форматов**: OpenAI - `tool_calls` в message, Anthropic - блок `tool_use` в content. LangChain абстрагирует оба формата.
Claude возвращает `stop_reason: 'tool_use'`. Что должно произойти дальше?
Model Context Protocol: стандарт для инструментов
Ноябрь 2024. Anthropic публикует **Model Context Protocol (MCP)** - открытый стандарт для подключения LLM к инструментам и данным. Проблема: каждый разработчик реализует свои форматы. MCP стандартизирует это как 'USB для AI': один MCP сервер работает с любым MCP-совместимым клиентом.
**MCP экосистема**: сотни готовых серверов - GitHub, PostgreSQL, Slack, Google Drive, Brave Search, Puppeteer. Claude Desktop, Cursor, Continue уже поддерживают MCP клиент. MCP работает поверх stdio или HTTP/SSE на любом языке.
Какую главную проблему решает Model Context Protocol?
Агентные паттерны с инструментами
Tool use - строительный блок. Реальные приложения используют паттерны поверх него: **ReAct** (Reason + Act) - чередование рассуждений и вызовов, **Plan-and-Execute** - планирование всех шагов перед выполнением, **Reflection** - оценка результата и итерация.
**Безопасность**: агент с инструментами может причинить реальный вред - удалить файлы, отправить письмо. Human-in-the-loop: для деструктивных операций запрашивать подтверждение. Принцип минимальных привилегий: давать только инструменты нужные для задачи. Sandboxing для выполнения кода (E2B, Modal).
**Production стек**: LangGraph для stateful агентов с циклами, LlamaIndex для RAG + tool use, AutoGen (Microsoft) для multi-agent, CrewAI для role-based мультиагентных систем.
LLM с function calling сам выполняет функции - достаточно дать описание и модель сделает всё
LLM только генерирует намерение вызвать (имя + аргументы). Разработчик выполняет реальный код и возвращает результат. LLM никогда не имеет прямого доступа к системам
Это фундаментальная архитектура: LLM - планировщик, код разработчика - исполнитель. Это гарантирует безопасность (можно добавить валидацию до исполнения) и гибкость (любой язык, любой API).
Агент имеет доступ к инструменту delete_file. Какой паттерн безопасности важнее всего?
Ключевые идеи
- **Function calling**: LLM генерирует структурированный вызов (имя + аргументы), приложение выполняет реальный код, результат возвращается в контекст. LLM никогда не выполняет код напрямую.
- **OpenAI и Anthropic** реализуют tool calling похоже: JSON Schema описание, структурированный ответ с вызовом, tool_result в следующем сообщении. Форматы немного отличаются.
- **MCP** стандартизирует подключение инструментов: один сервер работает с любым MCP-совместимым клиентом. Сотни готовых серверов: GitHub, PostgreSQL, Slack, Brave Search.
- **ReAct паттерн**: чередование рассуждений и вызовов инструментов для многошаговых задач.
- **Безопасность**: human-in-the-loop для деструктивных операций, принцип минимальных привилегий, sandboxing для кода.
Связанные темы
Tool use - фундамент агентных систем:
- Multi-Agent Systems — Агенты взаимодействуют через вызовы инструментов - один агент может быть инструментом для другого
- Prompt Engineering — Описание инструментов - особый вид промптинга. Качество описания определяет точность выбора инструмента
- GenAI System Design — Проектирование агентов требует решений о наборе инструментов, безопасности и человеческом контроле
Вопросы для размышления
- Агент с доступом к интернету, базам данных и отправке писем. Как ограничить его действия только задачей пользователя при угрозе prompt injection?
- Tool calling добавляет latency: каждый round-trip к модели занимает секунды. Как оптимизировать агента для real-time приложений?
- MCP стандартизирует интерфейс инструментов. Что происходит с безопасностью, когда LLM может использовать любой MCP сервер из публичного реестра?
Связанные уроки
- gai-08 — Использование инструментов управляется структурным промптингом
- gai-18 — Вызов инструментов - основа мультиагентных систем
- aie-16-tool-calling — Продакшен tool-calling и интеграция MCP
- aie-07-structured-output — Function calling опирается на вывод по схеме
- rl-08 — Агент, действующий инструментами, напоминает выбор действий
- ml-01-intro