Генеративный 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 имеет доступ к данным во всех разговорах.

Предварительные знания

  • AI Agents: архитектура и провалы

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
Function Calling и Tool Use

0

1

Войти