Was this page helpful?
Use o modelo Claude Opus (4.7) mais recente para ferramentas complexas e consultas ambíguas; ele lida melhor com múltiplas ferramentas e busca esclarecimentos quando necessário.
Use modelos Claude Haiku para ferramentas simples, mas observe que eles podem inferir parâmetros ausentes.
Se estiver usando o Claude com uso de ferramentas e pensamento estendido, consulte o guia de pensamento estendido para mais informações.
Ferramentas do cliente (tanto as com esquema da Anthropic quanto as definidas pelo usuário) são especificadas no parâmetro de nível superior tools da requisiçã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) Um array de objetos de entrada de exemplo para ajudar o Claude a entender como usar a ferramenta. Consulte Fornecendo exemplos de uso de ferramentas. |
Para o conjunto completo de propriedades opcionais disponíveis em qualquer definição de ferramenta, incluindo cache_control, strict, defer_loading e allowed_callers, consulte a Referência de ferramentas.
Quando você chama a API do Claude com o parâmetro tools, a API constrói um prompt do sistema especial a partir das definições de ferramentas, da configuração de ferramentas e de 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 opere corretamente:
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 o mais importante, mas para ferramentas com entradas complexas, objetos aninhados ou parâmetros sensíveis a formato, você pode usar o campo input_examples para fornecer exemplos validados pelo esquema. Consulte 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 o Claude com muitas dúvidas sobre o comportamento e o uso da ferramenta.
Para orientações mais aprofundadas sobre design de ferramentas (consolidação, nomenclatura e modelagem de respostas), consulte Writing tools for agents.
Você pode fornecer exemplos concretos de entradas válidas de ferramentas para ajudar o 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 a formato.
Adicione um campo opcional input_examples à sua definição de ferramenta com um array 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 junto com o esquema da sua ferramenta, mostrando ao Claude padrões concretos para chamadas de ferramentas bem formadas. Isso ajuda o 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 400Em alguns casos, você pode querer que o Claude use uma ferramenta específica para responder à pergunta do usuário, mesmo que o Claude fosse responder diretamente sem chamar 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, há quatro opções possíveis:
auto permite que o Claude decida se chama ou não alguma das ferramentas fornecidas. Este é o valor padrão quando tools são fornecidas.any informa ao Claude que ele deve usar uma das ferramentas fornecidas, mas não força uma ferramenta específica.tool força o Claude a sempre usar uma ferramenta específica.none impede o Claude de usar qualquer ferramenta. Este é o valor padrão quando nenhuma tools é fornecida.Ao usar cache de prompt, alterações no parâmetro tool_choice invalidarão os blocos de mensagem em cache. Definições de ferramentas e prompts do sistema permanecem em cache, mas o conteúdo das mensagens deve ser reprocessado.
Este diagrama ilustra como cada opção funciona:

Observe que quando você define tool_choice como any ou tool, a API pré-preenche a mensagem do assistente para forçar o uso de uma ferramenta. Isso significa que os modelos não emitirão uma resposta ou explicação em linguagem natural antes dos blocos de conteúdo tool_use, mesmo se explicitamente solicitados a fazê-lo.
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 erro. Apenas tool_choice: {"type": "auto"} (o padrão) e tool_choice: {"type": "none"} são compatíveis com pensamento estendido.
O Claude Mythos Preview não suporta uso forçado de ferramentas. Requisições com tool_choice: {"type": "any"} ou tool_choice: {"type": "tool", "name": "..."} retornam um erro 400 neste modelo. Use tool_choice: {"type": "auto"} (o padrão) ou tool_choice: {"type": "none"} e confie no prompting para influenciar a seleção de ferramentas.
Testes mostraram que isso não deve reduzir o desempenho. Se você quiser que o modelo forneça contexto ou explicações em linguagem natural enquanto ainda solicita 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 estrito de ferramentas para garantir tanto que uma de suas ferramentas será chamada QUANTO que as entradas da ferramenta seguirão estritamente seu esquema. Defina strict: true nas suas definições de ferramentas para habilitar a validação de esquema.
Ao usar ferramentas, o Claude frequentemente comentará sobre o que está fazendo ou responderá naturalmente ao usuário antes de invocar ferramentas.
Por exemplo, dado o prompt "What's the weather like in San Francisco right now, and what time is it there?", o 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" }
}
]
}Esse estilo de resposta natural ajuda os usuários a entender o que o Claude está fazendo e cria uma interação mais conversacional. Você pode orientar o estilo e o conteúdo dessas respostas por meio de seus prompts do sistema e fornecendo <examples> em seus prompts.
É importante observar que o Claude pode usar várias formulações 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.
create_prreview_prmerge_practiongithub_list_prs, slack_send_message). Isso torna a seleção de ferramentas inequívoca à medida que sua biblioteca cresce, e é especialmente importante ao usar a busca de ferramentas.import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-4-8",
max_tokens=1024,
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?"}],
)
print(response)