Перейти к содержимому
Цена founder — зафиксирована для ранних клиентовНачать →

Использование инструментов ИИ-агентами: вызов функций, схемы и безопасное выполнение

Использование инструментов ИИ-агентами — это механизм, с помощью которого LLM запрашивает выполнение внешних функций — поиска в интернете, запросов к базам данных, API-вызовов, файловых операций — путём генерации структурированного JSON вызова инструмента, который среда выполнения перехватывает, проверяет по JSON Schema и выполняет перед возвратом результата. LLM ничего не выполняет сам; он только делает запросы. Среда выполнения применяет валидацию схемы, проверки ACL и бюджеты шагов до любого выполнения. tau-bench (2025) показывает, что ошибки построения аргументов — наиболее частый режим отказа при использовании инструментов.

Использование инструментов ИИ-агентами — это механизм, с помощью которого большая языковая модель запрашивает выполнение внешних функций — поиска в интернете, запросов к базам данных, API-вызовов, файловых операций или пользовательской бизнес-логики — путём генерации структурированного вызова инструмента в своём выводе, который среда выполнения перехватывает, проверяет по определению JSON Schema, выполняет и возвращает как результат инструмента в следующем контекстном ходу.

Как работают вызовы инструментов: цикл запрос-выполнение-возврат

Жизненный цикл вызова инструмента

Каждый вызов инструмента следует одному и тому же пятишаговому циклу независимо от фреймворка или провайдера:

  1. Настройка контекста — агент получает задачу и список доступных инструментов, каждый описан именем, описанием на естественном языке и определением JSON Schema его параметров.
  2. Решение LLM — модель генерирует блок вызова инструмента в своём выводе: имя функции и JSON-объект аргументов, соответствующих объявленной схеме.
  3. Перехват средой выполнения — фреймворк перехватывает вызов инструмента до любого выполнения. Аргументы валидируются по схеме. Проверяется ACL агента: разрешено ли этому агенту вызывать этот инструмент?
  4. Выполнение — если валидация и проверки прав прошли, среда выполнения выполняет функцию и собирает её вывод.
  5. Инъекция контекста — результат инструмента вводится обратно в контекст разговора как ход результата инструмента. LLM продолжает рассуждение из этого обогащённого контекста.

Ключевой архитектурный факт: LLM ничего не выполняет сам. Он только запрашивает. Каждое небезопасное действие — запись файла, вызов API, отправка электронного письма — контролируется средой выполнения. Это разделение между запросом и выполнением является основой безопасного использования инструментов агентами.

Различия форматов провайдеров: OpenAI против Anthropic против Google

Все три основных провайдера LLM поддерживают использование инструментов нативно, но JSON-формат различается:

OpenAI (openai/openai-python, 30 941 звезда, Apache-2.0): определения инструментов помещаются в параметр tools в виде массива объектов JSON Schema. Модель возвращает вызовы инструментов в поле tool_calls сообщения ассистента. Клиент отправляет результаты инструментов как сообщения с role: "tool". Responses API (март 2025) добавил встроенные инструменты (web_search, file_search, computer_use), выполняемые на стороне сервера.

Anthropic (anthropic-sdk-python, 3 595 звёзд, MIT): определения инструментов помещаются в параметр tools верхнего уровня. Модель возвращает блоки содержимого tool_use внутри хода ассистента. Клиент должен разобрать эти блоки и вернуть блоки tool_result в следующем человеческом ходу.

Google Gemini: определения инструментов используют functionDeclarations внутри параметра tools. Модель возвращает части functionCall; клиент отправляет части functionResponse. Gemini поддерживает tool_config с режимом ANY и режимом AUTO.

Форматы семантически эквивалентны, но синтаксически достаточно различаются, чтобы жёстко запрограммированное соглашение одного провайдера не работало при смене модели.

Кто фактически выполняет инструмент (и почему это важно для безопасности)

LLM не может выполнять инструменты. Он может только запрашивать. Когда среда выполнения применяет шлюз ACL перед каждым выполнением инструмента, никакой вывод LLM не может обойти проверку прав. Модель может запросить delete_all_records() с любыми аргументами; если матрица прав агента не включает этот инструмент, среда выполнения отклоняет запрос до любого выполнения.

Определение схем инструментов, которые LLM использует правильно

tau-bench (ServiceNow Research, 2025) измерил GPT-4o с показателем 44% pass@1 на задачах использования инструментов в розничной торговле. Наибольшей категорией отказов было не выбор инструмента — модель выбирала правильный инструмент — а построение аргументов. Качество схемы — главный рычаг надёжности.

Анатомия JSON Schema для определений инструментов

Минимальная корректная схема инструмента требует четырёх полей:

{
  "name": "search_web",
  "description": "Поиск в публичном интернете актуальной информации. Использовать, когда задача требует фактов после даты отсечки обучения, данных в реальном времени или источников, отсутствующих в обучающих данных.",
  "parameters": {
    "type": "object",
    "properties": {
      "query": {
        "type": "string",
        "description": "Поисковый запрос. Использовать конкретные, целенаправленные термины, а не полное предложение."
      },
      "max_results": {
        "type": "integer",
        "description": "Максимальное количество возвращаемых результатов. По умолчанию 5, максимум 20.",
        "default": 5
      }
    },
    "required": ["query"]
  }
}

Массив required важен: параметры, не указанные в required, необязательны.

Написание описаний, снижающих ошибки аргументов

Три правила для описаний инструментов, улучшающих точность построения аргументов:

  1. Называть с парой глагол-существительное: search_web, create_ticket, read_file. Избегает неоднозначности между похожими инструментами.
  2. Устранять неоднозначность в описании: если два инструмента похожи, явно указывать, когда использовать каждый.
  3. Описывать параметры с примерами: "Поисковый запрос. Пример: 'LangGraph v0.2 параллельные вызовы инструментов'" превосходит "Строку запроса" по точности аргументов.

Распространённые ошибки схемы и как их исправить

ОшибкаЭффектИсправление
Неограниченный "type": "string" для категориальных значенийМодель изобретает недопустимые значенияИспользовать "enum": ["option_a", "option_b"]
Отсутствующее description у параметровМодель угадывает семантику аргументовПисать явные описания с примерами
Все параметры в requiredМодель отказывается вызывать, когда необязательные поля неизвестныПеречислять только действительно обязательные параметры
Расплывчатое имя инструмента (process, handle)Модель не может отличить похожие инструментыИспользовать глагол-существительное: submit_form, parse_date
Нет массива requiredJSON Schema недопустимаВсегда включать required, даже если пустой ([])

Параллельные и последовательные вызовы инструментов

Когда использовать параллельные вызовы

Responses API OpenAI (март 2025) сделал параллельные вызовы инструментов по умолчанию. За один ход LLM модель может запросить несколько выполнений инструментов одновременно. Для независимых инструментов параллельная отправка сокращает количество обращений с N последовательных ходов до одной параллельной пакетной операции.

Пример: исследовательский агент нуждается в текущей цене акций, последних новостях и документе SEC компании. Все три независимы. Последовательно: 3 хода LLM × 10 с = 30 с. Параллельно: 1 ход LLM + max(задержки инструментов) около 10 с.

Предварительное условие: инструменты должны быть действительно независимы. Если инструмент B требует вывод инструмента A в качестве аргумента, они должны быть последовательными.

Последовательные вызовы для зависимых операций

Цепочки инструментов — использование вывода одного инструмента в качестве ввода следующего — требуют последовательного выполнения. Паттерн: search_web(запрос)fetch_page(URL из результата поиска)extract_data(содержимое страницы)summarize(извлечённые данные).

Риски параллелизма с состоятельными ресурсами

Параллельные вызовы инструментов к состоятельным ресурсам нуждаются в гарантиях упорядочивания. Правило: параллельная отправка безопасна, когда инструменты только читают или пишут в независимые ресурсы.

Разбор вывода инструментов и восстановление после ошибок

Вызовы инструментов завершаются неудачей. Внешний API возвращает 503. Запрос к базе данных истекает по времени. Хорошо спроектированная реализация обрабатывает сбои без вмешательства человека для восстановимых ошибок.

Валидация вывода инструментов

Инструмент, возвращающий HTTP 200, — это не то же самое, что инструмент, возвращающий правильный и полезный результат. Проверять вывод по ожидаемой схеме перед вводом в контекст агента.

Стратегии повтора: когда и как повторно вызывать

Три паттерна повтора для разных режимов отказа:

  • Повтор при временной неудаче (таймаут сети, ограничение скорости): повторно вызвать тот же инструмент с теми же аргументами после кратковременного backoff.
  • Повтор с уточнением аргумента: вернуть LLM структурированную ошибку, объясняющую, почему аргумент был отклонён.
  • Резервный инструмент: если инструмент A потерпел неудачу после N повторов, перенаправить к инструменту B с эквивалентной функциональностью.

Сообщение об ошибках инструментов оркестратору

Невосстановимые ошибки должны передаваться оркестратору. Для многоагентных конвейеров оркестратор нуждается в структурированном сигнале об отказе. Для паттернов оркестрации ИИ-агентов это путь эскалации.

Управление правами инструментов и безопасность

Назначение инструментов по принципу наименьших привилегий

Каждый агент должен иметь только те инструменты, которые требуются для его конкретной задачи. Радиус взрыва успешно атакованного инъекцией промпта агента ограничен его разрешёнными инструментами. OWASP LLM Top 10 v1.1 (2025) называет инъекцию промптов (LLM01) главным риском для LLM-приложений.

Валидация входных данных до выполнения

Проверять аргументы вызова инструмента на двух уровнях: валидация схемы и семантическая валидация. Инструмент fetch_page должен отклонять аргументы с URL file:// или localhost для предотвращения SSRF.

Полную таксономию векторов атаки на уровне инструментов см. в модели угроз безопасности ИИ-агентов.

Необратимые действия: шлюзы человека в контуре

Вызовы инструментов с необратимыми побочными эффектами — отправка электронных писем, удаление записей, перевод средств, публикация контента — требуют явных шлюзов подтверждения человеком или проверок идемпотентности до выполнения.

Позиция OpenLegion: реестр инструментов и шлюз ACL

Каждый крупный провайдер LLM имеет собственный API для вызова инструментов. Правильная абстракция: определить инструмент один раз и позволить фреймворку транслировать его в правильное соглашение провайдера во время вызова.

Реестр инструментов OpenLegion реализует эту абстракцию. Определить search_web один раз. Меш транслирует определение в OpenAI tools, Anthropic tools или Gemini functionDeclarations в зависимости от сконфигурированной модели. Шлюз ACL не опционален. Каждый вызов инструмента — встроенный, MCP или пользовательский — проходит через матрицу прав по агентам до выполнения.

ИзмерениеOpenLegionLangChain / LangGraphOpenAI Agents SDKCrewAIAnthropic напрямую
Формат определения инструментовЕдиная схема с трансляцией по провайдеруТребуются специфические для провайдера обёрткиТолько формат OpenAIДекоратор инструментов CrewAIТолько формат Anthropic tool_use
Абстракция провайдераДа — GPT-4o, Claude, Gemini унифицированыЧастичная — через интеграции LangChainНет — только модели OpenAIЧастичнаяНет — только Anthropic
Применение ACLМатрица прав по агентам, структурнаяНе встроеноНе встроеноНе встроеноНе встроено
Параллельные вызовыПоддерживаетсяПоддерживается (зависит от провайдера)Да — по умолчанию в Responses APIПоддерживаетсяДа — Claude поддерживает
Встроенные инструментыБраузер, файлы, HTTP, shell, генерация изображенийЧерез инструменты сообщества LangChainweb_search, file_search, computer_useНе встроеноНе встроено
Интеграция MCPНативная — тот же конвейер ACL/бюджетаЧерез адаптеры LangChain MCPЭкспериментальноНенативнаяНенативная

