Выбор модели
Как правило, используйте Claude Opus 4.1, Claude Opus 4, Claude Sonnet 4, Claude Sonnet 3.7, Claude Sonnet 3.5 (устарела) или Claude Opus 3 (устарела) для сложных инструментов и неоднозначных запросов; они лучше справляются с несколькими инструментами и при необходимости запрашивают уточнения. Используйте Claude Haiku 3.5 или Claude Haiku 3 для простых инструментов, но учтите, что они могут выводить недостающие параметры.Если вы используете Claude Sonnet 3.7 с использованием инструментов и расширенным мышлением, обратитесь к нашему руководству здесь для получения дополнительной информации.
Указание клиентских инструментов
Клиентские инструменты (как определенные Anthropic, так и определенные пользователем) указываются в параметре верхнего уровняtools
API-запроса. Каждое определение инструмента включает:
Параметр | Описание |
---|---|
name | Имя инструмента. Должно соответствовать регулярному выражению ^[a-zA-Z0-9_-]{1,64}$ . |
description | Подробное описание в виде обычного текста того, что делает инструмент, когда его следует использовать и как он работает. |
input_schema | Объект JSON Schema, определяющий ожидаемые параметры для инструмента. |
Пример простого определения инструмента
Пример простого определения инструмента
JSON
get_weather
ожидает входной объект с обязательной строкой location
и необязательной строкой unit
, которая должна быть либо “celsius”, либо “fahrenheit”.Системный промпт для использования инструментов
Когда вы вызываете API Anthropic с параметромtools
, мы создаем специальный системный промпт из определений инструментов, конфигурации инструментов и любого указанного пользователем системного промпта. Созданный промпт предназначен для инструктирования модели использовать указанные инструменты и предоставления необходимого контекста для правильной работы инструмента:
Лучшие практики для определений инструментов
Чтобы получить лучшую производительность от Claude при использовании инструментов, следуйте этим рекомендациям:- Предоставляйте крайне подробные описания. Это самый важный фактор в производительности инструментов. Ваши описания должны объяснять каждую деталь об инструменте, включая:
- Что делает инструмент
- Когда его следует использовать (и когда не следует)
- Что означает каждый параметр и как он влияет на поведение инструмента
- Любые важные предостережения или ограничения, такие как какую информацию инструмент не возвращает, если имя инструмента неясно. Чем больше контекста вы можете дать Claude о ваших инструментах, тем лучше он будет решать, когда и как их использовать. Стремитесь к минимум 3-4 предложениям на описание инструмента, больше, если инструмент сложный.
- Отдавайте приоритет описаниям над примерами. Хотя вы можете включить примеры использования инструмента в его описание или в сопроводительный промпт, это менее важно, чем наличие ясного и всеобъемлющего объяснения назначения и параметров инструмента. Добавляйте примеры только после того, как полностью проработали описание.
Пример хорошего описания инструмента
Пример хорошего описания инструмента
JSON
Пример плохого описания инструмента
Пример плохого описания инструмента
JSON
ticker
. Плохое описание слишком краткое и оставляет Claude с множеством открытых вопросов о поведении и использовании инструмента.
Управление выводом Claude
Принуждение к использованию инструментов
В некоторых случаях вы можете захотеть, чтобы Claude использовал конкретный инструмент для ответа на вопрос пользователя, даже если Claude думает, что может дать ответ без использования инструмента. Вы можете сделать это, указав инструмент в полеtool_choice
следующим образом:
auto
позволяет Claude решать, вызывать ли любые предоставленные инструменты или нет. Это значение по умолчанию, когда предоставленыtools
.any
говорит Claude, что он должен использовать один из предоставленных инструментов, но не принуждает к конкретному инструменту.tool
позволяет нам принудить Claude всегда использовать конкретный инструмент.none
предотвращает использование Claude любых инструментов. Это значение по умолчанию, когдаtools
не предоставлены.
При использовании кэширования промптов, изменения параметра
tool_choice
аннулируют кэшированные блоки сообщений. Определения инструментов и системные промпты остаются кэшированными, но содержимое сообщений должно быть переобработано.
tool_choice
как any
или tool
, мы предварительно заполним сообщение ассистента, чтобы принудить к использованию инструмента. Это означает, что модели не будут выдавать блок содержимого text
с цепочкой рассуждений перед блоками содержимого tool_use
, даже если явно попросить об этом.
При использовании расширенного мышления с использованием инструментов,
tool_choice: {"type": "any"}
и tool_choice: {"type": "tool", "name": "..."}
не поддерживаются и приведут к ошибке. Только tool_choice: {"type": "auto"}
(по умолчанию) и tool_choice: {"type": "none"}
совместимы с расширенным мышлением.{"type": "auto"}
для tool_choice
(по умолчанию) и добавить явные инструкции в сообщение user
. Например: Какая погода в Лондоне? Используйте инструмент get_weather в своем ответе.
Вывод JSON
Инструменты не обязательно должны быть клиентскими функциями — вы можете использовать инструменты в любое время, когда хотите, чтобы модель возвращала вывод JSON, который следует предоставленной схеме. Например, вы можете использовать инструментrecord_summary
с конкретной схемой. См. Использование инструментов с Claude для полного рабочего примера.
Цепочка рассуждений
При использовании инструментов Claude часто показывает свою “цепочку рассуждений”, т.е. пошаговое рассуждение, которое он использует для разбора проблемы и решения, какие инструменты использовать. Модель Claude Opus 3 (устарела) будет делать это, еслиtool_choice
установлен в auto
(это значение по умолчанию, см. Принуждение к использованию инструментов), а Sonnet и Haiku можно побудить к этому.
Например, при получении промпта “Какая погода в Сан-Франциско прямо сейчас, и который там час?”, Claude может ответить:
JSON
Параллельное использование инструментов
По умолчанию Claude может использовать несколько инструментов для ответа на запрос пользователя. Вы можете отключить это поведение:- Установив
disable_parallel_tool_use=true
, когда тип tool_choice равенauto
, что гарантирует, что Claude использует не более одного инструмента - Установив
disable_parallel_tool_use=true
, когда тип tool_choice равенany
илиtool
, что гарантирует, что Claude использует ровно один инструмент
Полный пример параллельного использования инструментов
Полный пример параллельного использования инструментов
Вот полный пример, показывающий, как правильно форматировать параллельные вызовы инструментов в истории сообщений:Сообщение ассистента с параллельными вызовами инструментов будет выглядеть так:
Полный тестовый скрипт для параллельных инструментов
Полный тестовый скрипт для параллельных инструментов
Вот полный, исполняемый скрипт для тестирования и проверки правильной работы параллельных вызовов инструментов:Этот скрипт демонстрирует:
- Как правильно форматировать параллельные вызовы инструментов и результаты
- Как проверить, что параллельные вызовы выполняются
- Правильную структуру сообщений, которая поощряет будущее параллельное использование инструментов
- Распространенные ошибки, которых следует избегать (например, текст перед результатами инструментов)
Максимизация параллельного использования инструментов
Хотя модели Claude 4 имеют отличные возможности параллельного использования инструментов по умолчанию, вы можете увеличить вероятность параллельного выполнения инструментов во всех моделях с помощью целевого промптинга:Системные промпты для параллельного использования инструментов
Системные промпты для параллельного использования инструментов
Для моделей Claude 4 (Opus 4.1, Opus 4 и Sonnet 4) добавьте это в ваш системный промпт:Для еще более сильного параллельного использования инструментов (рекомендуется, если значения по умолчанию недостаточно), используйте:
Промптинг пользовательских сообщений
Промптинг пользовательских сообщений
Вы также можете поощрять параллельное использование инструментов в конкретных пользовательских сообщениях:
Параллельное использование инструментов с Claude Sonnet 3.7Claude Sonnet 3.7 может быть менее склонен к выполнению параллельных вызовов инструментов в ответе, даже когда вы не установили
disable_parallel_tool_use
. Чтобы обойти это, мы рекомендуем включить эффективное по токенам использование инструментов, что помогает поощрить Claude к использованию параллельных инструментов. Эта бета-функция также снижает задержку и экономит в среднем 14% выходных токенов.Если вы предпочитаете не включать бета-версию эффективного по токенам использования инструментов, вы также можете ввести “пакетный инструмент”, который может действовать как мета-инструмент для одновременного обертывания вызовов других инструментов. Мы обнаружили, что если этот инструмент присутствует, модель будет использовать его для одновременного параллельного вызова нескольких инструментов для вас.См. этот пример в нашей кулинарной книге для того, как использовать этот обходной путь.Обработка блоков содержимого использования инструментов и результатов инструментов
Ответ Claude различается в зависимости от того, использует ли он клиентский или серверный инструмент.Обработка результатов от клиентских инструментов
Ответ будет иметьstop_reason
равный tool_use
и один или несколько блоков содержимого tool_use
, которые включают:
id
: Уникальный идентификатор для этого конкретного блока использования инструмента. Он будет использоваться для сопоставления результатов инструмента позже.name
: Имя используемого инструмента.input
: Объект, содержащий входные данные, передаваемые инструменту, соответствующиеinput_schema
инструмента.
Пример API-ответа с блоком содержимого `tool_use`
Пример API-ответа с блоком содержимого `tool_use`
JSON
- Извлечь
name
,id
иinput
из блокаtool_use
. - Запустить фактический инструмент в вашей кодовой базе, соответствующий этому имени инструмента, передав
input
инструмента. - Продолжить разговор, отправив новое сообщение с
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_use ids were found without tool_result blocks immediately after”, проверьте, что ваши результаты инструментов отформатированы правильно.
- Блоки результатов инструментов должны непосредственно следовать за соответствующими блоками использования инструментов в истории сообщений. Вы не можете включать какие-либо сообщения между сообщением об использовании инструмента ассистентом и сообщением с результатом инструмента пользователя.
- В пользовательском сообщении, содержащем результаты инструментов, блоки tool_result должны идти ПЕРВЫМИ в массиве содержимого. Любой текст должен идти ПОСЛЕ всех результатов инструментов.
Пример успешного результата инструмента
Пример успешного результата инструмента
JSON
Пример результата инструмента с изображениями
Пример результата инструмента с изображениями
JSON
Пример пустого результата инструмента
Пример пустого результата инструмента
JSON
Пример результата инструмента с документами
Пример результата инструмента с документами
JSON
Обработка результатов от серверных инструментов
Claude выполняет инструмент внутренне и включает результаты непосредственно в свой ответ без требования дополнительного взаимодействия с пользователем.Различия от других APIВ отличие от API, которые разделяют использование инструментов или используют специальные роли, такие как
tool
или function
, API Anthropic интегрирует инструменты непосредственно в структуру сообщений user
и assistant
.Сообщения содержат массивы блоков text
, image
, tool_use
и tool_result
. Сообщения user
включают клиентское содержимое и tool_result
, в то время как сообщения assistant
содержат содержимое, сгенерированное ИИ, и tool_use
.Обработка причины остановки max_tokens
Если ответ Claude обрезан из-за достижения лимита max_tokens
, и обрезанный ответ содержит неполный блок использования инструмента, вам нужно будет повторить запрос с более высоким значением max_tokens
, чтобы получить полное использование инструмента.
Обработка причины остановки pause_turn
При использовании серверных инструментов, таких как веб-поиск, API может вернуть причину остановки pause_turn
, указывающую, что API приостановил длительный ход.
Вот как обработать причину остановки pause_turn
:
pause_turn
:
- Продолжите разговор: Передайте приостановленный ответ как есть в последующем запросе, чтобы позволить Claude продолжить свой ход
- Измените при необходимости: Вы можете дополнительно изменить содержимое перед продолжением, если хотите прервать или перенаправить разговор
- Сохраните состояние инструмента: Включите те же инструменты в запрос продолжения для поддержания функциональности
Устранение ошибок
Существует несколько различных типов ошибок, которые могут возникнуть при использовании инструментов с Claude:Ошибка выполнения инструмента
Ошибка выполнения инструмента
Если сам инструмент выбрасывает ошибку во время выполнения (например, сетевая ошибка при получении данных о погоде), вы можете вернуть сообщение об ошибке в Claude затем включит эту ошибку в свой ответ пользователю, например: “Извините, я не смог получить текущую погоду, потому что API службы погоды недоступен. Пожалуйста, попробуйте еще раз позже.”
content
вместе с "is_error": true
:JSON
Неверное имя инструмента
Неверное имя инструмента
Если попытка Claude использовать инструмент недействительна (например, отсутствуют обязательные параметры), это обычно означает, что не было достаточно информации для правильного использования инструмента Claude. Ваш лучший вариант во время разработки — попробовать запрос снова с более подробными значениями Если запрос инструмента недействителен или отсутствуют параметры, Claude повторит попытку 2-3 раза с исправлениями, прежде чем извиниться перед пользователем.
description
в определениях ваших инструментов.Однако вы также можете продолжить разговор с tool_result
, который указывает на ошибку, и Claude попытается использовать инструмент снова с заполненной недостающей информацией:JSON
Теги <search_quality_reflection>
Теги <search_quality_reflection>
Чтобы предотвратить размышления Claude о качестве поиска с тегами <search_quality_reflection>, добавьте “Do not reflect on the quality of the returned search results in your response” в ваш промпт.
Ошибки серверных инструментов
Ошибки серверных инструментов
Когда серверные инструменты сталкиваются с ошибками (например, проблемы с сетью при веб-поиске), Claude прозрачно обработает эти ошибки и попытается предоставить альтернативный ответ или объяснение пользователю. В отличие от клиентских инструментов, вам не нужно обрабатывать результаты
is_error
для серверных инструментов.Для веб-поиска в частности, возможные коды ошибок включают:too_many_requests
: Превышен лимит скоростиinvalid_input
: Неверный параметр поискового запросаmax_uses_exceeded
: Превышено максимальное количество использований инструмента веб-поискаquery_too_long
: Запрос превышает максимальную длинуunavailable
: Произошла внутренняя ошибка
Параллельные вызовы инструментов не работают
Параллельные вызовы инструментов не работают
Если Claude не выполняет параллельные вызовы инструментов, когда ожидается, проверьте эти распространенные проблемы:1. Неправильное форматирование результатов инструментовНаиболее распространенная проблема — неправильное форматирование результатов инструментов в истории разговора. Это “учит” Claude избегать параллельных вызовов.Специально для параллельного использования инструментов:См. общие требования к форматированию выше для других правил форматирования.2. Слабый промптингПромптинг по умолчанию может быть недостаточным. Используйте более сильные формулировки:3. Измерение использования параллельных инструментовДля проверки работы параллельных вызовов инструментов:4. Поведение, специфичное для модели
- ❌ Неправильно: Отправка отдельных пользовательских сообщений для каждого результата инструмента
- ✅ Правильно: Все результаты инструментов должны быть в одном пользовательском сообщении
- Claude Opus 4.1, Opus 4 и Sonnet 4: Превосходно справляются с параллельным использованием инструментов с минимальным промптингом
- Claude Sonnet 3.7: Может потребовать более сильного промптинга или эффективного по токенам использования инструментов
- Claude Haiku: Менее вероятно использование параллельных инструментов без явного промптинга