Recomendamos usar o Claude Sonnet (4.5) ou Claude Opus (4.1) mais recente para ferramentas complexas e consultas ambíguas; eles lidam melhor com múltiplas ferramentas e buscam esclarecimentos quando necessário.
Use modelos Claude Haiku para ferramentas diretas, mas observe que eles podem inferir parâmetros ausentes.
Se estiver usando Claude com uso de ferramentas e pensamento estendido, consulte nosso guia aqui para mais informações.
As ferramentas do cliente (tanto as definidas pela Anthropic quanto as definidas pelo usuário) são especificadas no parâmetro tools de nível superior da solicitação da API. Cada definição de ferramenta inclui:
| Parâmetro | Descrição |
|---|---|
name | O nome da ferramenta. Deve corresponder à regex ^[a-zA-Z0-9_-]{1,64}$. |
description | Uma descrição detalhada em texto simples do que a ferramenta faz, quando deve ser usada e como se comporta. |
input_schema | Um objeto JSON Schema que define os parâmetros esperados para a ferramenta. |
input_examples | (Opcional, beta) Uma matriz de objetos de entrada de exemplo para ajudar Claude a entender como usar a ferramenta. Veja Fornecendo exemplos de uso de ferramentas. |
Quando você chama a API Claude com o parâmetro tools, construímos um prompt do sistema especial a partir das definições de ferramentas, configuração de ferramentas e qualquer prompt do sistema especificado pelo usuário. O prompt construído é projetado para instruir o modelo a usar a(s) ferramenta(s) especificada(s) e fornecer o contexto necessário para que a ferramenta funcione adequadamente:
In this environment you have access to a set of tools you can use to answer the user's question.
{{ FORMATTING INSTRUCTIONS }}
String and scalar parameters should be specified as is, while lists and objects should use JSON format. Note that spaces for string values are not stripped. The output is not expected to be valid XML and is parsed with regular expressions.
Here are the functions available in JSONSchema format:
{{ TOOL DEFINITIONS IN JSON SCHEMA }}
{{ USER SYSTEM PROMPT }}
{{ TOOL CONFIGURATION }}Para obter o melhor desempenho do Claude ao usar ferramentas, siga estas diretrizes:
input_examples para ferramentas complexas. Descrições claras são mais importantes, mas para ferramentas com entradas complexas, objetos aninhados ou parâmetros sensíveis ao formato, você pode usar o campo input_examples (beta) para fornecer exemplos validados por esquema. Veja Fornecendo exemplos de uso de ferramentas para detalhes.A boa descrição explica claramente o que a ferramenta faz, quando usá-la, quais dados ela retorna e o que o parâmetro ticker significa. A descrição ruim é muito breve e deixa Claude com muitas questões em aberto sobre o comportamento e o uso da ferramenta.
Você pode fornecer exemplos concretos de entradas de ferramentas válidas para ajudar Claude a entender como usar suas ferramentas de forma mais eficaz. Isso é particularmente útil para ferramentas complexas com objetos aninhados, parâmetros opcionais ou entradas sensíveis ao formato.
Exemplos de uso de ferramentas é um recurso beta. Inclua o cabeçalho beta apropriado para seu provedor:
| Provedor | Cabeçalho beta | Modelos suportados |
|---|---|---|
| Claude API, Microsoft Foundry | advanced-tool-use-2025-11-20 | Todos os modelos |
| Vertex AI, Amazon Bedrock | tool-examples-2025-10-29 | Apenas Claude Opus 4.5 |
Adicione um campo input_examples opcional à sua definição de ferramenta com uma matriz de objetos de entrada de exemplo. Cada exemplo deve ser válido de acordo com o input_schema da ferramenta:
Os exemplos são incluídos no prompt ao lado do seu esquema de ferramenta, mostrando ao Claude padrões concretos para chamadas de ferramenta bem formadas. Isso ajuda Claude a entender quando incluir parâmetros opcionais, quais formatos usar e como estruturar entradas complexas.
input_schema da ferramenta. Exemplos inválidos retornam um erro 400O executor de ferramentas fornece uma solução pronta para executar ferramentas com Claude. Em vez de lidar manualmente com chamadas de ferramentas, resultados de ferramentas e gerenciamento de conversas, o executor de ferramentas automaticamente:
Recomendamos que você use o executor de ferramentas para a maioria das implementações de uso de ferramentas.
O executor de ferramentas está atualmente em beta e disponível nos SDKs Python, TypeScript e Ruby.
Gerenciamento automático de contexto com compactação
O executor de ferramentas suporta compactação automática, que gera resumos quando o uso de tokens excede um limite. Isso permite que tarefas agentes de longa duração continuem além dos limites da janela de contexto.
O executor de ferramentas do SDK está em beta. O resto deste documento cobre a implementação manual de ferramentas.
Em alguns casos, você pode querer que Claude use uma ferramenta específica para responder à pergunta do usuário, mesmo que Claude pense que pode fornecer uma resposta sem usar uma ferramenta. Você pode fazer isso especificando a ferramenta no campo tool_choice assim:
tool_choice = {"type": "tool", "name": "get_weather"}Ao trabalhar com o parâmetro tool_choice, temos quatro opções possíveis:
auto permite que Claude decida se deve chamar qualquer ferramenta fornecida ou não. Este é o valor padrão quando tools são fornecidas.any diz ao Claude que ele deve usar uma das ferramentas fornecidas, mas não força uma ferramenta particular.tool permite que forçemos Claude a sempre usar uma ferramenta particular.none impede que Claude use qualquer ferramenta. Este é o valor padrão quando nenhuma tools é fornecida.Ao usar cache de prompt, mudanças no parâmetro tool_choice invalidarão blocos de mensagens em cache. Definições de ferramentas e prompts do sistema permanecem em cache, mas o conteúdo da mensagem deve ser reprocessado.
Este diagrama ilustra como cada opção funciona:

