Инструмент поиска инструментов позволяет Claude работать с сотнями или тысячами инструментов, динамически обнаруживая и загружая их по требованию. Вместо загрузки всех определений инструментов в окно контекста заранее, Claude ищет в каталоге инструментов — включая имена инструментов, описания, имена аргументов и описания аргументов — и загружает только необходимые ему инструменты.
Этот подход решает две критические проблемы при масштабировании библиотек инструментов:
Хотя это предоставляется как серверный инструмент, вы также можете реализовать собственную функциональность поиска инструментов на стороне клиента. Подробности см. в разделе Пользовательская реализация поиска инструментов.
Пожалуйста, свяжитесь с нами через нашу форму обратной связи, чтобы поделиться своим мнением об этой функции.
Серверный поиск инструментов не охватывается соглашениями Zero Data Retention (ZDR). Данные сохраняются в соответствии со стандартной политикой хранения функции. Пользовательские реализации поиска инструментов на стороне клиента используют стандартный Messages API и имеют право на ZDR.
На Amazon Bedrock серверный поиск инструментов доступен только через API invoke, а не через converse API.
Вы также можете реализовать поиск инструментов на стороне клиента, возвращая блоки tool_reference из собственной реализации поиска.
Существует два варианта поиска инструментов:
tool_search_tool_regex_20251119): Claude создает регулярные выражения для поиска инструментовtool_search_tool_bm25_20251119): Claude использует запросы на естественном языке для поиска инструментовКогда вы включаете инструмент поиска инструментов:
tool_search_tool_regex_20251119 или tool_search_tool_bm25_20251119) в список инструментовdefer_loading: true для инструментов, которые не должны загружаться немедленноtool_referenceЭто сохраняет эффективность вашего окна контекста, поддерживая высокую точность выбора инструмента.
Вот простой пример с отложенными инструментами:
curl https://api.anthropic.com/v1/messages \
--header "x-api-key: $ANTHROPIC_API_KEY" \
--header "anthropic-version: 2023-06-01" \
--header "content-type: application/json" \
--data '{
"model": "claude-opus-4-6",
"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
}
]
}'Инструмент поиска инструментов имеет два варианта:
{
"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 создает регулярные выражения, используя синтаксис Python re.search(), а не запросы на естественном языке. Общие шаблоны:
"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:
curl https://api.anthropic.com/v1/messages \
--header "x-api-key: $ANTHROPIC_API_KEY" \
--header "anthropic-version: 2023-06-01" \
--header "anthropic-beta: mcp-client-2025-11-20" \
--header "content-type: application/json" \
--data '{
"model": "claude-opus-4-6",
"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?"
}
]
}'Параметры конфигурации MCP:
default_config.defer_loading: Установить значение по умолчанию для всех инструментов с сервера MCPconfigs: Переопределить значения по умолчанию для конкретных инструментов по имениВы можете реализовать собственную логику поиска инструментов (например, используя встраивания или семантический поиск), возвращая блоки tool_reference из пользовательского инструмента. Когда Claude вызывает ваш пользовательский инструмент поиска, верните стандартный tool_result с блоками tool_reference в массиве содержимого:
{
"type": "tool_result",
"tool_use_id": "toolu_your_tool_id",
"content": [
{ "type": "tool_reference", "tool_name": "discovered_tool_name" }
]
}Каждый инструмент, на который есть ссылка, должен иметь соответствующее определение инструмента в параметре верхнего уровня tools с defer_loading: true. Этот подход позволяет вам использовать более сложные алгоритмы поиска, сохраняя совместимость с системой поиска инструментов.
Формат tool_search_tool_result, показанный в разделе Формат ответа, — это серверный формат, используемый внутри встроенного поиска инструментов Anthropic. Для пользовательских реализаций на стороне клиента всегда используйте стандартный формат tool_result с блоками содержимого tool_reference, как показано выше.
Для полного примера с использованием встраиваний см. наш кулинарный рецепт поиска инструментов с встраиваниями.
Инструмент поиска инструментов несовместим с примерами использования инструментов. Если вам нужно предоставить примеры использования инструментов, используйте стандартный вызов инструментов без поиска инструментов.
Эти ошибки предотвращают обработку запроса:
Все инструменты отложены:
{
"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: Неправильный формат регулярного выраженияpattern_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.messages.create(
model="claude-opus-4-6",
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.messages.create(
model="claude-opus-4-6",
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Вы можете включить инструмент поиска инструментов в Messages Batches API. Операции поиска инструментов через Messages Batches API оцениваются так же, как и в обычных запросах Messages API.
Хорошие варианты использования:
Когда традиционный вызов инструментов может быть лучше:
Использование инструмента поиска инструментов отслеживается в объекте использования ответа:
{
"usage": {
"input_tokens": 1024,
"output_tokens": 256,
"server_tool_use": {
"tool_search_requests": 2
}
}
}Was this page helpful?