Глава 19

Tool description является частью prompt

До сих пор модель только говорила. Как только она берёт инструменты, описание инструмента становится частью prompt: модель выбирает tool по имени, описанию, параметрам и текущему контексту. Плохой интерфейс системной инструкцией уже не спасти.

name: preview_refund
description: |
  Рассчитывает возможность и сумму возврата без изменения данных.
  Используй после получения order_id, когда пользователь спрашивает о возврате
  или хочет его оформить. Не используй для отмены доставки.
input:
  order_id: "ID из account_read, никогда не из догадки"
  reason_code: "один из enum, выбранный по сообщению пользователя"
output:
  eligible: boolean
  amount: Money | null
  policy_source_id: string
  confirmation_summary: string
side_effects: none
next_step: confirm_refund requires explicit user approval

Разница между плохим и хорошим tool - почти всегда в одном и том же.

  • list_all_contacts → search_contacts. Не тратит context на нерелевантные записи.
  • do_order → orders_preview_refund. Ясный namespace и отсутствие скрытого side effect.
  • UUID без подписи → ID плюс человекочитаемое имя. Меньше ошибок сопоставления.
  • Три low-level вызова → один доменный tool. Снижает tool loop и прячет техническую механику.

И контринтуитивное правило про количество.

Много tools не означает больше способностей. Пересекающиеся и расплывчатые tools создают новые развилки, где модель может ошибиться. Anthropic советует несколько продуманных high-impact tools; OpenAI - namespaces и deferred tool search для больших поверхностей.

Ссылки