Claude Platform Docs
MessagesИнструменты

Обработка вызовов инструментов

Разбор блоков tool_use, форматирование ответов tool_result и обработка ошибок с помощью is_error.

На этой странице описан жизненный цикл вызова инструмента: чтение блоков tool_use из ответа Claude, форматирование блоков tool_result в вашем ответе и сигнализация об ошибках. Об абстракции SDK, которая обрабатывает это автоматически, см. Tool Runner.

Ответ Claude различается в зависимости от того, использует ли он клиентский или серверный инструмент.

Обработка результатов клиентских инструментов

Ответ будет иметь stop_reason со значением tool_use и один или несколько блоков содержимого tool_use, которые включают:

  • id: Уникальный идентификатор данного конкретного блока использования инструмента. Он будет использоваться позже для сопоставления с результатами инструмента.
  • name: Имя используемого инструмента.
  • input: Объект, содержащий входные данные, передаваемые инструменту, в соответствии с input_schema инструмента.

Блок tool_use для члена набора инструментов computer use (использование компьютера) или browser use (использование браузера) также содержит поле toolset_name ("computer" или "browser"). Его name — это инструмент-член набора, который вызывает Claude, например screenshot или navigate, поэтому диспетчеризуйте такие блоки по обоим полям.

Когда вы получаете ответ с использованием инструмента для клиентского инструмента, вам следует:

  1. Извлечь name, id и input из блока tool_use.
  2. Запустить в вашей кодовой базе фактический инструмент, соответствующий этому имени инструмента, передав ему input инструмента.
  3. Продолжить разговор, отправив новое сообщение с role равным user и блоком content, содержащим тип tool_result и следующую информацию:
    • tool_use_id: id запроса на использование инструмента, для которого это результат.
    • content (необязательно): Результат инструмента в виде строки (например, "content": "15 degrees"), списка вложенных блоков содержимого (например, "content": [{"type": "text", "text": "15 degrees"}]) или списка блоков документов (например, "content": [{"type": "document", "source": {"type": "text", "media_type": "text/plain", "data": "15 degrees"}}]). Эти блоки содержимого могут использовать типы text, image, document или search_result.
    • is_error (необязательно): Установите в true, если выполнение инструмента завершилось ошибкой.

tool_result, отвечающий на блок члена набора computer use или browser use, также должен повторять то же значение toolset_name, что и блок tool_use; результат члена набора, в котором оно опущено, отклоняется. Его content также более ограничен: результат члена набора может содержать только блоки text и image, а результат browser use может добавить один блок browser_state (члены набора для управления вкладками возвращают только этот блок).