A ferramenta de busca de ferramentas permite que o Claude trabalhe com centenas ou milhares de ferramentas, descobrindo-as e carregando-as sob demanda. Em vez de carregar todas as definições de ferramentas na "context window" (janela de contexto) antecipadamente, o Claude pesquisa seu catálogo de ferramentas (incluindo nomes de ferramentas, descrições, nomes de argumentos e descrições de argumentos) e carrega apenas as ferramentas de que precisa.
Carregar todas as definições de ferramentas antecipadamente causa dois problemas à medida que uma biblioteca de ferramentas cresce:
A busca de ferramentas está disponível de forma geral na API do Claude. Para modelos compatíveis, consulte Compatibilidade de modelos.
Para contexto sobre os desafios de escalabilidade que a busca de ferramentas resolve, consulte Advanced tool use. O carregamento sob demanda da busca de ferramentas também é uma instância do princípio mais amplo de recuperação just-in-time descrito em Effective context engineering.
A busca de ferramentas é executada como uma ferramenta do lado do servidor, mas você também pode implementar sua própria busca de ferramentas do lado do cliente. Consulte Implementação personalizada de busca de ferramentas para obter detalhes.
Compartilhe feedback sobre este recurso através do formulário de feedback.
Este recurso é elegível para Zero Data Retention (ZDR). Quando sua organização possui um acordo de ZDR, os dados enviados por meio deste recurso não são armazenados após a resposta da API ser retornada.
No Amazon Bedrock, a busca de ferramentas do lado do servidor está disponível apenas através da API InvokeModel, não da API Converse.
No Claude Platform on AWS, a busca de ferramentas do lado do servidor funciona de forma idêntica à API do Claude. O Claude Platform on AWS usa a API Messages da Anthropic diretamente, portanto não há distinção entre InvokeModel e Converse.
Ambas as variantes de busca de ferramentas estão disponíveis nos seguintes modelos:
| Modelo | Versões da ferramenta |
|---|---|
| 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 |
O Claude Opus 4.1 e modelos anteriores não oferecem suporte à ferramenta de busca de ferramentas.
Existem duas variantes de busca de ferramentas:
tool_search_tool_regex_20251119): o Claude constrói padrões regex para buscar ferramentas.tool_search_tool_bm25_20251119): o Claude usa consultas em linguagem natural para buscar ferramentas.Quando você habilita a ferramenta de busca de ferramentas:
tool_search_tool_regex_20251119 ou tool_search_tool_bm25_20251119) na sua lista tools.tools e define defer_loading: true nas ferramentas que não devem ser carregadas antecipadamente. Pelo menos uma ferramenta, normalmente a própria ferramenta de busca de ferramentas, deve permanecer não adiada.tool_reference (até 5 por padrão).O exemplo a seguir inclui a ferramenta de busca de ferramentas e duas ferramentas adiadas:
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)O Claude pesquisa o catálogo, descobre get_weather e a chama. A resposta termina com stop_reason: "tool_use". Execute a ferramenta descoberta e retorne um tool_result conforme descrito em Lidar com chamadas de ferramentas. Formato de resposta mostra os blocos que você recebe de volta e o que enviar em seguida.
A ferramenta de busca de ferramentas tem duas 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 da variante regex: regex Python, não linguagem natural
Com tool_search_tool_regex_20251119, o Claude escreve padrões re.search() do Python, não consultas em linguagem natural. A correspondência não diferencia maiúsculas de minúsculas. Padrões comuns incluem os seguintes:
"weather": corresponde a nomes e descrições de ferramentas que contêm "weather""get_.*_data": corresponde a ferramentas como get_user_data e get_weather_data"database.*query|query.*database": corresponde a qualquer ordem das palavrasComprimento máximo do padrão: 200 caracteres
Formato de consulta da variante BM25: linguagem natural
Com tool_search_tool_bm25_20251119, o Claude pesquisa com consultas em linguagem natural. Comprimento máximo da consulta: 500 caracteres.
Marque ferramentas para carregamento sob demanda adicionando 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 o que entra na janela de contexto, não o que você envia na solicitação:
tools em cada solicitação, incluindo as adiadas. A API precisa delas no lado do servidor para executar a busca e expandir os blocos tool_reference.defer_loading são carregadas no contexto imediatamente.defer_loading: true são carregadas apenas quando o Claude as descobre através da busca.defer_loading: true na própria ferramenta de busca de ferramentas.Ambas as variantes de busca de ferramentas (regex e bm25) pesquisam nomes de ferramentas, descrições, nomes de argumentos e descrições de argumentos.
Internamente, a API exclui ferramentas adiadas do prefixo do prompt do sistema. Quando o Claude descobre uma ferramenta adiada através da busca de ferramentas, a API anexa um bloco tool_reference inline na conversa e, em seguida, o expande na definição completa da ferramenta antes de passá-la ao Claude. O prefixo permanece intocado, então o cache de prompt é preservado. A gramática para o modo estrito (as regras que restringem a saída de chamadas de ferramentas para corresponder aos seus esquemas) é construída a partir do conjunto completo de ferramentas, então defer_loading e o modo estrito funcionam juntos sem recompilação de gramática.
Quando o Claude usa a ferramenta de busca de ferramentas, a resposta inclui os seguintes tipos de bloco:
{
"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: a chamada do Claude à ferramenta de busca de ferramentas. A busca é executada nos servidores da Anthropic. Nunca retorne um tool_result para seu ID srvtoolu_....tool_search_tool_result: os resultados da busca, em um objeto tool_search_tool_search_result aninhado. Mantenha-o no histórico de mensagens como está.tool_references: um array de objetos tool_reference apontando para ferramentas descobertas. A API os expande para o Claude. Você nunca os expande por conta própria.tool_use: a chamada do Claude a uma ferramenta descoberta. Execute-a e retorne um tool_result exatamente como no uso de ferramentas padrão.A API expande automaticamente os blocos tool_reference em definições completas de ferramentas antes de mostrá-los ao Claude. Você não precisa lidar com essa expansão por conta própria, desde que forneça todas as definições de ferramentas correspondentes no parâmetro tools.
Na próxima solicitação, passe o conteúdo do assistente de volta sem alterações, incluindo os blocos server_tool_use e tool_search_tool_result. Adicione seu tool_result para a ferramenta descoberta em uma mensagem de usuário e envie o mesmo array tools: a ferramenta de busca mais todas as definições adiadas. Não retorne um tool_result para o ID srvtoolu_...: a API rejeita a solicitação. A API expande blocos tool_reference ao longo de todo o histórico da conversa, então o Claude pode reutilizar ferramentas descobertas em turnos posteriores sem pesquisar novamente. Uma busca que não encontra nada retorna um tool_search_tool_search_result com um array tool_references vazio, não um erro.
Se suas ferramentas vêm de servidores MCP através do conector MCP, você não define defer_loading em definições individuais de ferramentas. Em vez disso, defina-o uma vez no default_config da entrada mcp_toolset para todo o servidor, ou por ferramenta em seus configs. Consulte Configuração de toolset MCP.
Você pode implementar sua própria lógica de busca de ferramentas (por exemplo, usando embeddings ou busca semântica) retornando blocos tool_reference de uma ferramenta personalizada. Quando o Claude chama sua ferramenta de busca personalizada, retorne um tool_result padrão com blocos tool_reference no array de conteúdo:
{
"type": "tool_result",
"tool_use_id": "toolu_your_tool_id",
"content": [{ "type": "tool_reference", "tool_name": "discovered_tool_name" }]
}Cada ferramenta referenciada deve ter uma definição de ferramenta correspondente no parâmetro tools de nível superior, normalmente com defer_loading: true. Isso permite que você use métodos de busca que as variantes integradas não fornecem, como recuperação baseada em embeddings, e a API expande os blocos tool_reference retornados da mesma forma.
O formato tool_search_tool_result mostrado na seção Formato de resposta é o formato do lado do servidor usado internamente pela busca de ferramentas integrada da Anthropic. Para implementações personalizadas do lado do cliente, sempre use o formato tool_result padrão com blocos de conteúdo tool_reference, conforme mostrado no exemplo anterior.
Para um exemplo completo usando embeddings, consulte a receita tool search with embeddings.
Exemplos de uso de ferramentas
funcionam com a busca de ferramentas: quando o Claude descobre uma ferramenta adiada, a API expande
seus input_examples junto com sua definição.
Esses erros impedem a API de processar a solicitação:
Todas as ferramentas adiadas:
{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "At least one tool must have defer_loading=false. All tools cannot be deferred."
}
}Definição de ferramenta ausente:
{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "Tool reference 'unknown_tool' not found in available tools"
}
}Quando uma operação de busca de ferramentas falha durante a execução, a API retorna uma resposta 200 com o erro no corpo:
{
"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"
}
}O campo error_code tem quatro valores possíveis:
invalid_tool_input: a entrada de busca era inválida, por exemplo, um padrão regex malformado ou um padrão acima do limite de 200 caracteresunavailable: a busca não pôde ser executada, por exemplo, porque atingiu o tempo limite ou o serviço estava indisponíveltoo_many_requests: limite de taxa excedido para operações de busca de ferramentasexecution_time_exceeded: a busca excedeu seu limite de tempo de execuçãoPara saber como defer_loading preserva o cache de prompt, consulte Uso de ferramentas com cache de prompt.
Uma ferramenta com defer_loading: true não pode também ter cache_control: a API retorna um 400. Coloque o ponto de interrupção de cache em uma ferramenta não adiada.
Com o streaming habilitado, você receberá eventos de busca de ferramentas como parte do stream:
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 toolsVocê pode incluir a ferramenta de busca de ferramentas na API Messages Batches.
defer_loading: true por solicitaçãoUse a busca de ferramentas quando qualquer uma das seguintes condições se aplicar:
A chamada de ferramentas padrão, sem busca de ferramentas, é mais adequada quando você tem menos de 10 ferramentas, todas as ferramentas são usadas em todas as solicitações ou suas definições de ferramentas são pequenas (menos de 100 tokens no total).
github_, slack_) para que uma busca corresponda a todo o grupo.A busca de ferramentas não é medida como uma ferramenta de servidor separada. O objeto usage.server_tool_use da resposta não tem campo de busca de ferramentas, e as definições de ferramentas que a busca carrega no contexto contam como tokens de entrada, como qualquer outra definição de ferramenta.
Permita que o Claude armazene e recupere informações entre conversas implementando as operações de arquivo da ferramenta de memória em sua aplicação.
Diretório de ferramentas fornecidas pela Anthropic e referência para propriedades opcionais de definição de ferramentas.
Configure toolsets MCP com carregamento adiado.
Faça cache de definições de ferramentas entre turnos e entenda o que invalida seu cache.
Especifique esquemas de ferramentas, escreva descrições eficazes e controle quando o Claude chama suas ferramentas.
Was this page helpful?