Инструмент поиска инструментов позволяет Claude работать с сотнями или тысячами инструментов, динамически обнаруживая и загружая их по требованию. Вместо загрузки всех определений инструментов в контекстное окно заранее, Claude ищет в вашем каталоге инструментов (включая названия инструментов, описания, названия аргументов и описания аргументов) и загружает только необходимые ему инструменты.
Этот подход решает две проблемы, которые быстро усугубляются по мере масштабирования библиотек инструментов:
Для справки о проблемах масштабирования, которые решает поиск инструментов, см. Advanced tool use. Загрузка по требованию в поиске инструментов также является примером более широкого принципа своевременного поиска, описанного в Effective context engineering.
Хотя это предоставляется как серверный инструмент, вы также можете реализовать собственную функциональность поиска инструментов на стороне клиента. Подробности см. в разделе Custom tool search implementation.
Поделитесь отзывом об этой функции через форму обратной связи.
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Это сохраняет эффективность вашего контекстного окна, поддерживая высокую точность выбора инструмента.
Вот простой пример с отложенными инструментами:
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-4-7",
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,
},
],
)
print(response)Инструмент поиска инструментов имеет два варианта:
{
"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" - шаблоны 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 в массиве содержимого:
{
"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, показанный в разделе Response format, — это формат на стороне сервера, используемый внутри встроенного поиска инструментов Anthropic. Для пользовательских реализаций на стороне клиента всегда используйте стандартный формат tool_result с блоками содержимого tool_reference, как показано выше.
Для полного примера с использованием встраиваний см. tool search with embeddings 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 use with prompt caching.
Система автоматически расширяет блоки 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 and data retention.
Хорошие варианты использования:
Когда традиционный вызов инструментов может быть лучше:
github_, slack_), чтобы запросы поиска естественным образом выводили правильную группу инструментовИспользование инструмента поиска инструментов отслеживается в объекте использования ответа:
{
"usage": {
"input_tokens": 1024,
"output_tokens": 256,
"server_tool_use": {
"tool_search_requests": 2
}
}
}Полный каталог инструментов с совместимостью моделей и параметрами.
Настройте наборы инструментов MCP с отложенной загрузкой.
Объедините поиск инструментов с кэшированными определениями инструментов.
Пошаговое руководство по определению инструментов.
Was this page helpful?