Function calling transforma um LLM de gerador de texto em agente que opera sistemas: o modelo devolve JSON estruturado descrevendo a chamada de ferramenta, seu código executa e o resultado volta ao contexto. Demo é fácil; produção cobra guardrails. Os padrões abaixo separam demonstração que impressiona de agente que sobrevive a tráfego real.

A qualidade do schema define a confiabilidade

Modelo bom preenche schema ruim com lixo plausível. Disciplina de schema vem antes da escolha de modelo: tipos estritos em JSON Schema, enums no lugar de strings livres e descrição detalhada por parâmetro, com exemplo de valor. Campo date descrito como "data" recebe "amanhã"; descrito como ISO 8601 com range válido, recebe 2026-05-24. Catálogo de ferramentas grande demais no mesmo request confunde o modelo; mantenha abaixo de 20 por chamada e componha fluxos em vez de acumular opções.

O loop do agente e o budget de passos

O ciclo clássico: planejar, agir, observar, repetir até cumprir a meta. Sem teto de passos, meta impossível vira loop infinito queimando tokens contra o rate limit. Cap entre 10 e 25 iterações, com mensagem de falha explícita ao estourar: "não concluí X após 15 tentativas" é produto; stack trace é bug. Registre o motivo do término; meta alcançada, budget estourado e erro repetido contam histórias diferentes.

Ferramentas que sobrevivem a retry

  • Poucas ferramentas composáveis ganham de muitas sobrepostas: 8 bem desenhadas superam 40 confusas
  • Operações idempotentes sobrevivem a retry; passe um request_id gerado pelo agente para deduplicar
  • Erros estruturados que o modelo raciocina: {"error": "card_declined", "retryable": false} orienta a próxima ação

Níveis de autonomia por raio de dano

Autonomia é espectro, e blast radius define o tier. Consulta de leitura roda autônoma com limites; escrita em banco de produção pede aprovação humana; pagamento executa com confirmação explícita. Três tiers cobrem quase tudo: suggest-only, execute-with-approval, autonomous-with-limits. Mudança de tier acompanha mudança de risco: integração de pagamento nova começa suggest-only por duas semanas.

Observabilidade de cada chamada

Logue cada tool call com input, output, latência e gasto em tokens; spans de OpenTelemetry amarram cadeias multi-step numa trace única. Guarde o prompt montado e o resultado cru em cada trace; replay de incidente depende disso. Sem isso, depurar agente vira adivinhação; com isso, "por que o agente escolheu essa ferramenta" vira query.

Padrões de falha conhecidos

  • Loop de retry infinito em ferramenta caída: circuit breaker no executor, backoff com teto
  • Nome de ferramenta alucinado: dispatch valida contra lista fechada e devolve erro descritivo ao modelo
  • Estouro de context window por resultado verboso: trunque com sumário e pagine resultados grandes