Инструмент поиска инструментов позволяет Claude работать с сотнями или тысячами инструментов, динамически обнаруживая и загружая их по требованию. Вместо загрузки всех определений инструментов в контекстное окно заранее, Claude ищет в вашем каталоге инструментов — включая названия инструментов, описания, названия аргументов и описания аргументов — и загружает только необходимые ему инструменты.
Этот подход решает две критические проблемы по мере масштабирования библиотек инструментов:
Хотя это предоставляется как серверный инструмент, вы также можете реализовать собственную функциональность поиска инструментов на стороне клиента. Подробности см. в разделе Пользовательская реализация поиска инструментов.
Инструмент поиска инструментов в настоящее время находится в общественной бета-версии. Включите соответствующий заголовок бета-версии для вашего поставщика:
| Поставщик | Заголовок бета-версии | Поддерживаемые модели |
|---|---|---|
| Claude API Microsoft Foundry | advanced-tool-use-2025-11-20 | Claude Opus 4.5 Claude Sonnet 4.5 |
| Google Cloud's Vertex AI | tool-search-tool-2025-10-19 | Claude Opus 4.5 Claude Sonnet 4.5 |
| Amazon Bedrock | tool-search-tool-2025-10-19 | Claude Opus 4.5 |
На Amazon Bedrock поиск инструментов на стороне сервера доступен только через API invoke, а не через API converse.
Вы также можете реализовать поиск инструментов на стороне клиента, возвращая блоки tool_reference из вашей собственной реализации поиска.
Существует два варианта поиска инструментов:
tool_search_tool_regex_20251119): Claude создает шаблоны regex для поиска инструментовtool_search_tool_bm25_20251119): Claude использует запросы на естественном языке для поиска инструментовКогда вы включаете инструмент поиска инструментов:
tool_search_tool_regex_20251119 или tool_search_tool_bm25_20251119) в список инструментовdefer_loading: true для инструментов, которые не должны загружаться немедленноtool_referenceЭто сохраняет ваше контекстное окно эффективным, сохраняя при этом высокую точность выбора инструмента.
Вот простой пример с отложенными инструментами:
Инструмент поиска инструментов имеет два варианта:
{
"type": "tool_search_tool_regex_20251119",
"name": "tool_search_tool_regex"
}{
"type": "tool_search_tool_bm25_20251119",
"name": "tool_search_tool_bm25"
}Формат запроса варианта Regex: Python regex, НЕ естественный язык
При использовании tool_search_tool_regex_20251119 Claude создает шаблоны regex, используя синтаксис re.search() Python, а не запросы на естественном языке. Общие шаблоны:
"weather" - совпадает с названиями/описаниями инструментов, содержащими "weather""get_.*_data" - совпадает с инструментами типа get_user_data, get_weather_data"database.*query|query.*database" - шаблоны ИЛИ для гибкости"(?i)slack" - поиск без учета регистраМаксимальная длина запроса: 200 символов
Формат запроса варианта BM25: Естественный язык
При использовании tool_search_tool_bm25_20251119 Claude использует запросы на естественном языке для поиска инструментов.
Отметьте инструменты для загрузки по требованию, добавив defer_loading: true:
{
"name": "get_weather",
"description": "Get current weather for a location",
"input_schema": {
"type": "object",
"properties": {
"location": { "type": "string" },
"unit": { "type": "string", "enum": ["celsius", "fahrenheit"] }
},
"required": ["location"]
},
"defer_loading": true
}Ключевые моменты:
defer_loading загружаются в контекст немедленноdefer_loading: true загружаются только когда Claude обнаруживает их через поискdefer_loading: trueОба варианта поиска инструментов (regex и bm25) ищут названия инструментов, описания, названия аргументов и описания аргументов.
Когда Claude использует инструмент поиска инструментов, ответ включает новые типы блоков:
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "I'll search for tools to help with the weather information."
},
{
"type": "server_tool_use",
"id": "srvtoolu_01ABC123",
"name": "tool_search_tool_regex",
"input": {
"query": "weather"
}
},
{
"type": "tool_search_tool_result",
"tool_use_id": "srvtoolu_01ABC123",
"content": {
"type": "tool_search_tool_search_result",
"tool_references": [{ "type": "tool_reference", "tool_name": "get_weather" }]
}
},
{
"type": "text",
"text": "I found a weather tool. Let me get the weather for San Francisco."
},
{
"type": "tool_use",
"id": "toolu_01XYZ789",
"name": "get_weather",
"input": { "location": "San Francisco", "unit": "fahrenheit" }
}
],
"stop_reason": "tool_use"
}server_tool_use: Указывает, что Claude вызывает инструмент поиска инструментовtool_search_tool_result: Содержит результаты поиска с вложенным объектом tool_search_tool_search_resulttool_references: Массив объектов tool_reference, указывающих на обнаруженные инструментыtool_use: Claude вызывает обнаруженный инструментБлоки tool_reference автоматически расширяются в полные определения инструментов перед отображением Claude. Вам не нужно самостоятельно обрабатывать это расширение. Это происходит автоматически в API, пока вы предоставляете все соответствующие определения инструментов в параметре tools.
Инструмент поиска инструментов работает с серверами MCP. Добавьте заголовок бета-версии "mcp-client-2025-11-20" в ваш запрос API, а затем используйте mcp_toolset с default_config для отложенной загрузки инструментов MCP:
Опции конфигурации MCP:
default_config.defer_loading: Установить значение по умолчанию для всех инструментов с сервера MCPconfigs: Переопределить значения по умолчанию для конкретных инструментов по имениВы можете реализовать собственную логику поиска инструментов (например, используя встраивания или семантический поиск), возвращая блоки tool_reference из пользовательского инструмента:
{
"type": "tool_search_tool_result",
"tool_use_id": "toolu_custom_search",
"content": {
"type": "tool_search_tool_search_result",
"tool_references": [{ "type": "tool_reference", "tool_name": "discovered_tool_name" }]
}
}Каждый инструмент, на который есть ссылка, должен иметь соответствующее определение инструмента в параметре верхнего уровня tools с defer_loading: true. Этот подход позволяет вам использовать более сложные алгоритмы поиска, сохраняя совместимость с системой поиска инструментов.
Полный пример с использованием встраиваний см. в нашем руководстве по поиску инструментов с встраиваниями.
Инструмент поиска инструментов несовместим с примерами использования инструментов. Если вам нужно предоставить примеры использования инструментов, используйте стандартный вызов инструментов без поиска инструментов.
Эти ошибки предотвращают обработку запроса:
Все инструменты отложены:
{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "All tools have defer_loading set. At least one tool must be non-deferred."
}
}Отсутствует определение инструмента:
{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "Tool reference 'unknown_tool' has no corresponding tool definition"
}
}Ошибки во время выполнения инструмента возвращают ответ 200 с информацией об ошибке в теле:
{
"type": "tool_result",
"tool_use_id": "srvtoolu_01ABC123",
"content": {
"type": "tool_search_tool_result_error",
"error_code": "invalid_pattern"
}
}Коды ошибок:
too_many_requests: Превышен лимит частоты запросов для операций поиска инструментовinvalid_pattern: Неправильный шаблон regexpattern_too_long: Шаблон превышает лимит в 200 символовunavailable: Сервис поиска инструментов временно недоступенПоиск инструментов работает с кэшированием подсказок. Добавьте точки разрыва cache_control для оптимизации многооборотных разговоров:
import anthropic
client = anthropic.Anthropic()
# First request with tool search
messages = [
{
"role": "user",
"content": "What's the weather in Seattle?"
}
]
response1 = client.beta.messages.create(
model="claude-sonnet-4-5-20250929",
betas=["advanced-tool-use-2025-11-20"],
max_tokens=2048,
messages=messages,
tools=[
{
"type": "tool_search_tool_regex_20251119",
"name": "tool_search_tool_regex"
},
{
"name": "get_weather",
"description": "Get weather for a location",
"input_schema": {
"type": "object",
"properties": {
"location": {"type": "string"}
},
"required": ["location"]
},
"defer_loading": True
}
]
)
# Add Claude's response to conversation
messages.append({
"role": "assistant",
"content": response1.content
})
# Second request with cache breakpoint
messages.append({
"role": "user",
"content": "What about New York?",
"cache_control": {"type": "ephemeral"}
})
response2 = client.beta.messages.create(
model="claude-sonnet-4-5-20250929",
betas=["advanced-tool-use-2025-11-20"],
max_tokens=2048,
messages=messages,
tools=[
{
"type": "tool_search_tool_regex_20251119",
"name": "tool_search_tool_regex"
},
{
"name": "get_weather",
"description": "Get weather for a location",
"input_schema": {
"type": "object",
"properties": {
"location": {"type": "string"}
},
"required": ["location"]
},
"defer_loading": True
}
]
)
print(f"Cache read tokens: {response2.usage.get('cache_read_input_tokens', 0)}")Система автоматически расширяет блоки tool_reference на протяжении всей истории разговора, поэтому Claude может повторно использовать обнаруженные инструменты в последующих ходах без повторного поиска.
При включенной потоковой передаче вы будете получать события поиска инструментов как часть потока:
event: content_block_start
data: {"type": "content_block_start", "index": 1, "content_block": {"type": "server_tool_use", "id": "srvtoolu_xyz789", "name": "tool_search_tool_regex"}}
// Search query streamed
event: content_block_delta
data: {"type": "content_block_delta", "index": 1, "delta": {"type": "input_json_delta", "partial_json": "{\"query\":\"weather\"}"}}
// Pause while search executes
// Search results streamed
event: content_block_start
data: {"type": "content_block_start", "index": 2, "content_block": {"type": "tool_search_tool_result", "tool_use_id": "srvtoolu_xyz789", "content": {"type": "tool_search_tool_search_result", "tool_references": [{"type": "tool_reference", "tool_name": "get_weather"}]}}}
// Claude continues with discovered toolsВы можете включить инструмент поиска инструментов в API пакетных сообщений. Операции поиска инструментов через API пакетных сообщений оцениваются так же, как в обычных запросах API сообщений.
Хорошие варианты использования:
Когда традиционный вызов инструментов может быть лучше:
Использование инструмента поиска инструментов отслеживается в объекте использования ответа:
{
"usage": {
"input_tokens": 1024,
"output_tokens": 256,
"server_tool_use": {
"tool_search_requests": 2
}
}
}curl https://api.anthropic.com/v1/messages \
--header "x-api-key: $ANTHROPIC_API_KEY" \
--header "anthropic-version: 2023-06-01" \
--header "anthropic-beta: advanced-tool-use-2025-11-20" \
--header "content-type: application/json" \
--data '{
"model": "claude-sonnet-4-5-20250929",
"max_tokens": 2048,
"messages": [
{
"role": "user",
"content": "What is the weather in San Francisco?"
}
],
"tools": [
{
"type": "tool_search_tool_regex_20251119",
"name": "tool_search_tool_regex"
},
{
"name": "get_weather",
"description": "Get the weather at a specific location",
"input_schema": {
"type": "object",
"properties": {
"location": {"type": "string"},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"]
}
},
"required": ["location"]
},
"defer_loading": true
},
{
"name": "search_files",
"description": "Search through files in the workspace",
"input_schema": {
"type": "object",
"properties": {
"query": {"type": "string"},
"file_types": {
"type": "array",
"items": {"type": "string"}
}
},
"required": ["query"]
},
"defer_loading": true
}
]
}'curl https://api.anthropic.com/v1/messages \
--header "x-api-key: $ANTHROPIC_API_KEY" \
--header "anthropic-version: 2023-06-01" \
--header "anthropic-beta: advanced-tool-use-2025-11-20,mcp-client-2025-11-20" \
--header "content-type: application/json" \
--data '{
"model": "claude-sonnet-4-5-20250929",
"max_tokens": 2048,
"mcp_servers": [
{
"type": "url",
"name": "database-server",
"url": "https://mcp-db.example.com"
}
],
"tools": [
{
"type": "tool_search_tool_regex_20251119",
"name": "tool_search_tool_regex"
},
{
"type": "mcp_toolset",
"mcp_server_name": "database-server",
"default_config": {
"defer_loading": true
},
"configs": {
"search_events": {
"defer_loading": false
}
}
}
],
"messages": [
{
"role": "user",
"content": "What events are in my database?"
}
]
}'