Мы рекомендуем использовать последнюю модель Claude Sonnet (4.5) или Claude Opus (4.1) для сложных инструментов и неоднозначных запросов; они лучше справляются с несколькими инструментами и запрашивают уточнения при необходимости.
Используйте модели Claude Haiku для простых инструментов, но имейте в виду, что они могут выводить отсутствующие параметры.
Если вы используете Claude с использованием инструментов и расширенным мышлением, обратитесь к нашему руководству здесь для получения дополнительной информации.
Клиентские инструменты (как определённые Anthropic, так и определённые пользователем) указываются в параметре tools верхнего уровня запроса API. Каждое определение инструмента включает:
| Параметр | Описание |
|---|---|
name | Имя инструмента. Должно соответствовать регулярному выражению ^[a-zA-Z0-9_-]{1,64}$. |
description | Подробное описание на простом языке того, что делает инструмент, когда его следует использовать и как он себя ведёт. |
input_schema | Объект JSON Schema, определяющий ожидаемые параметры для инструмента. |
input_examples | (Опционально, бета) Массив примеров входных объектов, чтобы помочь Claude понять, как использовать инструмент. См. Предоставление примеров использования инструментов. |
Когда вы вызываете API Claude с параметром tools, мы создаём специальный системный запрос из определений инструментов, конфигурации инструментов и любого указанного пользователем системного запроса. Созданный запрос предназначен для инструктирования модели использовать указанный инструмент (инструменты) и предоставить необходимый контекст для правильной работы инструмента:
In this environment you have access to a set of tools you can use to answer the user's question.
{{ FORMATTING INSTRUCTIONS }}
String and scalar parameters should be specified as is, while lists and objects should use JSON format. Note that spaces for string values are not stripped. The output is not expected to be valid XML and is parsed with regular expressions.
Here are the functions available in JSONSchema format:
{{ TOOL DEFINITIONS IN JSON SCHEMA }}
{{ USER SYSTEM PROMPT }}
{{ TOOL CONFIGURATION }}Чтобы получить лучшую производительность от Claude при использовании инструментов, следуйте этим рекомендациям:
input_examples для сложных инструментов. Чёткие описания наиболее важны, но для инструментов со сложными входными данными, вложенными объектами или параметрами, чувствительными к формату, вы можете использовать поле input_examples (бета) для предоставления примеров, проверенных по схеме. См. Предоставление примеров использования инструментов для получения подробной информации.Хорошее описание ясно объясняет, что делает инструмент, когда его использовать, какие данные он возвращает и что означает параметр ticker. Плохое описание слишком краткое и оставляет Claude с множеством открытых вопросов о поведении и использовании инструмента.
Вы можете предоставить конкретные примеры допустимых входных данных инструмента, чтобы помочь Claude более эффективно понять, как использовать ваши инструменты. Это особенно полезно для сложных инструментов с вложенными объектами, опциональными параметрами или входными данными, чувствительными к формату.
Примеры использования инструментов — это функция бета. Включите соответствующий бета-заголовок для вашего провайдера:
| Провайдер | Бета-заголовок | Поддерживаемые модели |
|---|---|---|
| Claude API, Microsoft Foundry | advanced-tool-use-2025-11-20 | Все модели |
| Vertex AI, Amazon Bedrock | tool-examples-2025-10-29 | Claude Opus 4.5 только |
Добавьте опциональное поле input_examples к определению вашего инструмента с массивом примеров входных объектов. Каждый пример должен быть действительным в соответствии с input_schema инструмента:
Примеры включены в запрос вместе со схемой вашего инструмента, показывая Claude конкретные шаблоны для хорошо сформированных вызовов инструментов. Это помогает Claude понять, когда включать опциональные параметры, какие форматы использовать и как структурировать сложные входные данные.
input_schema инструмента. Недействительные примеры возвращают ошибку 400Средство запуска инструментов предоставляет готовое решение для выполнения инструментов с Claude. Вместо ручной обработки вызовов инструментов, результатов инструментов и управления разговором, средство запуска инструментов автоматически:
Мы рекомендуем использовать средство запуска инструментов для большинства реализаций использования инструментов.
Средство запуска инструментов в настоящее время находится в бета-версии и доступно в SDK для Python, TypeScript и Ruby.
Автоматическое управление контекстом с компактностью
Средство запуска инструментов поддерживает автоматическую компактность, которая генерирует резюме, когда использование токенов превышает пороговое значение. Это позволяет долгосрочным агентским задачам продолжаться за пределами лимитов контекстного окна.
Средство запуска инструментов SDK находится в бета-версии. Остальная часть этого документа охватывает ручную реализацию инструментов.
В некоторых случаях вы можете захотеть, чтобы Claude использовал конкретный инструмент для ответа на вопрос пользователя, даже если Claude думает, что может предоставить ответ без использования инструмента. Вы можете сделать это, указав инструмент в поле tool_choice следующим образом:
tool_choice = {"type": "tool", "name": "get_weather"}При работе с параметром tool_choice у нас есть четыре возможных варианта:
auto позволяет Claude решить, вызывать ли какие-либо предоставленные инструменты или нет. Это значение по умолчанию, когда предоставлены tools.any говорит Claude, что он должен использовать один из предоставленных инструментов, но не принуждает к использованию конкретного инструмента.tool позволяет нам принудить Claude всегда использовать конкретный инструмент.none предотвращает использование Claude любых инструментов. Это значение по умолчанию, когда tools не предоставлены.При использовании кэширования запросов изменения параметра tool_choice будут инвалидировать кэшированные блоки сообщений. Определения инструментов и системные запросы остаются кэшированными, но содержимое сообщения должно быть переобработано.
Эта диаграмма иллюстрирует, как работает каждый вариант:

Обратите внимание, что когда у вас есть tool_choice как any или tool, мы предварительно заполним сообщение помощника, чтобы принудить использование инструмента. Это означает, что модели не будут выдавать естественный языковой ответ или объяснение перед блоками содержимого tool_use, даже если об этом явно попросить.
При использовании расширенного мышления с использованием инструментов tool_choice: {"type": "any"} и tool_choice: {"type": "tool", "name": "..."} не поддерживаются и приведут к ошибке. Совместимы только tool_choice: {"type": "auto"} (по умолчанию) и tool_choice: {"type": "none"}.
Наше тестирование показало, что это не должно снижать производительность. Если вы хотите, чтобы модель предоставила естественный языковой контекст или объяснения, одновременно запрашивая использование конкретного инструмента, вы можете использовать {"type": "auto"} для tool_choice (по умолчанию) и добавить явные инструкции в сообщение user. Например: What's the weather like in London? Use the get_weather tool in your response.
Гарантированные вызовы инструментов со строгими инструментами
Объедините tool_choice: {"type": "any"} с строгим использованием инструментов для гарантии как того, что один из ваших инструментов будет вызван, ТАК И того, что входные данные инструмента строго следуют вашей схеме. Установите strict: true в определениях ваших инструментов, чтобы включить валидацию схемы.
Инструменты не обязательно должны быть клиентскими функциями — вы можете использовать инструменты в любое время, когда хотите, чтобы модель возвращала вывод JSON, который следует предоставленной схеме. Например, вы можете использовать инструмент record_summary с определённой схемой. См. Использование инструментов с Claude для полного рабочего примера.
При использовании инструментов Claude часто комментирует свои действия или естественно отвечает пользователю перед вызовом инструментов.
Например, при запросе "Какая погода в Сан-Франциско прямо сейчас и какое там время?", Claude может ответить:
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "I'll help you check the current weather and time in San Francisco."
},
{
"type": "tool_use",
"id": "toolu_01A09q90qw90lq917835lq9",
"name": "get_weather",
"input": {"location": "San Francisco, CA"}
}
]
}Этот естественный стиль ответа помогает пользователям понять, что делает Claude, и создает более разговорное взаимодействие. Вы можете направлять стиль и содержание этих ответов через системные подсказки и предоставляя <examples> в ваших подсказках.
Важно отметить, что Claude может использовать различные формулировки и подходы при объяснении своих действий. Ваш код должен рассматривать эти ответы как любой другой текст, сгенерированный ассистентом, и не полагаться на определенные соглашения форматирования.
По умолчанию Claude может использовать несколько инструментов для ответа на запрос пользователя. Вы можете отключить это поведение:
disable_parallel_tool_use=true когда тип tool_choice равен auto, что гарантирует, что Claude использует максимум один инструментdisable_parallel_tool_use=true когда тип tool_choice равен any или tool, что гарантирует, что Claude использует ровно один инструментХотя модели Claude 4 имеют отличные возможности параллельного использования инструментов по умолчанию, вы можете увеличить вероятность параллельного выполнения инструментов во всех моделях с помощью целевых подсказок:
Параллельное использование инструментов с Claude Sonnet 3.7
Claude Sonnet 3.7 может быть менее склонен к параллельным вызовам инструментов в ответе, даже если вы не установили disable_parallel_tool_use. Мы рекомендуем обновиться до моделей Claude 4, которые имеют встроенное эффективное использование инструментов по токенам и улучшенный параллельный вызов инструментов.
Если вы все еще используете Claude Sonnet 3.7, вы можете включить бета-заголовок token-efficient-tools-2025-02-19, который помогает поощрять Claude использовать параллельные инструменты. Вы также можете представить "пакетный инструмент", который может действовать как мета-инструмент для обертывания вызовов других инструментов одновременно.
Смотрите этот пример в нашей кулинарной книге, чтобы узнать, как использовать это решение.
Проще с Tool runner: Ручная обработка инструментов, описанная в этом разделе, автоматически управляется tool runner. Используйте этот раздел, когда вам нужен пользовательский контроль над выполнением инструментов.
Ответ Claude отличается в зависимости от того, использует ли он клиентский или серверный инструмент.
Ответ будет иметь stop_reason равный tool_use и один или несколько блоков содержимого tool_use, которые включают:
id: Уникальный идентификатор для этого конкретного блока tool use. Это будет использоваться для сопоставления результатов инструментов позже.name: Имя используемого инструмента.input: Объект, содержащий входные данные, передаваемые инструменту, соответствующие input_schema инструмента.Когда вы получаете ответ tool use для клиентского инструмента, вы должны:
name, id и input из блока tool_use.role равным user и блоком content, содержащим тип tool_result и следующую информацию:
tool_use_id: id запроса tool use, для которого это результат.content: Результат инструмента в виде строки (например, "content": "15 degrees"), списка вложенных блоков содержимого (например, ) или списка блоков документов (например, ). Эти блоки содержимого могут использовать типы , или .Важные требования к форматированию:
Например, это вызовет ошибку 400:
{"role": "user", "content": [
{"type": "text", "text": "Here are the results:"}, // ❌ Text before tool_result
{"type": "tool_result", "tool_use_id": "toolu_01", ...}
]}После получения результата инструмента Claude будет использовать эту информацию для продолжения генерирования ответа на исходный запрос пользователя.
Claude выполняет инструмент внутри и включает результаты непосредственно в свой ответ без необходимости дополнительного взаимодействия с пользователем.
Различия от других API
В отличие от API, которые разделяют использование инструментов или используют специальные роли, такие как tool или function, API Claude интегрирует инструменты непосредственно в структуру сообщений user и assistant.
Сообщения содержат массивы блоков text, image, tool_use и tool_result. Сообщения user включают содержимое клиента и tool_result, а сообщения assistant содержат содержимое, сгенерированное ИИ, и tool_use.
max_tokensЕсли ответ Claude обрезан из-за достижения лимита max_tokens, и обрезанный ответ содержит неполный блок tool use, вам нужно будет повторить запрос с более высоким значением max_tokens, чтобы получить полный tool use.
pause_turnПри использовании серверных инструментов, таких как веб-поиск, API может вернуть причину остановки pause_turn, указывающую, что API приостановил длительный ход.
Вот как обработать причину остановки pause_turn:
При обработке pause_turn:
Встроенная обработка ошибок: Tool runner обеспечивает автоматическую обработку ошибок для большинства распространенных сценариев. Этот раздел охватывает ручную обработку ошибок для продвинутых случаев использования.
Существует несколько различных типов ошибок, которые могут возникнуть при использовании инструментов с Claude:
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-sonnet-4-5-20250929",
max_tokens=1024,
betas=["advanced-tool-use-2025-11-20"],
tools=[
{
"name": "get_weather",
"description": "Get the current weather in a given location",
"input_schema": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "The unit of temperature"
}
},
"required": ["location"]
},
"input_examples": [
{
"location": "San Francisco, CA",
"unit": "fahrenheit"
},
{
"location": "Tokyo, Japan",
"unit": "celsius"
},
{
"location": "New York, NY" # 'unit' is optional
}
]
}
],
messages=[
{"role": "user", "content": "What's the weather like in San Francisco?"}
]
)"content": [{"type": "text", "text": "15 degrees"}]"content": ["type": "document", "source": {"type": "text", "media_type": "text/plain", "data": "15 degrees"}]textimagedocumentis_error (опционально): Установите значение true, если выполнение инструмента привело к ошибке.Это правильно:
{"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", проверьте, что результаты инструментов отформатированы правильно.
# Check if response was truncated during tool use
if response.stop_reason == "max_tokens":
# Check if the last content block is an incomplete tool_use
last_block = response.content[-1]
if last_block.type == "tool_use":
# Send the request with higher max_tokens
response = client.messages.create(
model="claude-sonnet-4-5",
max_tokens=4096, # Increased limit
messages=messages,
tools=tools
)import anthropic
client = anthropic.Anthropic()
# Initial request with web search
response = client.messages.create(
model="claude-3-7-sonnet-latest",
max_tokens=1024,
messages=[
{
"role": "user",
"content": "Search for comprehensive information about quantum computing breakthroughs in 2025"
}
],
tools=[{
"type": "web_search_20250305",
"name": "web_search",
"max_uses": 10
}]
)
# Check if the response has pause_turn stop reason
if response.stop_reason == "pause_turn":
# Continue the conversation with the paused content
messages = [
{"role": "user", "content": "Search for comprehensive information about quantum computing breakthroughs in 2025"},
{"role": "assistant", "content": response.content}
]
# Send the continuation request
continuation = client.messages.create(
model="claude-3-7-sonnet-latest",
max_tokens=1024,
messages=messages,
tools=[{
"type": "web_search_20250305",
"name": "web_search",
"max_uses": 10
}]
)
print(continuation)
else:
print(response)