Agente de IA: Rastreamento de Chamadas de Ferramentas – O Que Registrar por Requisição

"Ferramenta chamada, obteve 200" não explica nada. Aprenda o que registrar em cada chamada de ferramenta de agente, o que redigir e como transformar rastros falhos em testes de regressão.

Ashley Innocent

Ashley Innocent

26 agosto 2026

Agente de IA: Rastreamento de Chamadas de Ferramentas – O Que Registrar por Requisição

Apidog para empresas

Implantação local

SSO & RBAC

Conforme SOC 2

Explorar Apidog Enterprise

Um usuário relata que o agente “fez algo estranho” ontem à tarde. Você abre os logs e encontra isto:

INFO  agent run started
INFO  calling tool: updateOrder
INFO  tool returned 200
INFO  agent run completed

O agente chamou updateOrder. Você não sabe com quais argumentos, para qual pedido, por que ele escolheu essa ferramenta, ou o que retornou. A execução foi bem-sucedida por todas as medidas que você registrou, e você não consegue reconstruir uma única decisão que ele tomou.

Sistemas de agentes falham de maneiras que só fazem sentido em retrospectiva, o que significa que o log é o produto. Este guia aborda o que registrar em cada chamada de ferramenta, como correlacionar uma decisão do modelo com a requisição HTTP que ele produziu, o que redigir e como transformar rastreamentos em testes. Nosso post sobre observabilidade de API cobre o lado do serviço; este cobre a camada do agente que fica por cima.

Apidog é útil quando você tem um rastreamento, porque a maneira mais rápida de entender uma chamada ruim é reproduzi-la contra o mesmo endpoint e observar o que acontece.

Três camadas, um rastreamento

Um agente produz eventos em três níveis, e a maioria das equipes registra apenas o do meio.

A **camada de raciocínio** é onde o modelo decide. O que estava em contexto, quais ferramentas foram oferecidas, qual ele escolheu e com quais argumentos.

A **camada de ferramenta** é o seu executor. Ele valida argumentos, aplica políticas, mapeia a chamada para uma requisição HTTP e lida com o resultado.

A **camada HTTP** é a rede. Método, URL, cabeçalhos, corpo, status, latência.

A depuração quase sempre cruza camadas. “O agente enviou o ID do cliente errado” é um problema de raciocínio visível apenas na camada HTTP. “A API retornou um 200 com um corpo vazio” é um problema HTTP que aparece como um raciocínio estranho três passos depois. Se as três camadas não estiverem interligadas por um identificador compartilhado, você ficará preso correlacionando por timestamp, o que para de funcionar no momento em que duas execuções se sobrepõem.

Então a primeira regra: um ID de rastreamento por execução do agente, um ID de span por chamada de ferramenta, e ambos carimbados em cada registro em cada camada. Os rastreamentos do OpenTelemetry já modelam exatamente este formato, e há um conjunto crescente de convenções semânticas de GenAI para nomear os atributos, de modo que seus dados sejam portáteis.

O que registrar em cada chamada de ferramenta

Um registro que responde a perguntas reais tem aproximadamente este formato:

{
  "trace_id": "run_01J8ZK3M2Q",
  "span_id": "call_004",
  "parent_span_id": "call_003",
  "timestamp": "2026-08-26T14:03:11.482Z",
  "agent": "billing",
  "step": 4,

  "tool_name": "refundOrder",
  "tool_args": { "orderId": "ord_92", "amount": 1200, "reason": "duplicate" },
  "tools_available": ["getOrder", "listOrders", "refundOrder", "voidInvoice"],

  "http": {
    "method": "POST",
    "url": "/v1/orders/ord_92/refund",
    "request_body_hash": "sha256:1f4c...",
    "status": 200,
    "duration_ms": 412,
    "retry_count": 1,
    "idempotency_key": "9f2b7c14-6d3a-4b18"
  },

  "outcome": "success",
  "tokens": { "prompt": 8420, "completion": 96 },
  "policy": { "approval_required": true, "approved_by": "user_31", "dry_run": false }
}

Cinco campos realizam um trabalho desproporcional.

tool_args é o que mais frequentemente falta, e é o que você sempre quer. Registre os argumentos produzidos pelo modelo, antes que seu executor os normalize. Quando um agente envia o ID errado, é aqui que isso é visível.

tools_available explica a seleção. Se o modelo escolheu uma ferramenta estranha, a primeira pergunta é o que mais ele tinha para escolher. Este campo custa alguns bytes e responde instantaneamente.

