Tool Use и Function Calling
Abstract
Модель формирует структурированное предложение вызвать инструмент. Harness проверяет имя, аргументы, права и бюджет, выполняет действие и возвращает observation. Модель не исполняет функцию сама.
Tool loop
user goal
↓
model → final answer
│
└→ tool call proposal
↓
schema + policy + approval
↓
execute
↓
observation ─→ modelОтветственность компонентов
| Компонент | Отвечает за |
|---|---|
| Модель | выбор tool и формирование аргументов |
| Tool schema | допустимую структуру вызова |
| Harness | policy, исполнение, timeout, retries и trace |
| Credential layer | секреты и область доступа |
| Пользователь | решение, когда нужен human approval |
Schema гарантирует форму, а не смысл. Валидный delete_file(path="...") всё ещё может указывать не на тот файл.
Хорошее описание tool
- одно понятное назначение;
- различимое имя;
- типизированные поля и enums;
- обязательные параметры действительно обязательны;
- явно описаны side effects;
- результат содержит данные, нужные для следующего решения;
- ошибки различают retryable и terminal состояния.
Не передавай модели внутренний универсальный API, если можно дать несколько узких бизнес-операций.
Безопасное исполнение
- Разрешай только tools текущего сценария.
- Валидируй аргументы кодом после schema validation.
- Ограничивай пути, домены, accounts и объём операции.
- Для внешнего действия показывай точный preview согласно политике автономности.
- Используй idempotency key для повторяемых mutations, если API поддерживает.
- Возвращай модели минимальный результат без secrets и лишних данных.
- Перечитывай состояние после side effect.
Tool, MCP и computer use
- Function calling/tool use — общий механизм структурированного вызова.
- MCP — протокол, через который клиент может обнаружить и вызвать предоставленные сервером tools.
- Computer use — действия через UI и визуальные observations; обычно менее структурированы и требуют дополнительных guardrails.
Что тестировать
- правильный выбор tool и отказ от ненужного вызова;
- отсутствующие, лишние и граничные аргументы;
- tool error, timeout и частичный успех;
- повторный вызов после неизвестного результата;
- попытку выйти за scope;
- prompt injection внутри observation;
- соблюдение лимита шагов и бюджета.