Was this page helpful?
Инструмент поиска инструментов позволяет Claude работать с сотнями или тысячами инструментов, динамически обнаруживая и загружая их по требованию. Вместо того чтобы загружать все определения инструментов в контекстное окно заранее, Claude выполняет поиск по вашему каталогу инструментов (включая имена инструментов, описания, имена аргументов и описания аргументов) и загружает только те инструменты, которые ему нужны.
Этот подход решает две проблемы, которые быстро усугубляются по мере масштабирования библиотек инструментов:
Для получения общей информации о проблемах масштабирования, которые решает поиск инструментов, см. Advanced tool use. Загрузка по требованию в поиске инструментов также является примером более широкого принципа своевременного извлечения, описанного в Effective context engineering.
Хотя это предоставляется как серверный инструмент, вы также можете реализовать собственную клиентскую функциональность поиска инструментов. Подробности см. в разделе Пользовательская реализация поиска инструментов.
Поделитесь отзывами об этой функции через форму обратной связи.
This feature qualifies for Zero Data Retention (ZDR) with limited technical retention. See the Data retention section for details on what is retained and why.
На Amazon Bedrock серверный поиск инструментов доступен только через invoke API, но не через 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Это позволяет поддерживать эффективность контекстного окна при сохранении высокой точности выбора инструментов.
Вот простой пример с отложенными инструментами:
Инструмент поиска инструментов имеет два варианта:
{
"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 строит шаблоны регулярных выражений с использованием синтаксиса re.search() Python, а не запросы на естественном языке. Распространённые шаблоны:
"weather" — соответствует именам/описаниям инструментов, содержащим "weather""get_.*_data" — соответствует инструментам типа get_user_data, get_weather_data"database.*query|query.*database" — шаблоны OR для гибкости"(?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) выполняют поиск по именам инструментов, описаниям, именам аргументов и описаниям аргументов.
Как работает отложенная загрузка внутри: Отложенные инструменты не включаются в префикс системного промпта. Когда модель обнаруживает отложенный инструмент через поиск инструментов, определение инструмента добавляется встроенно как блок tool_reference в разговоре. Префикс остаётся нетронутым, поэтому кэширование промптов сохраняется. Грамматика для строгого режима строится из полного набора инструментов, поэтому defer_loading и строгий режим совместимы без перекомпиляции грамматики.
Когда 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_toolset с defer_loading см. MCP connector.
Вы можете реализовать собственную логику поиска инструментов (например, с использованием эмбеддингов или семантического поиска), возвращая блоки tool_reference из пользовательского инструмента. Когда Claude вызывает ваш пользовательский инструмент поиска, верните стандартный tool_result с блоками tool_reference в массиве content:
{
"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, как показано выше.
Для полного примера с использованием эмбеддингов см. cookbook по поиску инструментов с эмбеддингами.
Инструмент поиска инструментов несовместим с примерами использования инструментов. Если вам нужно предоставить примеры использования инструментов, используйте стандартный вызов инструментов без поиска инструментов.
Эти ошибки препятствуют обработке запроса:
Все инструменты отложены:
{
"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: Сервис поиска инструментов временно недоступенО том, как defer_loading сохраняет кэширование промптов, см. Использование инструментов с кэшированием промптов.
Система автоматически разворачивает блоки 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.
Серверный поиск инструментов (инструмент tool_search) индексирует и хранит данные каталога инструментов (имена инструментов, описания и метаданные аргументов) за пределами немедленного ответа API; эти данные каталога хранятся в соответствии со стандартной политикой хранения Anthropic. Пользовательские клиентские реализации поиска инструментов, использующие стандартный Messages API, полностью соответствуют требованиям ZDR.
Для получения информации о соответствии ZDR для всех функций см. API и хранение данных.
Хорошие варианты использования:
Когда традиционный вызов инструментов может быть лучше:
github_, slack_), чтобы поисковые запросы естественно находили нужную группу инструментовИспользование инструмента поиска инструментов отслеживается в объекте использования ответа:
{
"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 "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
}
]
}'Пошаговое руководство по определению инструментов.