La herramienta de búsqueda de herramientas permite que Claude trabaje con cientos o miles de herramientas descubriéndolas y cargándolas bajo demanda. En lugar de cargar todas las definiciones de herramientas en la "context window" (ventana de contexto) desde el inicio, Claude busca en tu catálogo de herramientas (incluyendo nombres de herramientas, descripciones, nombres de argumentos y descripciones de argumentos) y carga solo las herramientas que necesita.
Cargar todas las definiciones de herramientas desde el inicio causa dos problemas a medida que crece una biblioteca de herramientas:
La búsqueda de herramientas está disponible de forma general en la API de Claude. Para ver los modelos compatibles, consulta Compatibilidad de modelos.
Para obtener contexto sobre los desafíos de escalabilidad que resuelve la búsqueda de herramientas, consulta Uso avanzado de herramientas. La carga bajo demanda de la búsqueda de herramientas también es una instancia del principio más amplio de recuperación justo a tiempo descrito en Ingeniería de contexto efectiva.
La búsqueda de herramientas se ejecuta como una herramienta del lado del servidor, pero también puedes implementar tu propia búsqueda de herramientas del lado del cliente. Consulta Implementación personalizada de búsqueda de herramientas para obtener más detalles.
Comparte tus comentarios sobre esta funcionalidad a través del formulario de comentarios.
Esta función es elegible para Zero Data Retention (ZDR). Cuando tu organización tiene un acuerdo de ZDR, los datos enviados a través de esta función no se almacenan después de que se devuelve la respuesta de la API.
En Amazon Bedrock, la búsqueda de herramientas del lado del servidor está disponible solo a través de la API InvokeModel, no de la API Converse.
En Claude Platform en AWS, la búsqueda de herramientas del lado del servidor funciona de manera idéntica a la API de Claude. Claude Platform en AWS usa la API de Mensajes de Anthropic directamente, por lo que no existe distinción entre InvokeModel y Converse.
Ambas variantes de búsqueda de herramientas están disponibles en los siguientes modelos:
| Modelo | Versiones de herramienta |
|---|---|
| Claude Fable 5 (claude-fable-5) | tool_search_tool_regex_20251119, tool_search_tool_bm25_20251119 |
| Claude Mythos 5 (claude-mythos-5) | tool_search_tool_regex_20251119, tool_search_tool_bm25_20251119 |
| Claude Opus 4.8 (claude-opus-4-8) | tool_search_tool_regex_20251119, tool_search_tool_bm25_20251119 |
| Claude Opus 4.7 (claude-opus-4-7) | tool_search_tool_regex_20251119, tool_search_tool_bm25_20251119 |
| Claude Opus 4.6 (claude-opus-4-6) | tool_search_tool_regex_20251119, tool_search_tool_bm25_20251119 |
| Claude Sonnet 4.6 (claude-sonnet-4-6) | tool_search_tool_regex_20251119, tool_search_tool_bm25_20251119 |
| Claude Opus 4.5 (claude-opus-4-5-20251101) | tool_search_tool_regex_20251119, tool_search_tool_bm25_20251119 |
| Claude Sonnet 4.5 (claude-sonnet-4-5-20250929) | tool_search_tool_regex_20251119, tool_search_tool_bm25_20251119 |
| Claude Haiku 4.5 (claude-haiku-4-5-20251001) | tool_search_tool_regex_20251119, tool_search_tool_bm25_20251119 |
Claude Opus 4.1 y los modelos anteriores no admiten la herramienta de búsqueda de herramientas.
Existen dos variantes de búsqueda de herramientas:
tool_search_tool_regex_20251119): Claude construye patrones regex para buscar herramientas.tool_search_tool_bm25_20251119): Claude usa consultas en lenguaje natural para buscar herramientas.Cuando habilitas la herramienta de búsqueda de herramientas:
tool_search_tool_regex_20251119 o tool_search_tool_bm25_20251119) en tu lista tools.tools y estableces defer_loading: true en las herramientas que no deben cargarse desde el inicio. Al menos una herramienta, normalmente la propia herramienta de búsqueda de herramientas, debe permanecer sin diferir.tool_reference (hasta 5 por defecto).El siguiente ejemplo incluye la herramienta de búsqueda de herramientas y dos herramientas diferidas:
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-4-8",
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 busca en el catálogo, descubre get_weather y la llama. La respuesta termina con stop_reason: "tool_use". Ejecuta la herramienta descubierta y devuelve un tool_result como se describe en Manejar llamadas a herramientas. Formato de respuesta muestra los bloques que recibes y qué enviar a continuación.
La herramienta de búsqueda de herramientas tiene dos variantes:
{
"type": "tool_search_tool_regex_20251119",
"name": "tool_search_tool_regex"
}{
"type": "tool_search_tool_bm25_20251119",
"name": "tool_search_tool_bm25"
}Formato de consulta de la variante regex: regex de Python, no lenguaje natural
Con tool_search_tool_regex_20251119, Claude escribe patrones de re.search() de Python, no consultas en lenguaje natural. La coincidencia no distingue entre mayúsculas y minúsculas. Los patrones comunes incluyen los siguientes:
"weather": coincide con nombres y descripciones de herramientas que contienen "weather""get_.*_data": coincide con herramientas como get_user_data y get_weather_data"database.*query|query.*database": coincide con cualquier orden de las palabrasLongitud máxima del patrón: 200 caracteres
Formato de consulta de la variante BM25: lenguaje natural
Con tool_search_tool_bm25_20251119, Claude busca con consultas en lenguaje natural. Longitud máxima de consulta: 500 caracteres.
Marca las herramientas para carga bajo demanda agregando 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 controla qué entra en la ventana de contexto, no qué envías en la solicitud:
tools en cada solicitud, incluidas las diferidas. La API las necesita del lado del servidor para ejecutar la búsqueda y expandir los bloques tool_reference.defer_loading se cargan en el contexto inmediatamente.defer_loading: true se cargan solo cuando Claude las descubre a través de la búsqueda.defer_loading: true en la propia herramienta de búsqueda de herramientas.Ambas variantes de búsqueda de herramientas (regex y bm25) buscan en nombres de herramientas, descripciones, nombres de argumentos y descripciones de argumentos.
Internamente, la API excluye las herramientas diferidas del prefijo de la indicación del sistema. Cuando Claude descubre una herramienta diferida a través de la búsqueda de herramientas, la API agrega un bloque tool_reference en línea en la conversación y luego lo expande en la definición completa de la herramienta antes de pasarla a Claude. El prefijo no se modifica, por lo que se preserva el almacenamiento en caché de prompts. La gramática para el modo estricto (las reglas que restringen la salida de llamadas a herramientas para que coincida con tus esquemas) se construye a partir del conjunto completo de herramientas, por lo que defer_loading y el modo estricto se componen sin recompilación de gramática.
Cuando Claude usa la herramienta de búsqueda de herramientas, la respuesta incluye los siguientes tipos de bloques:
{
"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"
}
},
{
"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: la llamada de Claude a la herramienta de búsqueda de herramientas. La búsqueda se ejecuta en los servidores de Anthropic. Nunca devuelvas un tool_result para su ID srvtoolu_....tool_search_tool_result: los resultados de la búsqueda, en un objeto anidado tool_search_tool_search_result. Mantenlo en el historial de mensajes tal como está.tool_references: un arreglo de objetos tool_reference que apuntan a las herramientas descubiertas. La API los expande para Claude. Nunca los expandes tú mismo.tool_use: la llamada de Claude a una herramienta descubierta. Ejecútala y devuelve un tool_result exactamente como en el uso de herramientas estándar.La API expande automáticamente los bloques tool_reference en definiciones completas de herramientas antes de mostrárselas a Claude. No necesitas manejar esta expansión tú mismo, siempre que proporciones todas las definiciones de herramientas coincidentes en el parámetro tools.
En la siguiente solicitud, pasa el contenido del asistente sin cambios, incluidos los bloques server_tool_use y tool_search_tool_result. Agrega tu tool_result para la herramienta descubierta en un mensaje de usuario y envía el mismo arreglo tools: la herramienta de búsqueda más todas las definiciones diferidas. No devuelvas un tool_result para el ID srvtoolu_...: la API rechaza la solicitud. La API expande los bloques tool_reference a lo largo del historial de la conversación, por lo que Claude puede reutilizar las herramientas descubiertas en turnos posteriores sin volver a buscar. Una búsqueda que no coincide con nada devuelve un tool_search_tool_search_result con un arreglo tool_references vacío, no un error.
Si tus herramientas provienen de servidores MCP a través del conector MCP, no estableces defer_loading en las definiciones individuales de herramientas. En su lugar, establécelo una vez en el default_config de la entrada mcp_toolset para todo el servidor, o por herramienta en sus configs. Consulta Configuración del conjunto de herramientas MCP.
Puedes implementar tu propia lógica de búsqueda de herramientas (por ejemplo, usando embeddings o búsqueda semántica) devolviendo bloques tool_reference desde una herramienta personalizada. Cuando Claude llama a tu herramienta de búsqueda personalizada, devuelve un tool_result estándar con bloques tool_reference en el arreglo de contenido:
{
"type": "tool_result",
"tool_use_id": "toolu_your_tool_id",
"content": [{ "type": "tool_reference", "tool_name": "discovered_tool_name" }]
}Cada herramienta referenciada debe tener una definición de herramienta correspondiente en el parámetro tools de nivel superior, normalmente con defer_loading: true. Esto te permite usar métodos de búsqueda que las variantes integradas no proporcionan, como la recuperación basada en embeddings, y la API expande los bloques tool_reference devueltos de la misma manera.
El formato tool_search_tool_result mostrado en la sección Formato de respuesta es el formato del lado del servidor usado internamente por la búsqueda de herramientas integrada de Anthropic. Para implementaciones personalizadas del lado del cliente, usa siempre el formato estándar tool_result con bloques de contenido tool_reference como se muestra en el ejemplo anterior.
Para ver un ejemplo completo usando embeddings, consulta la receta de búsqueda de herramientas con embeddings.
Los ejemplos de uso de herramientas
funcionan con la búsqueda de herramientas: cuando Claude descubre una herramienta diferida, la API expande
sus input_examples junto con su definición.
Estos errores impiden que la API procese la solicitud:
Todas las herramientas diferidas:
{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "At least one tool must have defer_loading=false. All tools cannot be deferred."
}
}Definición de herramienta faltante:
{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "Tool reference 'unknown_tool' not found in available tools"
}
}Cuando una operación de búsqueda de herramientas falla durante la ejecución, la API devuelve una respuesta 200 con el error en el cuerpo:
{
"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"
}
}El campo error_code tiene cuatro valores posibles:
invalid_tool_input: la entrada de búsqueda no era válida, por ejemplo un patrón regex mal formado o un patrón que supera el límite de 200 caracteresunavailable: la búsqueda no pudo ejecutarse, por ejemplo porque se agotó el tiempo de espera o el servicio no estaba disponibletoo_many_requests: se excedió el límite de velocidad para operaciones de búsqueda de herramientasexecution_time_exceeded: la búsqueda excedió su límite de tiempo de ejecuciónPara saber cómo defer_loading preserva el almacenamiento en caché de prompts, consulta Uso de herramientas con almacenamiento en caché de prompts.
Una herramienta con defer_loading: true no puede llevar también cache_control: la API devuelve un 400. Coloca el punto de interrupción de caché en una herramienta no diferida.
Con el streaming habilitado, recibirás eventos de búsqueda de herramientas como parte del flujo:
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 toolsPuedes incluir la herramienta de búsqueda de herramientas en la API de Lotes de Mensajes.
defer_loading: true por solicitudUsa la búsqueda de herramientas cuando se aplique cualquiera de las siguientes condiciones:
La llamada estándar a herramientas, sin búsqueda de herramientas, es más adecuada cuando tienes menos de 10 herramientas, cada herramienta se usa en cada solicitud o tus definiciones de herramientas son pequeñas (menos de 100 tokens en total).
github_, slack_) para que una búsqueda coincida con todo el grupo.La búsqueda de herramientas no se mide como una herramienta de servidor separada. El objeto usage.server_tool_use de la respuesta no tiene un campo de búsqueda de herramientas, y las definiciones de herramientas que la búsqueda carga en el contexto cuentan como tokens de entrada al igual que cualquier otra definición de herramienta.
Permite que Claude almacene y recupere información entre conversaciones implementando las operaciones de archivo de la herramienta de memoria en tu aplicación.
Directorio de herramientas proporcionadas por Anthropic y referencia de propiedades opcionales de definición de herramientas.
Configura conjuntos de herramientas MCP con carga diferida.
Almacena en caché las definiciones de herramientas entre turnos y comprende qué invalida tu caché.
Especifica esquemas de herramientas, escribe descripciones efectivas y controla cuándo Claude llama a tus herramientas.
Was this page helpful?