Часто задаваемые вопросы

Что такое использование инструментов ИИ-агентами?

Использование инструментов ИИ-агентами — это механизм, с помощью которого большая языковая модель запрашивает выполнение внешних функций — поиска в интернете, API-вызовов, запросов к базам данных, файловых операций — путём генерации структурированного JSON вызова инструмента, который среда выполнения перехватывает, валидирует и выполняет. LLM ничего не выполняет напрямую; он только описывает, что хочет вызвать и с какими аргументами.

Как работает вызов функций в ИИ-агентах?

Вызов функций работает в цикле запрос-выполнение-возврат: агент получает задачу и список доступных инструментов; LLM генерирует вызов инструмента с именем функции и аргументами; среда выполнения валидирует аргументы, выполняет функцию и вводит результат в контекст как результат инструмента.

Что делает схему инструмента хорошей для ИИ-агентов?

Хорошая схема инструмента использует имя в виде глагол-существительное (search_web, create_ticket), описание, однозначно указывающее когда её использовать, строго типизированные параметры с перечислениями и массив required. tau-bench (2025) показывает, что неправильное построение аргументов — наиболее частый режим отказа.

Что такое параллельные вызовы инструментов и когда их использовать?

Параллельные вызовы инструментов позволяют агенту запрашивать несколько выполнений инструментов за один ход LLM, одновременно отправляемых средой выполнения. Использовать параллельные вызовы, когда инструменты независимы — их выводы не зависят друг от друга и они не пишут в общие состоятельные ресурсы.

Как предотвратить циклы вызовов инструментов в ИИ-агентах?

Циклы вызовов инструментов возникают, когда агент продолжает вызывать инструменты, не приходя к конечному ответу. Единственная надёжная мера предотвращения — бюджет шагов, применяемый на уровне инфраструктуры: жёсткий максимум вызовов инструментов на запуск агента, применяемый оркестратором.

В чём заключается риск безопасности при использовании инструментов ИИ-агентами?

Основной риск — инъекция результатов инструмента: когда агент вызывает инструмент, возвращающий контролируемый злоумышленником контент, способный перенаправить поведение агента. OWASP LLM Top 10 v1.1 (2025) называет инъекцию промптов главным риском. Меры защиты включают санитизацию вывода, назначение инструментов по принципу наименьших привилегий и шлюзы человека в контуре для необратимых действий.

В чём разница между встроенными инструментами, инструментами MCP и пользовательскими инструментами?

Встроенные инструменты предоставляются средой выполнения агента с уже применённым ACL-контролем. MCP-инструменты обслуживаются серверами Model Context Protocol, предоставляющими возможности через JSON-RPC; требуют изолированного запуска и управления правами на уровне сервера. Пользовательские инструменты — это функции, которые вы пишете и регистрируете, обеспечивающие полную гибкость, но с ответственностью за валидацию и безопасность.

Как различные провайдеры LLM реализуют использование инструментов?

OpenAI реализует через параметр tools, tool_calls в ответе ассистента, сообщения-результаты role: "tool". Anthropic использует блоки содержимого tool_use с блоками tool_result в следующем человеческом ходу. Google Gemini использует functionDeclarations с частями functionCall в ответах и частями functionResponse в последующих ходах. Три формата семантически эквивалентны, но синтаксически различны.

Определите инструменты один раз, выполняйте их безопасно везде

tau-bench (2025) ставит GPT-4o на 44% pass@1 на задачах использования инструментов, называя построение аргументов главной категорией отказов. Точные схемы с именами глагол-существительное, типизированными перечислениями и примерами параметров закрывают большую часть этого разрыва.

Для паттернов агентных рабочих процессов, охватывающих бюджеты шагов и предотвращение циклов, и для бенчмарков оценки ИИ-агентов, измеряющих надёжность использования инструментов, эти руководства расширяют основы, рассмотренные на этой странице.

Создавайте агентов, использующих инструменты, с ACL-контролем на уровне агента на OpenLegion →