Anatomia de uma ferramenta e descrições que funcionam
Objetivos de aprendizagem
- Identificar os campos de uma definição de ferramenta:
name,description,input_schemaestrict. - Explicar por que a
descriptioné o mecanismo primário de seleção de ferramenta pelo modelo — e por que descrições mínimas causam seleção não confiável. - Escrever descrições que incluem formatos de entrada, exemplos de consulta, edge cases e fronteiras ("use esta ferramenta quando... não use quando...").
- Diagnosticar misrouting causado por descrições ambíguas ou sobrepostas e corrigi-lo renomeando ou dividindo ferramentas genéricas.
- Reconhecer quando instruções sensíveis a palavras-chave no system prompt sobrepõem descrições bem escritas.
Os quatro campos de uma definição de ferramenta
Toda ferramenta definida pelo usuário na Claude API tem três campos obrigatórios e um opcional importante:
| Campo | Papel |
|---|---|
name | Identificador da ferramenta. Prefira nomes específicos e verbais: get_current_weather é melhor que weather. |
description | Texto em linguagem natural que o modelo usa para decidir quando e como chamar a ferramenta. É o mecanismo primário de seleção. |
input_schema | JSON Schema dos parâmetros de entrada. Cada propriedade deve ter sua própria description; use enum para valores fixos e marque em required só o que é realmente obrigatório. |
strict | Opcional. Com strict: true (structured outputs), a API garante que os argumentos gerados obedecem exatamente ao schema — exige additionalProperties: false nos objetos. |
A descrição é o mecanismo primário de seleção
O modelo não lê seu código-fonte nem sabe o que o backend faz: ele escolhe a ferramenta lendo as descrições disponíveis e comparando-as com a intenção do usuário. Descrições mínimas como "Recupera informações do cliente" e "Recupera detalhes do pedido" não dão contexto suficiente para diferenciar duas ferramentas parecidas — o resultado é seleção não confiável, observável em produção como misrouting intermitente.
Uma descrição eficaz cobre quatro elementos:
- Formatos de entrada aceitos — ex.: "aceita IDs de pedido no formato
ORD-XXXXX; não aceita nomes de clientes". - Exemplos de consulta — ex.: "use para perguntas como 'onde está meu pedido #12345?'".
- Edge cases — ex.: "retorna lista vazia quando o pedido ainda não foi faturado".
- Fronteiras — quando usar esta ferramenta versus alternativas parecidas: "para dados cadastrais do cliente, use
get_customer, não esta ferramenta".
Seja prescritivo sobre quando chamar, não apenas sobre o que a ferramenta faz: "Chame esta ferramenta quando o usuário perguntar sobre preços atuais ou eventos recentes". Em modelos Opus recentes, que são mais conservadores ao usar ferramentas, condições de disparo explícitas na descrição aumentam de forma mensurável a taxa de chamada correta.
Overlap entre ferramentas causa misrouting
Um sintoma clássico do exame: duas ferramentas com descrições quase idênticas — analyze_content ("Analisa conteúdo") e analyze_document ("Analisa documentos") — e o agente escolhendo a errada em parte das requisições. O problema não é o modelo: é que as descrições não oferecem nenhum critério de decisão. Três correções, em ordem crescente de esforço:
- Enriquecer descrições com formatos, exemplos e fronteiras (primeiro passo de baixo esforço e alto retorno).
- Renomear a ferramenta para eliminar overlap funcional — ex.: renomear
analyze_contentparaextract_web_resultscom descrição específica de conteúdo web. - Dividir ferramentas genéricas em ferramentas de propósito específico com contratos de entrada/saída bem definidos — ex.: dividir
analyze_documentemextract_data_points,summarize_contenteverify_claim_against_source.
Consolidar tudo em uma super-ferramenta genérica (lookup_entity que "aceita qualquer identificador") costuma ser um distrator no exame: move a ambiguidade da seleção da ferramenta para dentro dela, e o contrato de entrada/saída fica ainda mais vago.
O system prompt pode sobrepor descrições
Mesmo com descrições perfeitas, instruções sensíveis a palavras-chave no system prompt criam associações indesejadas. Exemplo: um system prompt que diz "sempre que o usuário mencionar documento, use analyze_document" fará o agente chamar essa ferramenta até para "documento fiscal de um pedido", ignorando a ferramenta correta. Ao diagnosticar misrouting, revise o system prompt em busca de gatilhos por palavra-chave antes de reescrever as descrições — a instrução do system prompt tem forte autoridade sobre a decisão do modelo.
Exemplo completo em Python
Ferramenta com descrição completa (formato de entrada, exemplos, edge case, fronteira) e strict: true:
import anthropic
client = anthropic.Anthropic()
lookup_order = {
"name": "lookup_order",
"description": (
"Busca o status e os itens de um pedido pelo ID. "
"Formato de entrada: IDs no padrao ORD-XXXXX (ex.: ORD-48211); "
"nao aceita nomes de clientes nem e-mails. "
"Use para perguntas como 'onde esta meu pedido ORD-48211?'. "
"Edge case: pedidos ainda nao faturados retornam items=[] com "
"status='pending' — isso e um resultado valido, nao um erro. "
"Fronteira: para dados cadastrais do cliente (nome, endereco), "
"use get_customer em vez desta ferramenta."
),
"strict": True,
"input_schema": {
"type": "object",
"properties": {
"order_id": {
"type": "string",
"description": "ID do pedido no formato ORD-XXXXX",
}
},
"required": ["order_id"],
"additionalProperties": False,
},
}
response = client.messages.create(
model="claude-opus-5",
max_tokens=1024,
thinking={"type": "adaptive"},
tools=[lookup_order],
messages=[{"role": "user", "content": "Onde esta meu pedido ORD-48211?"}],
)
for block in response.content:
if block.type == "tool_use":
print(block.name, block.input)
Pegadinhas da prova
- Distrator típico: "adicione few-shot examples no system prompt" como primeiro passo para misrouting entre ferramentas parecidas. Errado: descrições são o mecanismo primário de seleção; enriquecê-las é a correção de raiz, com menos overhead de tokens.
- Distrator típico: "implemente uma camada de roteamento que pré-seleciona a ferramenta por keywords". Over-engineering: contorna a compreensão de linguagem natural do modelo em vez de corrigir as descrições.
- Distrator típico: "consolide as duas ferramentas em uma só genérica". Válido como decisão arquitetural em alguns casos, mas nunca é o "primeiro passo" — e frequentemente piora o contrato de entrada.
- Pegadinha: descrições impecáveis mas misrouting persistente → procure instruções por palavra-chave no system prompt que sobrepõem as descrições.
- Pegadinha:
strict: truegarante argumentos válidos contra o schema, mas não garante que a ferramenta certa foi escolhida — seleção continua dependendo da descrição.
Resumo em 5 linhas
- Ferramenta =
name+description+input_schema(+strictopcional para argumentos garantidos pelo schema). - A
descriptioné o mecanismo primário de seleção: descrições mínimas → seleção não confiável entre ferramentas parecidas. - Descrição boa inclui formatos de entrada, exemplos de consulta, edge cases e fronteiras versus ferramentas similares.
- Overlap causa misrouting: enriqueça descrições primeiro; depois renomeie (
analyze_content→extract_web_results) ou divida ferramentas genéricas em específicas. - Instruções por palavra-chave no system prompt podem sobrepor descrições bem escritas — revise o prompt ao diagnosticar misrouting.
Documentação oficial
- Tool use — Overview
- Implement tool use (best practices de descrições)
- Structured outputs e strict tool use
Questões de fixação
1. Qual elemento de uma definição de ferramenta é o mecanismo primário que o modelo usa para decidir qual ferramenta chamar?
Gabarito: B. O modelo seleciona ferramentas lendo as descrições. A está errada: o schema valida argumentos, não orienta a seleção entre ferramentas parecidas. C está errada: strict garante argumentos válidos contra o schema, não a escolha da ferramenta. D está errada: a ordem no array não é o mecanismo de seleção.
2. Um agente tem analyze_content ("Analisa conteúdo") e analyze_document ("Analisa documentos") e escolhe a errada em ~15% dos casos. Qual é o primeiro passo mais eficaz?
Gabarito: C. Descrições mínimas e sobrepostas são a causa raiz — enriquecê-las é a correção de menor esforço e maior retorno. A é over-engineering que contorna o modelo. B move a ambiguidade para dentro da ferramenta. D adiciona overhead de tokens sem corrigir o mecanismo primário de seleção.
3. As descrições das ferramentas foram reescritas com fronteiras claras, mas o agente continua chamando analyze_document sempre que a palavra "documento" aparece, mesmo quando outra ferramenta seria correta. Onde investigar primeiro?
Gabarito: D. Instruções do tipo "quando mencionar X, use a ferramenta Y" no system prompt sobrepõem descrições bem escritas. A está errada: schema não governa seleção. B trata sintoma com um botão que não resolve associação por keyword. C não tem relação com o padrão determinístico observado (sempre a mesma palavra dispara a mesma ferramenta).
4. O que strict: true em uma definição de ferramenta garante?
Gabarito: B. strict: true (structured outputs) garante argumentos válidos contra o schema — exige additionalProperties: false. A está errada: seleção continua guiada pela descrição. C está errada: strict não muda onde a ferramenta executa. D descreve disable_parallel_tool_use, outro recurso.