На этой странице рассматривается жизненный цикл вызова инструмента: чтение блоков tool_use из ответа Claude, форматирование блоков tool_result в вашем ответе и сигнализация об ошибках. Для абстракции SDK, которая обрабатывает это автоматически, см. Tool Runner.
Проще с Tool Runner: Ручная обработка инструментов, описанная на этой странице, автоматически управляется Tool Runner. Используйте эту страницу, когда вам нужен пользовательский контроль над выполнением инструмента.
Ответ Claude отличается в зависимости от того, использует ли он клиентский или серверный инструмент.
Ответ будет иметь stop_reason равный tool_use и один или несколько блоков содержимого tool_use, которые включают:
id: уникальный идентификатор для этого конкретного блока использования инструмента. Он будет использоваться для сопоставления результатов инструмента позже.name: имя используемого инструмента.input: объект, содержащий входные данные, передаваемые инструменту, соответствующие input_schema инструмента.Когда вы получаете ответ об использовании инструмента для клиентского инструмента, вы должны:
name, id и input из блока tool_use.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.is_error (опционально): установите значение true, если выполнение инструмента привело к ошибке.Важные требования к форматированию:
Например, это вызовет ошибку 400:
{
"role": "user",
"content": [
{ "type": "text", "text": "Here are the results:" }, // ❌ Text before tool_result
{ "type": "tool_result", "tool_use_id": "toolu_01" /* ... */ }
]
}Это правильно:
{
"role": "user",
"content": [
{ "type": "tool_result", "tool_use_id": "toolu_01" /* ... */ },
{ "type": "text", "text": "What should I do next?" } // ✅ Text after tool_result
]
}Если вы получите ошибку типа "tool_use ids were found without tool_result blocks immediately after", проверьте, что результаты вашего инструмента отформатированы правильно.
После получения результата инструмента Claude будет использовать эту информацию для продолжения генерации ответа на исходный запрос пользователя.
Claude выполняет инструмент внутри и включает результаты непосредственно в свой ответ без необходимости дополнительного взаимодействия с пользователем.
Различия от других API
В отличие от API, которые разделяют использование инструмента или используют специальные роли, такие как tool или function, API Claude интегрирует инструменты непосредственно в структуру сообщений user и assistant.
Сообщения содержат массивы блоков text, image, tool_use и tool_result. Сообщения user включают содержимое клиента и tool_result, а сообщения assistant содержат сгенерированное ИИ содержимое и tool_use.
При использовании инструментов с Claude может возникнуть несколько различных типов ошибок:
Was this page helpful?