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допустимую структуру вызова
Harnesspolicy, исполнение, timeout, retries и trace
Credential layerсекреты и область доступа
Пользовательрешение, когда нужен human approval

Schema гарантирует форму, а не смысл. Валидный delete_file(path="...") всё ещё может указывать не на тот файл.

Хорошее описание tool

  • одно понятное назначение;
  • различимое имя;
  • типизированные поля и enums;
  • обязательные параметры действительно обязательны;
  • явно описаны side effects;
  • результат содержит данные, нужные для следующего решения;
  • ошибки различают retryable и terminal состояния.

Не передавай модели внутренний универсальный API, если можно дать несколько узких бизнес-операций.

Безопасное исполнение

  1. Разрешай только tools текущего сценария.
  2. Валидируй аргументы кодом после schema validation.
  3. Ограничивай пути, домены, accounts и объём операции.
  4. Для внешнего действия показывай точный preview согласно политике автономности.
  5. Используй idempotency key для повторяемых mutations, если API поддерживает.
  6. Возвращай модели минимальный результат без secrets и лишних данных.
  7. Перечитывай состояние после 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;
  • соблюдение лимита шагов и бюджета.

Связанные заметки