retry_count separa “a API estava lenta” de “a API falhou duas vezes e depois funcionou”. Sem ele, três tentativas parecem uma única chamada.

outcome deve ser um enum explícito, não algo inferido de um código de status. success (sucesso), failed (falha), timed_out (tempo esgotado), blocked_by_policy (bloqueado por política), rejected_by_human (rejeitado por humano). Os dois últimos são importantes porque uma chamada bloqueada é um mecanismo de segurança funcionando, não um erro, e misturá-los corrompe sua taxa de falha.

policy é sua trilha de auditoria. Quando alguém pergunta se uma ação destrutiva foi aprovada, esta é a resposta. Ele se associa à aplicação descrita em nosso post sobre mecanismos de segurança para agentes de IA.

Registre a decisão, não apenas a ação

Os bugs de agente mais difíceis são escolhas, então registre o suficiente para reconstruí-las.

Mantenha as definições de ferramenta usadas para a execução, ou um hash delas. Quando a precisão da seleção muda, o primeiro suspeito é uma descrição que alguém editou, e um hash informa imediatamente se o conjunto de ferramentas mudou entre uma execução boa e uma ruim. Nosso post sobre design de esquemas de ferramentas cobre por que esse texto altera tanto o comportamento.

Registre o modelo e suas configurações. ID do modelo, temperatura e versão do prompt pertencem ao registro da execução. O comportamento muda entre as versões do modelo, e sem este campo você passará um dia investigando seu próprio código.

Registre o que o modelo viu, ou pelo menos seu tamanho. Um despejo completo do prompt é caro para armazenar e muitas vezes sensível. Uma contagem de tokens mais um hash oferece a maior parte do valor de diagnóstico: uma execução cujo prompt é o dobro do tamanho usual é uma execução onde algo foi anexado que não deveria ter sido.

Registre o resultado bruto da ferramenta antes de aparar. Se o seu executor projeta respostas para baixo antes de entregá-las ao modelo, como em nosso post sobre manter as respostas da ferramenta fora da janela de contexto, armazene a carga útil completa no rastreamento. Caso contrário, você não poderá dizer se os dados estavam faltando ou se você os descartou.

Redija antes de armazenar

Rastreamentos de agentes são incomumente perigosos porque contêm tanto a requisição quanto o raciocínio em torno dela, e os prompts têm o hábito de coletar dados pessoais.

Quatro regras tornam isso gerenciável.

Nunca armazene credenciais. Remova Authorization, chaves de API, cookies e qualquer URL assinado. Registre o identificador da credencial, como um ID de chave, e não o valor. Nosso post sobre chaves de API de privilégio mínimo para agentes aborda por que você quer esse identificador: ele informa qual agente agiu.

Redija na fronteira, não na consulta. Filtrar no momento da leitura significa que o segredo foi gravado em disco, replicado e copiado. Redija no middleware de logging antes que o registro saia do processo.

Faça hash de corpos que você não pode armazenar. Um hash do corpo da requisição ainda permite provar que duas chamadas foram idênticas, o que é a maior parte do que você precisa para investigações de duplicatas, sem manter a carga útil.

Defina a retenção por sensibilidade. Rastreamentos completos por uma semana, resumos redigidos por um ano. A maioria das depurações acontece em dias; a maioria das perguntas de auditoria chega em meses.

Transforme rastreamentos em testes

A recompensa de um bom rastreamento não é apenas uma depuração mais rápida. É um suprimento de casos de teste realistas.

Cada execução falha é um cenário. Pegue as chamadas de ferramenta de um rastreamento ruim, reproduza-as contra sua API, e você terá uma reprodução. Quando a correção for implementada, mantenha a reprodução como um teste de regressão. No Apidog você pode recriar a requisição falha como um caso salvo, afirmar o comportamento corrigido e executá-lo na CI, que é como um incidente pontual se transforma em cobertura permanente.

Rastreamentos também informam o que simular. Os endpoints que seu agente mais chama, e os status de falha que ele realmente encontra, vêm diretamente dos dados em vez de suposições. Construa os mocks em torno deles, seguindo nosso post sobre executar agentes contra mocks em vez de produção.

E eles revelam a lenta deriva que você de outra forma perderia. Acompanhe alguns números por semana: distribuição de seleção de ferramentas, taxa de repetição por endpoint, chamadas por tarefa concluída e a porcentagem de execuções bloqueadas por política. Uma mudança em qualquer um deles é um sinal antes que se torne um incidente. Verificações em nível de contrato, como em nosso guia de teste de contrato de API, capturam a mudança upstream que geralmente a causou.

