Инструмент поиска инструментов, или «tool search tool», позволяет Claude работать с сотнями или тысячами инструментов, обнаруживая и загружая их по требованию. Вместо того чтобы заранее загружать все определения инструментов в «context window» (контекстное окно), Claude выполняет поиск по вашему каталогу инструментов (включая имена инструментов, описания, имена аргументов и описания аргументов) и загружает только те инструменты, которые ему нужны.
Предварительная загрузка каждого определения инструмента вызывает две проблемы по мере роста библиотеки инструментов:
Модели, поддерживающие поиск инструментов, перечислены в разделе Совместимость моделей.
Поиск инструментов работает как серверный инструмент, но вы также можете реализовать собственный клиентский поиск инструментов. Подробности см. в разделе Пользовательская реализация поиска инструментов.
Оба варианта поиска инструментов доступны на следующих моделях:
| Модель | Версии инструмента |
|---|---|
| Claude Fable 5 () | tool_search_tool_regex_20251119, tool_search_tool_bm25_20251119 |
| Claude Mythos 5 () | tool_search_tool_regex_20251119, tool_search_tool_bm25_20251119 |
| Claude Opus 5 () | tool_search_tool_regex_20251119, tool_search_tool_bm25_20251119 |
| Claude Opus 4.8 () | tool_search_tool_regex_20251119, tool_search_tool_bm25_20251119 |
| Claude Opus 4.7 () | tool_search_tool_regex_20251119, tool_search_tool_bm25_20251119 |
| Claude Opus 4.6 () | tool_search_tool_regex_20251119, tool_search_tool_bm25_20251119 |
| Claude Sonnet 4.6 () | tool_search_tool_regex_20251119, tool_search_tool_bm25_20251119 |
| Claude Opus 4.5 () | tool_search_tool_regex_20251119, tool_search_tool_bm25_20251119 |
| Claude Sonnet 4.5 () | tool_search_tool_regex_20251119, tool_search_tool_bm25_20251119 |
| Claude Haiku 4.5 () | tool_search_tool_regex_20251119, tool_search_tool_bm25_20251119 |
Claude Opus 4.1 и более ранние модели не поддерживают инструмент поиска инструментов.
Существует два варианта поиска инструментов:
tool_search_tool_regex_20251119): Claude составляет шаблоны регулярных выражений для поиска инструментов.tool_search_tool_bm25_20251119): Claude использует запросы на естественном языке для поиска инструментов.Когда вы включаете инструмент поиска инструментов:
tool_search_tool_regex_20251119 или tool_search_tool_bm25_20251119) в свой список tools.tools и устанавливаете defer_loading: true для инструментов, которые не должны загружаться заранее. По крайней мере один инструмент, обычно сам инструмент поиска инструментов, должен оставаться неотложенным.tool_reference (по умолчанию до 5; Claude может задать limit во входных данных поиска).Следующий пример включает инструмент поиска инструментов и два отложенных инструмента:
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-5",
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)Claude выполняет поиск по каталогу, обнаруживает get_weather и вызывает его. Ответ завершается с stop_reason: "tool_use". Выполните обнаруженный инструмент и верните tool_result, как описано в разделе Обработка вызовов инструментов. В разделе Формат ответа показаны блоки, которые вы получаете, и что отправлять дальше.
Инструмент поиска инструментов имеет два варианта:
{
"type": "tool_search_tool_regex_20251119",
"name": "tool_search_tool_regex"
}{
"type": "tool_search_tool_bm25_20251119",
"name": "tool_search_tool_bm25"
}Пометьте инструменты для загрузки по требованию, добавив 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 управляет тем, что попадает в контекстное окно, а не тем, что вы отправляете в запросе:
tools в каждом запросе, включая отложенные. API нужны они на стороне сервера, чтобы выполнять поиск и разворачивать блоки tool_reference.defer_loading загружаются в контекст немедленно.defer_loading: true загружаются только тогда, когда Claude обнаруживает их через поиск.defer_loading: true для самого инструмента поиска инструментов.Наборы инструментов для использования компьютера и браузера (computer_toolset_20260801 и browser_toolset_20260801) принимают defer_loading для каждого входящего в набор инструмента внутри объекта configs записи, а не на уровне самой записи; запрос, устанавливающий его на уровне записи, отклоняется. Поскольку набор инструментов откладывается и разворачивается как единое целое, defer_loading должен разрешаться в одно и то же значение для каждого включённого участника, и когда Claude обнаруживает набор инструментов через поиск, все включённые участники загружаются одновременно. Формат configs см. в разделе Клиентские наборы инструментов.
Оба варианта поиска инструментов (regex и bm25) выполняют поиск по именам инструментов, описаниям, именам аргументов и описаниям аргументов.
Внутренне API исключает отложенные инструменты из префикса системной подсказки. Когда Claude обнаруживает отложенный инструмент через поиск инструментов, API добавляет блок tool_reference непосредственно в разговор, а затем разворачивает его в полное определение инструмента перед передачей Claude. Префикс остаётся нетронутым, поэтому «prompt caching» (кэширование подсказок) сохраняется. Грамматика для строгого режима (правила, ограничивающие вывод вызовов инструментов соответствием вашим схемам) строится на основе полного набора инструментов, поэтому 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": {
"pattern": "weather",
"limit": 10
}
},
{
"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 инструмента поиска инструментов. Поиск выполняется на серверах Anthropic. Никогда не возвращайте tool_result для его идентификатора srvtoolu_.... Поле input содержит поисковый запрос (pattern для варианта regex, query для BM25) и может включать необязательный limit — целое число от 1 до 10 000, ограничивающее количество подходящих инструментов, возвращаемых поиском (по умолчанию: 5).tool_search_tool_result: результаты поиска во вложенном объекте tool_search_tool_search_result. Сохраняйте его в истории сообщений как есть.tool_references: массив объектов tool_reference, указывающих на обнаруженные инструменты. API разворачивает их для Claude. Вы никогда не разворачиваете их самостоятельно.tool_use: вызов Claude обнаруженного инструмента. Выполните его и верните tool_result точно так же, как при стандартном использовании инструментов.API автоматически разворачивает блоки tool_reference в полные определения инструментов перед тем, как показать их Claude. Вам не нужно обрабатывать это разворачивание самостоятельно, если вы предоставляете все соответствующие определения инструментов в параметре tools.
В следующем запросе передайте содержимое ассистента обратно без изменений, включая блоки server_tool_use и tool_search_tool_result. Добавьте свой tool_result для обнаруженного инструмента в сообщение пользователя и отправьте тот же массив tools: инструмент поиска плюс все отложенные определения. Не возвращайте tool_result для идентификатора srvtoolu_...: API отклонит запрос. API разворачивает блоки tool_reference по всей истории разговора, поэтому Claude может повторно использовать обнаруженные инструменты в последующих ходах без повторного поиска. Поиск, не нашедший совпадений, возвращает tool_search_tool_search_result с пустым массивом tool_references, а не ошибку.
Если ваши инструменты поступают с серверов MCP через коннектор MCP, вы не устанавливаете defer_loading для отдельных определений инструментов. Вместо этого установите его один раз в default_config записи mcp_toolset для всего сервера или для каждого инструмента в его configs. См. раздел Конфигурация набора инструментов MCP.
Вы можете реализовать собственную логику поиска инструментов (например, с использованием эмбеддингов или семантического поиска), возвращая блоки 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. Это позволяет использовать методы поиска, которые не предоставляют встроенные варианты, например извлечение на основе эмбеддингов, а API разворачивает возвращённые блоки tool_reference таким же образом.
Полный пример с использованием эмбеддингов см. в рецепте поиск инструментов с эмбеддингами.
Эти ошибки не позволяют API обработать запрос:
Все инструменты отложены:
{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "At least one tool must have defer_loading=false. All tools cannot be deferred."
}
}Отсутствует определение инструмента:
{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "Tool reference 'unknown_tool' not found in available tools"
}
}Когда операция поиска инструментов завершается сбоем во время выполнения, API возвращает ответ 200 с ошибкой в теле:
{
"type": "tool_search_tool_result",
"tool_use_id": "srvtoolu_01ABC123",
"content": {
"type": "tool_search_tool_result_error",
"error_code": "invalid_tool_input",
"error_message": "Invalid regular expression pattern: missing ) at position 1"
}
}Поле error_code имеет четыре возможных значения:
invalid_tool_input: входные данные поиска были недопустимы, например некорректный шаблон регулярного выражения или шаблон, превышающий ограничение в 200 символовunavailable: поиск не удалось выполнить, например из-за истечения времени ожидания или недоступности сервисаtoo_many_requests: превышено ограничение скорости для операций поиска инструментовexecution_time_exceeded: поиск превысил ограничение времени выполненияО том, как defer_loading сохраняет кэширование подсказок, см. в разделе Использование инструментов с кэшированием подсказок.
Инструмент с defer_loading: true не может также содержать cache_control: API возвращает 400. Разместите точку разрыва кэша на неотложенном инструменте.
При включённой «streaming» (потоковой передаче) вы будете получать события поиска инструментов как часть потока:
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 pattern streamed
event: content_block_delta
data: {"type": "content_block_delta", "index": 1, "delta": {"type": "input_json_delta", "partial_json": "{\"pattern\":\"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.
defer_loading: true на запросlimit во входных данных поиска любым целым числом от 1 до 10 000Используйте поиск инструментов, если выполняется любое из следующих условий:
Стандартный вызов инструментов без поиска инструментов лучше подходит, когда у вас менее 10 инструментов, каждый инструмент используется в каждом запросе или ваши определения инструментов невелики (менее 100 токенов в сумме).
github_, slack_), чтобы один поиск находил всю группу.Поиск инструментов не учитывается как отдельный серверный инструмент. Объект usage.server_tool_use в ответе не содержит поля для поиска инструментов, а определения инструментов, которые поиск загружает в контекст, учитываются как входные токены, как и любое другое определение инструмента.
Позвольте Claude сохранять и извлекать информацию между разговорами, реализовав файловые операции инструмента памяти в вашем приложении.
Каталог инструментов, предоставляемых Anthropic, и справочник по необязательным свойствам определения инструментов.
Настройте наборы инструментов MCP с отложенной загрузкой.
Кэшируйте определения инструментов между ходами и разберитесь, что делает ваш кэш недействительным.
Задавайте схемы инструментов, пишите эффективные описания и управляйте тем, когда Claude вызывает ваши инструменты.
Was this page helpful?