Esta página aborda o ciclo de vida de chamadas de ferramentas: ler blocos tool_use da resposta do Claude, formatar blocos tool_result na sua resposta e sinalizar erros. Para a abstração do SDK que lida com isso automaticamente, consulte Tool Runner.
Mais simples com o Tool Runner: O tratamento manual de ferramentas descrito nesta página é gerenciado automaticamente pelo Tool Runner. Use esta página quando precisar de controle personalizado sobre a execução de ferramentas.
A resposta do Claude difere dependendo se ele usa uma ferramenta de cliente ou de 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 específico de uso de ferramenta. Isso será usado para corresponder aos resultados da ferramenta posteriormente.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ê receber 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 (opcional): O resultado da ferramenta, como uma string (por exemplo, "content": "15 degrees"), uma lista de blocos de conteúdo aninhados (por exemplo, "content": [{"type": "text", "text": "15 degrees"}]) ou uma lista de blocos de documento (por exemplo, "content": [{"type": "document", "source": {"type": "text", "media_type": "text/plain", "data": "15 degrees"}}]). Esses blocos de conteúdo podem usar os tipos text, image, document ou search_result.is_error (opcional): Defina como true se a execução da ferramenta resultou em um erro.Requisitos importantes de formatação:
tool_result. Texto após os resultados encerra o turno prematuramente; para uma ferramenta de servidor que o Claude chamou diretamente, a solicitação então falha com um erro 400 que nomeia a ferramenta de servidor não resolvida. Consulte Motivos de parada e fallback.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" /* ... */ }
]
}Isto está correto quando o turno do assistente chama apenas ferramentas de cliente:
{
"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.
Resultados de ferramentas frequentemente carregam conteúdo de fontes fora do seu controle: páginas web, e-mails recebidos, uploads de usuários, APIs de terceiros. Trate esse conteúdo como não confiável: um invasor que possa influenciá-lo pode incorporar instruções que tentam redirecionar o Claude (injeção indireta de prompt). Mantenha conteúdo não confiável dentro de blocos tool_result em vez de prompts system ou blocos text simples do usuário, e consulte Mitigar jailbreaks e injeções de prompt para reforço adicional.
Após receber o resultado da ferramenta, o Claude usará essa informação para continuar gerando uma resposta ao prompt original do usuário.
O Claude executa a ferramenta internamente e incorpora os resultados diretamente em sua resposta sem exigir interação adicional do usuário.
Uma resposta pode conter tanto um bloco tool_use de cliente quanto um bloco server_tool_use que não tem bloco de resultado. Essa chamada de ferramenta de servidor ainda não foi concluída, e seu bloco de resultado chega em uma resposta posterior. Responda com uma mensagem de usuário que contenha apenas os blocos tool_result para as ferramentas de cliente e mantenha o mesmo array tools; para uma ferramenta de servidor que o Claude chamou diretamente, a API a executa nessa solicitação e a próxima resposta começa com seu bloco de resultado. Consulte Motivos de parada e fallback.
Diferenças em relação a outras APIs
Diferentemente de APIs que separam o uso de ferramentas ou usam roles especiais como tool ou function, a API do Claude integra ferramentas diretamente na estrutura de mensagens user e assistant.
As 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.
Existem alguns tipos diferentes de erros que podem ocorrer ao usar ferramentas com o Claude:
Lide com respostas em que o Claude chama várias ferramentas em um único turno.
Deixe o SDK gerenciar o loop de tool_use, a formatação de resultados e as novas tentativas por você.
Escreva schemas e descrições que direcionem o Claude para a ferramenta certa.
Was this page helpful?