РУКОВОДСТВО · ОБНОВЛЕНО 2026-09-15
Tool calling в нейросетях: функции, права и цикл выполнения
Модель предлагает имя функции и аргументы, а приложение решает, разрешён ли вызов, выполняет его и возвращает результат в следующий ход.
Опишите узкие инструменты с чёткой схемой, проверяйте аргументы и права на сервере, отделите чтение от изменений и ограничьте цикл. Модель не должна напрямую владеть ключами или исполнять произвольный код; каждый tool call проходит обычную авторизацию приложения.
1. Спроектируйте узкие инструменты
Функция get_order безопаснее универсального execute_request: у неё понятный вход, результат и область доступа. Название и описание говорят модели, когда вызов уместен, а schema ограничивает аргументы. Не включайте секрет в описание tool. Разделяйте чтение и изменение, чтобы политика могла разрешить поиск без права отменить заказ.
2. Проверьте вызов до исполнения
Сервер разбирает JSON, валидирует типы, диапазоны и принадлежность объекта текущему пользователю. Нельзя считать model-generated id авторизацией. Для внешнего URL действует allowlist и защита от SSRF. Опасные строки не подставляют в shell или SQL. Значимые операции требуют правила подтверждения, заданного продуктом до запуска.
3. Верните наблюдение модели
После выполнения приложение добавляет tool result с идентификатором вызова. Ответ должен быть коротким, структурированным и различать not_found, forbidden и temporary_error. Огромный дамп базы расходует контекст и может раскрыть лишнее. Модель использует наблюдение для финального ответа или следующего разрешённого шага, но контроллер считает число итераций.
4. Учтите параллельность и повторы
Независимые чтения можно выполнять параллельно, если модель и API поддерживают это. Записи требуют порядка и идемпотентного ключа. При timeout неизвестно, завершилась ли удалённая операция, поэтому слепой retry опасен. Сохраняйте request id и проверяйте состояние. Повтор одинаковых аргументов распознаётся как возможный цикл.
5. Тестируйте недоверенные данные
Добавьте вредоносный текст в документ, результат поиска и сообщение пользователя. Он не должен расширить права или сменить цель. Проверяйте неизвестный tool, лишнее поле, неверный enum, отказ сервиса и исчерпание бюджета. Метрики: успешная задача, ошибочные вызовы, число шагов, p95 времени и стоимость завершённого процесса.
Частые вопросы
Модель сама выполняет функцию?
В custom tool calling функция исполняется приложением после проверки.
Где хранится API-ключ инструмента?
На сервере или в секретном хранилище, недоступном модели и клиенту.
Можно дать один универсальный tool?
Узкие функции проще проверять, авторизовать и наблюдать.
Как остановить цикл?
Лимитировать шаги, время, токены, стоимость и повтор аргументов.
Что такое parallel tool calls?
Предложение нескольких независимых вызовов в одном ходе при поддержке API.