Domínio 2 — Tool Design & MCP Integration · Lição 1 de 6

Anatomia de uma ferramenta e descrições que funcionam

Objetivos de aprendizagem

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:

CampoPapel
nameIdentificador da ferramenta. Prefira nomes específicos e verbais: get_current_weather é melhor que weather.
descriptionTexto em linguagem natural que o modelo usa para decidir quando e como chamar a ferramenta. É o mecanismo primário de seleção.
input_schemaJSON 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.
strictOpcional. 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:

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:

  1. Enriquecer descrições com formatos, exemplos e fronteiras (primeiro passo de baixo esforço e alto retorno).
  2. Renomear a ferramenta para eliminar overlap funcional — ex.: renomear analyze_content para extract_web_results com descrição específica de conteúdo web.
  3. Dividir ferramentas genéricas em ferramentas de propósito específico com contratos de entrada/saída bem definidos — ex.: dividir analyze_document em extract_data_points, summarize_content e verify_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

Resumo em 5 linhas

  1. Ferramenta = name + description + input_schema (+ strict opcional para argumentos garantidos pelo schema).
  2. A description é o mecanismo primário de seleção: descrições mínimas → seleção não confiável entre ferramentas parecidas.
  3. Descrição boa inclui formatos de entrada, exemplos de consulta, edge cases e fronteiras versus ferramentas similares.
  4. Overlap causa misrouting: enriqueça descrições primeiro; depois renomeie (analyze_content → extract_web_results) ou divida ferramentas genéricas em específicas.
  5. Instruções por palavra-chave no system prompt podem sobrepor descrições bem escritas — revise o prompt ao diagnosticar misrouting.

Documentação oficial

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?

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?

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?

4. O que strict: true em uma definição de ferramenta garante?