Loading...
  • Разработка
  • Администрирование
  • Модели и цены
  • Клиентские SDK
  • Справочник API
Search...
⌘K
Log in
Обработка вызовов инструментов
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...

Solutions

  • AI agents
  • Code modernization
  • Coding
  • Customer support
  • Education
  • Financial services
  • Government
  • Life sciences

Partners

  • Amazon Bedrock
  • Google Cloud's Vertex AI

Learn

  • Blog
  • Courses
  • Use cases
  • Connectors
  • Customer stories
  • Engineering at Anthropic
  • Events
  • Powered by Claude
  • Service partners
  • Startups program

Company

  • Anthropic
  • Careers
  • Economic Futures
  • Research
  • News
  • Responsible Scaling Policy
  • Security and compliance
  • Transparency

Learn

  • Blog
  • Courses
  • Use cases
  • Connectors
  • Customer stories
  • Engineering at Anthropic
  • Events
  • Powered by Claude
  • Service partners
  • Startups program

Help and security

  • Availability
  • Status
  • Support
  • Discord

Terms and policies

  • Privacy policy
  • Responsible disclosure policy
  • Terms of service: Commercial
  • Terms of service: Consumer
  • Usage policy
Разработка/Инструменты

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

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

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

Проще с Tool Runner: Ручная обработка инструментов, описанная на этой странице, автоматически управляется Tool Runner. Используйте эту страницу, когда вам нужен пользовательский контроль над выполнением инструмента.

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

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

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

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

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

  1. Извлечь name, id и input из блока tool_use.
  2. Запустить фактический инструмент в вашей кодовой базе, соответствующий этому имени инструмента, передав входные данные инструмента.
  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.
    • is_error (опционально): установите значение true, если выполнение инструмента привело к ошибке.

Важные требования к форматированию:

  • Блоки результатов инструмента должны немедленно следовать за соответствующими блоками использования инструмента в истории сообщений. Вы не можете включать никакие сообщения между сообщением об использовании инструмента помощника и сообщением о результате инструмента пользователя.
  • В сообщении пользователя, содержащем результаты инструмента, блоки tool_result должны быть ПЕРВЫМИ в массиве содержимого. Любой текст должен идти ПОСЛЕ всех результатов инструмента.

Например, это вызовет ошибку 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.

Обработка ошибок с помощью is_error

При использовании инструментов с Claude может возникнуть несколько различных типов ошибок:

Следующие шаги

  • Для запуска нескольких инструментов за один ход см. Parallel tool use.
  • Для абстракции SDK, которая автоматизирует этот цикл, см. Tool Runner.
  • Для полного рабочего процесса использования инструмента см. Define tools.

Was this page helpful?

  • Обработка результатов от клиентских инструментов
  • Обработка результатов от серверных инструментов
  • Обработка ошибок с помощью is_error
  • Следующие шаги