Três investigações que o rastreamento precisa suportar

**“O agente cobrou o cliente errado.”** Você precisa dos argumentos que o modelo produziu, da URL resolvida e do passo anterior. Nove de dez vezes o ID veio de um resultado de ferramenta anterior que retornou mais de uma correspondência e o modelo escolheu a primeira. O rastreamento mostra o resultado anterior, a ambiguidade e a escolha. Sem tool_args você tem um 200 e um cliente muito insatisfeito.

**“Parou de funcionar na terça-feira.”** Compare uma execução boa e uma execução ruim campo por campo. ID do modelo, hash do conjunto de ferramentas, versão do prompt, tamanho médio da resposta. Algo mudou, e um desses quatro geralmente o nomeia. É por isso que o registro da execução carrega a configuração e não apenas eventos: uma diferença só é possível quando ambos os lados registraram os mesmos campos.

**“Alguém aprovou isso?”** O bloco de política é a resposta completa, e precisa ser escrito no momento da decisão, não reconstruído depois. approval_required (aprovação_requerida), approved_by (aprovado_por) e um timestamp transformam uma conversa tensa em uma consulta.

Observe o que eles têm em comum. Nenhum deles é respondido por “a ferramenta retornou 200”. Todos os três são respondidos por campos que custam quase nada para escrever e são impossíveis de recuperar depois do fato.

Amostragem, e o que nunca amostrar

Rastreamento de fidelidade total em cada execução se torna caro em volume, então as equipes fazem amostragem. Amostre com cuidado, porque o tráfego do agente não é uniforme.

Sempre mantenha cada execução falha, cada execução que atingiu um bloqueio de política e cada execução que contém uma escrita. Essas são as execuções sobre as quais qualquer um perguntará. Amostre as execuções bem-sucedidas somente leitura, pois elas são a maior parte do volume e as menos interessantes individualmente, embora você ainda queira o suficiente delas para calcular seus baselines.

O capítulo do livro de SRE do Google sobre monitoramento de sistemas distribuídos ainda é a declaração mais clara de por que você amostra por sinal em vez de por volume, e o raciocínio se aplica diretamente.

Mantenha o registro da execução mesmo quando você descarta as cargas úteis. Um rastreamento esqueleto com nomes de ferramentas, resultados e durações é pequeno e ainda suporta as quatro métricas acima. As partes caras são os corpos e os prompts, e essas são as partes que você pode descartar primeiro.

Um aviso sobre amostragem de cauda: se você decidir o que manter depois que uma execução termina, certifique-se de que a decisão ocorra depois que o resultado for conhecido. Uma execução que parece boa na etapa três e falha na etapa nove precisa ser retida na íntegra, o que significa armazenar em buffer em vez de descartar à medida que avança.

Onde o rastreamento deve residir

Tudo acima assume que você é o proprietário do armazenamento. Essa é a suposição correta quando o agente é seu próprio serviço chamando suas próprias APIs. É uma má adequação quando os agentes são tempos de execução de codificação em máquinas de desenvolvedores, porque o rastreamento então reside em qualquer terminal que o executou.

Sharkly adota a outra abordagem: o rastreamento de execução é anexado à Tarefa atribuída ao agente. O histórico de execução, o log de execução e o resultado ficam ao lado do objetivo, do status e do thread de comentários onde um humano revisou o trabalho. A diferença prática é a recuperação. “Por que o agente fez isso” se torna uma pergunta que você responde abrindo a tarefa, em vez de encontrar a máquina, a sessão e o histórico.

Isso não substitui o rastreamento descrito aqui, e também não substitui o tempo de execução; Claude Code e Codex ainda fazem o trabalho. O que muda é onde o registro vai parar quando o agente não é um serviço que você implantou.

Monitore quatro números

Rastreamentos só são úteis se alguém os examinar. Estes quatro merecem seu lugar em um painel.

Uma lista de verificação

O objetivo é simples de declarar: quando alguém pergunta por que o agente fez isso, você pode responder a partir do registro em vez de um palpite. Baixe o Apidog para reproduzir as chamadas em um rastreamento e manter as reproduções como testes.

Perguntas frequentes

Pratique o design de API no Apidog

Descubra uma forma mais fácil de construir e usar APIs