Observe que quando você tem tool_choice como any ou tool, preencheremos previamente a mensagem do assistente para forçar o uso de uma ferramenta. Isso significa que os modelos não emitirão uma resposta em linguagem natural ou explicação antes dos blocos de conteúdo tool_use, mesmo se explicitamente solicitado.
Ao usar pensamento estendido com uso de ferramentas, tool_choice: {"type": "any"} e tool_choice: {"type": "tool", "name": "..."} não são suportados e resultarão em um erro. Apenas tool_choice: {"type": "auto"} (o padrão) e tool_choice: {"type": "none"} são compatíveis com pensamento estendido.
Nossos testes mostraram que isso não deve reduzir o desempenho. Se você gostaria que o modelo fornecesse contexto em linguagem natural ou explicações enquanto ainda solicitava que o modelo use uma ferramenta específica, você pode usar {"type": "auto"} para tool_choice (o padrão) e adicionar instruções explícitas em uma mensagem user. Por exemplo: What's the weather like in London? Use the get_weather tool in your response.
Chamadas de ferramentas garantidas com ferramentas estritas
Combine tool_choice: {"type": "any"} com uso de ferramentas estritas para garantir que uma de suas ferramentas será chamada E que as entradas da ferramenta seguem estritamente seu esquema. Defina strict: true em suas definições de ferramentas para habilitar a validação de esquema.
As ferramentas não precisam necessariamente ser funções do cliente — você pode usar ferramentas sempre que quiser que o modelo retorne uma saída JSON que siga um esquema fornecido. Por exemplo, você pode usar uma ferramenta record_summary com um esquema particular. Veja Uso de ferramentas com Claude para um exemplo completo de funcionamento.
Ao usar ferramentas, Claude frequentemente comentará sobre o que está fazendo ou responderá naturalmente ao usuário antes de invocar ferramentas.
Por exemplo, dado o prompt "Qual é o tempo em San Francisco agora, e que horas são lá?", Claude pode responder com:
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "I'll help you check the current weather and time in San Francisco."
},
{
"type": "tool_use",
"id": "toolu_01A09q90qw90lq917835lq9",
"name": "get_weather",
"input": {"location": "San Francisco, CA"}
}
]
}Este estilo de resposta natural ajuda os usuários a entender o que Claude está fazendo e cria uma interação mais conversacional. Você pode orientar o estilo e o conteúdo dessas respostas através de seus prompts de sistema e fornecendo <examples> em seus prompts.
É importante notar que Claude pode usar várias frases e abordagens ao explicar suas ações. Seu código deve tratar essas respostas como qualquer outro texto gerado pelo assistente, e não depender de convenções de formatação específicas.
Por padrão, Claude pode usar múltiplas ferramentas para responder a uma consulta do usuário. Você pode desabilitar esse comportamento por:
disable_parallel_tool_use=true quando o tipo de tool_choice é auto, o que garante que Claude use no máximo uma ferramentadisable_parallel_tool_use=true quando o tipo de tool_choice é any ou tool, o que garante que Claude use exatamente uma ferramentaEmbora os modelos Claude 4 tenham excelentes capacidades de uso paralelo de ferramentas por padrão, você pode aumentar a probabilidade de execução paralela de ferramentas em todos os modelos com prompting direcionado:
Uso paralelo de ferramentas com Claude Sonnet 3.7
Claude Sonnet 3.7 pode ser menos provável de fazer chamadas de ferramentas paralelas em uma resposta, mesmo quando você não tiver definido disable_parallel_tool_use. Recomendamos atualizar para modelos Claude 4, que têm uso de ferramentas eficiente em tokens e chamadas de ferramentas paralelas melhoradas.
Se você ainda estiver usando Claude Sonnet 3.7, você pode habilitar o cabeçalho beta token-efficient-tools-2025-02-19, que ajuda a incentivar Claude a usar ferramentas paralelas. Você também pode introduzir uma "ferramenta em lote" que pode atuar como uma meta-ferramenta para envolver invocações para outras ferramentas simultaneamente.
Veja este exemplo em nosso cookbook para como usar essa solução alternativa.
Mais simples com Tool runner: A manipulação manual de ferramentas descrita nesta seção é gerenciada automaticamente por tool runner. Use esta seção quando você precisar de controle personalizado sobre a execução de ferramentas.
A resposta do Claude difere dependendo se ele usa uma ferramenta de cliente ou servidor.
A resposta terá um stop_reason de tool_use e um ou mais blocos de conteúdo tool_use que incluem:
id: Um identificador único para este bloco de uso de ferramenta particular. Isso será usado para corresponder aos resultados da ferramenta mais tarde.name: O nome da ferramenta sendo usada.input: Um objeto contendo a entrada sendo passada para a ferramenta, em conformidade com o input_schema da ferramenta.Quando você recebe uma resposta de uso de ferramenta para uma ferramenta de cliente, você deve:
name, id e input do bloco tool_use.input da ferramenta.role de user e um bloco content contendo o tipo tool_result e as seguintes informações:
tool_use_id: O id da solicitação de uso de ferramenta para a qual este é um resultado.content: O resultado da ferramenta, como uma string (por exemplo, ), uma lista de blocos de conteúdo aninhados (por exemplo, ), ou uma lista de blocos de documento (por exemplo, ). Esses blocos de conteúdo podem usar os tipos , ou .Requisitos importantes de formatação:
Por exemplo, isto causará um erro 400:
{"role": "user", "content": [
{"type": "text", "text": "Here are the results:"}, // ❌ Text before tool_result
{"type": "tool_result", "tool_use_id": "toolu_01", ...}
]}Após receber o resultado da ferramenta, Claude usará essas informações para continuar gerando uma resposta ao prompt original do usuário.
Claude executa a ferramenta internamente e incorpora os resultados diretamente em sua resposta sem exigir interação adicional do usuário.
Diferenças de outras APIs
Ao contrário de APIs que separam o uso de ferramentas ou usam funções especiais como tool ou function, a API Claude integra ferramentas diretamente na estrutura de mensagem user e assistant.
As mensagens contêm matrizes de blocos text, image, tool_use e tool_result. As mensagens user incluem conteúdo de cliente e tool_result, enquanto as mensagens assistant contêm conteúdo gerado por IA e tool_use.
max_tokensSe a resposta do Claude for cortada devido ao limite max_tokens, e a resposta truncada contiver um bloco de uso de ferramenta incompleto, você precisará tentar novamente a solicitação com um valor max_tokens mais alto para obter o uso de ferramenta completo.
pause_turnAo usar ferramentas de servidor como busca na web, a API pode retornar um motivo de parada pause_turn, indicando que a API pausou uma volta longa.
Aqui está como manipular o motivo de parada pause_turn:
Ao manipular pause_turn:
Manipulação de erros integrada: Tool runner fornece manipulação automática de erros para a maioria dos cenários comuns. Esta seção cobre manipulação manual de erros para casos de uso avançados.
Existem alguns tipos diferentes de erros que podem ocorrer ao usar ferramentas com Claude:
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-sonnet-4-5-20250929",
max_tokens=1024,
betas=["advanced-tool-use-2025-11-20"],
tools=[
{
"name": "get_weather",
"description": "Get the current weather in a given location",
"input_schema": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "The unit of temperature"
}
},
"required": ["location"]
},
"input_examples": [
{
"location": "San Francisco, CA",
"unit": "fahrenheit"
},
{
"location": "Tokyo, Japan",
"unit": "celsius"
},
{
"location": "New York, NY" # 'unit' is optional
}
]
}
],
messages=[
{"role": "user", "content": "What's the weather like in San Francisco?"}
]
)"content": "15 degrees""content": [{"type": "text", "text": "15 degrees"}]"content": ["type": "document", "source": {"type": "text", "media_type": "text/plain", "data": "15 degrees"}]textimagedocumentis_error (opcional): Defina como true se a execução da ferramenta resultou em um erro.Isto está correto:
{"role": "user", "content": [
{"type": "tool_result", "tool_use_id": "toolu_01", ...},
{"type": "text", "text": "What should I do next?"} // ✅ Text after tool_result
]}Se você receber um erro como "tool_use ids were found without tool_result blocks immediately after", verifique se seus resultados de ferramentas estão formatados corretamente.
# Check if response was truncated during tool use
if response.stop_reason == "max_tokens":
# Check if the last content block is an incomplete tool_use
last_block = response.content[-1]
if last_block.type == "tool_use":
# Send the request with higher max_tokens
response = client.messages.create(
model="claude-sonnet-4-5",
max_tokens=4096, # Increased limit
messages=messages,
tools=tools
)import anthropic
client = anthropic.Anthropic()
# Initial request with web search
response = client.messages.create(
model="claude-3-7-sonnet-latest",
max_tokens=1024,
messages=[
{
"role": "user",
"content": "Search for comprehensive information about quantum computing breakthroughs in 2025"
}
],
tools=[{
"type": "web_search_20250305",
"name": "web_search",
"max_uses": 10
}]
)
# Check if the response has pause_turn stop reason
if response.stop_reason == "pause_turn":
# Continue the conversation with the paused content
messages = [
{"role": "user", "content": "Search for comprehensive information about quantum computing breakthroughs in 2025"},
{"role": "assistant", "content": response.content}
]
# Send the continuation request
continuation = client.messages.create(
model="claude-3-7-sonnet-latest",
max_tokens=1024,
messages=messages,
tools=[{
"type": "web_search_20250305",
"name": "web_search",
"max_uses": 10
}]
)
print(continuation)
else:
print(response)