Como implementar o uso de ferramentas
Guia completo sobre como implementar o uso de ferramentas com Claude, incluindo definições de ferramentas, controle de saída e tratamento de erros.
Escolhendo um modelo
Geralmente, use Claude Opus 4, Claude Sonnet 4, Claude Sonnet 3.7, Claude Sonnet 3.5 ou Claude Opus 3 para ferramentas complexas e consultas ambíguas; eles lidam melhor com múltiplas ferramentas e buscam esclarecimentos quando necessário.
Use Claude Haiku 3.5 ou Claude Haiku 3 para ferramentas diretas, mas observe que eles podem inferir parâmetros ausentes.
Se estiver usando Claude Sonnet 3.7 com uso de ferramentas e pensamento estendido, consulte nosso guia aqui para mais informações.
Especificando ferramentas do cliente
Ferramentas do cliente (tanto definidas pela Anthropic quanto pelo usuário) são especificadas no parâmetro de nível superior tools
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 definindo os parâmetros esperados para a ferramenta. |
Prompt do sistema para uso de ferramentas
Quando você chama a API da Anthropic com o parâmetro tools
, construímos um prompt de sistema especial a partir das definições de ferramentas, configuração de ferramentas e qualquer prompt de 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 adequadamente:
Melhores práticas para definições de ferramentas
Para obter o melhor desempenho do Claude ao usar ferramentas, siga estas diretrizes:
- Forneça descrições extremamente detalhadas. Este é de longe o fator mais importante no desempenho das ferramentas. Suas descrições devem explicar todos os detalhes sobre a ferramenta, incluindo:
- O que a ferramenta faz
- Quando deve ser usada (e quando não deve)
- O que cada parâmetro significa e como afeta o comportamento da ferramenta
- Quaisquer advertências ou limitações importantes, como que informações a ferramenta não retorna se o nome da ferramenta não for claro. Quanto mais contexto você puder dar ao Claude sobre suas ferramentas, melhor ele será em decidir quando e como usá-las. Procure pelo menos 3-4 frases por descrição de ferramenta, mais se a ferramenta for complexa.
- Priorize descrições sobre exemplos. Embora você possa incluir exemplos de como usar uma ferramenta em sua descrição ou no prompt que a acompanha, isso é menos importante do que ter uma explicação clara e abrangente do propósito e parâmetros da ferramenta. Adicione exemplos apenas depois de ter desenvolvido completamente a descrição.
A boa descrição explica claramente o que a ferramenta faz, quando usá-la, que dados retorna e o que o parâmetro ticker
significa. A descrição ruim é muito breve e deixa Claude com muitas questões abertas sobre o comportamento e uso da ferramenta.
Controlando a saída do Claude
Forçando o uso 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:
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 quandotools
são fornecidas.any
diz ao Claude que ele deve usar uma das ferramentas fornecidas, mas não força uma ferramenta específica.tool
nos permite forçar Claude a sempre usar uma ferramenta específica.none
impede Claude de usar qualquer ferramenta. Este é o valor padrão quando nenhumatools
é fornecida.
Ao usar cache de prompt, mudanças no parâmetro tool_choice
invalidarão blocos de mensagem em cache. Definições de ferramentas e prompts de sistema permanecem em cache, mas o conteúdo da mensagem deve ser reprocessado.
Este diagrama ilustra como cada opção funciona:
Note 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 um bloco de conteúdo text
de cadeia de pensamento antes dos blocos de conteúdo tool_use
, mesmo se explicitamente solicitado 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.
Nossos testes mostraram que isso não deve reduzir o desempenho. Se você gostaria de manter a cadeia de pensamento (particularmente com Opus) 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: Como está o tempo em Londres? Use a ferramenta get_weather em sua resposta.
Saída JSON
Ferramentas não precisam necessariamente ser funções do cliente — você pode usar ferramentas sempre que quiser que o modelo retorne saída JSON que segue um esquema fornecido. Por exemplo, você pode usar uma ferramenta record_summary
com um esquema específico. Veja Uso de ferramentas com Claude para um exemplo funcional completo.
Cadeia de pensamento
Ao usar ferramentas, Claude frequentemente mostrará sua “cadeia de pensamento”, ou seja, o raciocínio passo a passo que usa para quebrar o problema e decidir quais ferramentas usar. O modelo Claude Opus 3 fará isso se tool_choice
estiver definido como auto
(este é o valor padrão, veja Forçando o uso de ferramentas), e Sonnet e Haiku podem ser induzidos a fazê-lo.
Por exemplo, dado o prompt “Como está o tempo em São Francisco agora, e que horas são lá?”, Claude pode responder com:
Esta cadeia de pensamento dá insights sobre o processo de raciocínio do Claude e pode ajudar você a depurar comportamentos inesperados.
Com o modelo Claude Sonnet 3, a cadeia de pensamento é menos comum por padrão, mas você pode induzir Claude a mostrar seu raciocínio adicionando algo como "Antes de responder, explique seu raciocínio passo a passo em tags."
à mensagem do usuário ou prompt do sistema.
É importante notar que embora as tags <thinking>
sejam uma convenção comum que Claude usa para denotar sua cadeia de pensamento, o formato exato (como o nome desta tag XML) pode mudar ao longo do tempo. Seu código deve tratar a cadeia de pensamento como qualquer outro texto gerado pelo assistente, e não depender da presença ou formatação específica das tags <thinking>
.
Uso paralelo de ferramentas
Por padrão, Claude pode usar múltiplas ferramentas para responder a uma consulta do usuário. Você pode desabilitar este comportamento:
- Definindo
disable_parallel_tool_use=true
quando o tipo tool_choice éauto
, o que garante que Claude use no máximo uma ferramenta - Definindo
disable_parallel_tool_use=true
quando o tipo tool_choice éany
outool
, o que garante que Claude use exatamente uma ferramenta
Maximizando o uso paralelo de ferramentas
Embora 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 propenso a fazer chamadas de ferramentas paralelas em uma resposta, mesmo quando você não definiu disable_parallel_tool_use
. Para contornar isso, recomendamos habilitar uso de ferramentas eficiente em tokens, que ajuda a incentivar Claude a usar ferramentas paralelas. Este recurso beta também reduz latência e economiza uma média de 14% em tokens de saída.
Se você preferir não optar pelo beta de uso de ferramentas eficiente em tokens, você também pode introduzir uma “ferramenta em lote” que pode atuar como uma meta-ferramenta para envolver invocações para outras ferramentas simultaneamente. Descobrimos que se esta ferramenta estiver presente, o modelo a usará para chamar simultaneamente múltiplas ferramentas em paralelo para você.
Veja este exemplo em nosso cookbook para como usar esta solução alternativa.
Tratando blocos de conteúdo de uso de ferramentas e resultado de ferramentas
A resposta do Claude difere baseada em se ele usa uma ferramenta do cliente ou servidor.
Tratando resultados de ferramentas do cliente
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 específico. 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 oinput_schema
da ferramenta.
Quando você recebe uma resposta de uso de ferramenta para uma ferramenta do cliente, você deve:
- Extrair o
name
,id
einput
do blocotool_use
. - Executar a ferramenta real em seu código correspondente a esse nome de ferramenta, passando a
input
da ferramenta. - Continuar a conversa enviando uma nova mensagem com o
role
deuser
, e um blococontent
contendo o tipotool_result
e as seguintes informações:tool_use_id
: Oid
da solicitação de uso de ferramenta para a qual este é um resultado.content
: O resultado da ferramenta, como uma string (ex."content": "15 graus"
) ou lista de blocos de conteúdo aninhados (ex."content": [{"type": "text", "text": "15 graus"}]
). Estes blocos de conteúdo podem usar os tipostext
ouimage
.is_error
(opcional): Defina comotrue
se a execução da ferramenta resultou em erro.
Requisitos importantes de formatação:
- Blocos de resultado de ferramenta devem seguir imediatamente seus blocos de uso de ferramenta correspondentes no histórico de mensagens. Você não pode incluir nenhuma mensagem entre a mensagem de uso de ferramenta do assistente e a mensagem de resultado de ferramenta do usuário.
- Na mensagem do usuário contendo resultados de ferramentas, os blocos tool_result devem vir PRIMEIRO no array de conteúdo. Qualquer texto deve vir DEPOIS de todos os resultados de ferramentas.
Por exemplo, isso causará um erro 400:
Isso está correto:
Se você receber um erro como “tool_use ids foram encontrados sem blocos tool_result imediatamente após”, verifique se seus resultados de ferramentas estão formatados corretamente.
Após receber o resultado da ferramenta, Claude usará essa informação para continuar gerando uma resposta ao prompt original do usuário.
Tratando resultados de ferramentas do servidor
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
Diferentemente de APIs que separam o uso de ferramentas ou usam papéis especiais como tool
ou function
, a API da Anthropic integra ferramentas diretamente na estrutura de mensagens user
e assistant
.
Mensagens contêm arrays de blocos text
, image
, tool_use
e tool_result
. Mensagens user
incluem conteúdo do cliente e tool_result
, enquanto mensagens assistant
contêm conteúdo gerado por IA e tool_use
.
Tratando o motivo de parada max_tokens
Se a resposta do Claude for cortada devido ao limite max_tokens
, e a resposta truncada contém 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 completo da ferramenta.
Tratando o motivo de parada pause_turn
Ao usar ferramentas do servidor como busca na web, a API pode retornar um motivo de parada pause_turn
, indicando que a API pausou um turno de longa duração.
Aqui está como tratar o motivo de parada pause_turn
:
Ao tratar pause_turn
:
- Continue a conversa: Passe a resposta pausada de volta como está em uma solicitação subsequente para deixar Claude continuar seu turno
- Modifique se necessário: Você pode opcionalmente modificar o conteúdo antes de continuar se quiser interromper ou redirecionar a conversa
- Preserve o estado da ferramenta: Inclua as mesmas ferramentas na solicitação de continuação para manter a funcionalidade
Solucionando erros
Existem alguns tipos diferentes de erros que podem ocorrer ao usar ferramentas com Claude: