Используйте последнюю модель Claude Opus, Claude Opus 5, для сложных инструментов и неоднозначных запросов; она лучше справляется с несколькими инструментами и запрашивает уточнения при необходимости.
Используйте модели Claude Haiku для простых инструментов, но учтите, что они могут домысливать отсутствующие параметры.
Клиентские инструменты (как со схемой Anthropic, так и определяемые пользователем) задаются в параметре верхнего уровня tools запроса к API. Каждое определение инструмента включает:
| Параметр | Описание |
|---|---|
name | Имя инструмента. Должно соответствовать регулярному выражению ^[a-zA-Z0-9_-]{1,64}$. |
description | Подробное текстовое описание того, что делает инструмент, когда его следует использовать и как он себя ведёт. |
input_schema | Объект JSON Schema, определяющий ожидаемые параметры для инструмента. |
input_examples | (Необязательно) Массив примеров входных объектов, помогающих Claude понять, как использовать инструмент. См. Предоставление примеров использования инструментов. |
Полный набор необязательных свойств, доступных в любом определении инструмента, включая cache_control, strict, defer_loading и allowed_callers, см. в Справочнике по инструментам.
Когда вы вызываете Claude API с параметром tools, API формирует специальную системную подсказку из определений инструментов, конфигурации инструментов и любой указанной пользователем системной подсказки. Сформированная подсказка предназначена для того, чтобы проинструктировать модель использовать указанные инструменты и предоставить необходимый контекст для правильной работы инструмента:
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 для предоставления примеров, проверяемых по схеме. Подробности см. в разделе Предоставление примеров использования инструментов.create_pr, review_pr, merge_pr) сгруппируйте их в один инструмент с параметром action. Меньшее количество более функциональных инструментов снижает неоднозначность выбора и упрощает для Claude навигацию по вашему набору инструментов.github_list_prs, slack_send_message). Это делает выбор инструмента однозначным по мере роста вашей библиотеки и особенно важно при использовании поиска инструментов.Хорошее описание ясно объясняет, что делает инструмент, когда его использовать, какие данные он возвращает и что означает параметр ticker. Плохое описание слишком краткое и оставляет у Claude много открытых вопросов о поведении и использовании инструмента.
Вы можете предоставить конкретные примеры допустимых входных данных инструментов, чтобы помочь Claude понять, как более эффективно использовать ваши инструменты. Это особенно полезно для сложных инструментов с вложенными объектами, необязательными параметрами или входными данными, чувствительными к формату.
Добавьте необязательное поле input_examples в определение вашего инструмента с массивом примеров входных объектов. Каждый пример должен быть допустимым согласно input_schema инструмента:
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-5",
max_tokens=1024,
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?"}],
)
print(response)Примеры включаются в подсказку вместе со схемой вашего инструмента, показывая Claude конкретные шаблоны корректно сформированных вызовов инструментов. Это помогает Claude понять, когда включать необязательные параметры, какие форматы использовать и как структурировать сложные входные данные.
input_schema инструмента. Недопустимые примеры возвращают ошибку 400В некоторых случаях вы можете захотеть, чтобы Claude использовал конкретный инструмент для ответа на вопрос пользователя, даже если Claude в противном случае ответил бы напрямую без вызова инструмента. Вы можете сделать это, указав инструмент в поле tool_choice запроса. Выделенные строки — единственное отличие от стандартного запроса с использованием инструментов:
client = anthropic.Anthropic()
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",
}
},
"required": ["location"],
},
}
]
response = client.messages.create(
model="claude-opus-5",
max_tokens=1024,
tools=tools,
tool_choice={"type": "tool", "name": "get_weather"},
messages=[{"role": "user", "content": "What's the weather like in San Francisco?"}],
)
print(response)При работе с параметром tool_choice существует четыре возможных варианта:
auto позволяет Claude решать, вызывать ли какие-либо из предоставленных инструментов или нет. Это значение по умолчанию, когда предоставлены tools.any сообщает Claude, что он должен использовать один из предоставленных инструментов, но не принуждает к конкретному инструменту.tool принуждает Claude всегда использовать конкретный инструмент.none запрещает Claude использовать какие-либо инструменты. Это значение по умолчанию, когда tools не предоставлены.Эта диаграмма иллюстрирует, как работает каждый вариант:

Обратите внимание, что когда tool_choice установлен в any или tool, API предварительно заполняет сообщение ассистента, чтобы принудить к использованию инструмента. Это означает, что модели не будут выдавать ответ на естественном языке или объяснение перед блоками содержимого tool_use, даже если их явно об этом попросить.
Тестирование показало, что это не должно снижать производительность. Если вы хотите, чтобы модель предоставляла контекст или объяснения на естественном языке, при этом всё же запрашивая использование конкретного инструмента, вы можете использовать {"type": "auto"} для tool_choice (по умолчанию) и добавить явные инструкции в сообщение user. Например: What's the weather like in London? Use the get_weather tool in your response.
При использовании инструментов Claude часто комментирует, что он делает, или естественно отвечает пользователю перед вызовом инструментов.
Например, на подсказку «What's the weather like in San Francisco right now, and what time is it there?» 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 может использовать различные формулировки и подходы при объяснении своих действий. Ваш код должен обрабатывать эти ответы как любой другой текст, сгенерированный ассистентом, и не полагаться на конкретные соглашения о форматировании.
Разбирайте блоки tool_use и форматируйте ответы tool_result.
Позвольте SDK автоматически обрабатывать агентный цикл.
Каталог инструментов, предоставляемых Anthropic, и необязательных свойств.
Was this page helpful?