Capítulo 6 — Observabilidade e Tracing de IA
Sexto post do passeio capítulo a capítulo pelo LLM Primer V: Construindo Aplicações LLM Reais. O capítulo que trata uma consulta de usuário como uma árvore causal, não como log de requisição, e mostra o que tem de ser tracado para que a árvore fique legível.
Por que este capítulo existe
Uma única consulta de usuário num sistema LLM se desdobra numa árvore: uma reescrita de consulta, três chamadas de recuperação contra dois índices, um rerank, uma chamada de planejador, quatro invocações de ferramenta, um summarizer e uma geração final. Colapse essa árvore em "requisição recebida, resposta enviada" e a verdade se perde. Quando o usuário reclama que a resposta estava errada, o time não consegue dizer se a recuperação errou o chunk certo, se o planejador escolheu a ferramenta errada, se a ferramenta devolveu o dado errado ou se o gerador ignorou o que recebeu. O Capítulo 6 reconstrói a observabilidade para esse formato. Tracing distribuído clássico é o substrato; as convenções semânticas de GenAI do OpenTelemetry são a extensão que torna chamadas de modelo cidadãs de primeira classe; métricas específicas de LLM — TTFT, TPOT, custo por chamada, notas de juiz — são o que transforma um trace em algo contra o que o time pode operar.
6.1 De logs de requisição para traces causais
O movimento é de logs planos de requisição para spans aninhados. OpenTelemetry com convenções semânticas de GenAI dá formatos portáveis e neutros de provedor para chamadas de LLM, embeddings, recuperações e invocações de ferramenta. O loop do agente vira um span raiz; cada iteração vira um span filho; cada chamada de LLM, chamada de ferramenta e recuperação se aninha embaixo. Sessões multi-turno viram árvores de árvores, com span links modelando estado compartilhado entre turnos — o resumo do turno três em que o turno sete ainda está se apoiando. O valor aparece na primeira vez que se debuga: "qual chunk o retriever mostrou para essa consulta, e o gerador de fato citou" é uma pergunta que logs planos não conseguem responder sem arqueologia, e vira um único trace para olhar. O formato de span é portável entre vendors porque é o padrão OpenTelemetry, não um formato proprietário, e migrar de LangSmith para Langfuse vira uma mudança de roteamento em vez de uma reescrita.
6.2 As métricas que importam — TTFT, TPOT, custo, qualidade
Latência total não basta. O tempo até o primeiro token (TTFT) domina a velocidade percebida em respostas em streaming — o usuário fica de olho no primeiro caractere, não no último — e o TTFT pertence ao span ao lado da latência total. O tempo por token de saída (TPOT) domina a sensação de respostas longas e é o que o usuário sente quando diz "estava lento para terminar". Custo pertence ao span como atributo de primeira classe, computado no ponto de chamada a partir de uma tabela de preços versionada para que o trace histórico continue verdadeiro mesmo depois de preços mudarem. Sinais de qualidade — um thumbs-down do usuário, uma nota de juiz do pipeline de avaliação, um trigger de fallback do wrapper — se anexam ao trace como atributos, que é como o time correlaciona uma resposta ruim com a chamada específica de modelo e recuperação que a produziu. As métricas são visíveis em dashboards, mas o retorno maior é que elas são consultáveis por trace, para que uma regressão possa ser filtrada por "alto custo, nota baixa de juiz" e o caminho ofensor emerja imediatamente.
6.3 Plataformas e fechando o loop
Quatro plataformas ocupam o cenário atual. LangSmith é a escolha integrada ao LangChain com o menor atrito se o app já está em LangChain. Langfuse é a opção open-source self-hosted que casa com deployments regulados e organizações que precisam que os traces fiquem dentro do perímetro. Arize Phoenix tem análise forte de embeddings e é a ferramenta certa quando a pergunta de diagnóstico é "quais consultas estão caindo na região errada do espaço vetorial". Helicone funciona como proxy na frente da API do provedor, que é a integração de menor toque mas só enxerga a camada de chamada de LLM. A escolha é operacional, não qualitativa — a maior parte delas expõe o mesmo formato central. O trabalho de maior valor é o pipeline de export: traces de feedback negativo, notas baixas de juiz e triggers de fallback viram candidatos a caso de avaliação, curados para o conjunto de eval, guardados pelo próximo release. Esse loop é o que transforma produção num professor para o desenvolvimento.
O que o Capítulo 6 prepara
Traces também são onde incidentes de segurança ficam visíveis. Uma injeção de prompt bem-sucedida parece uma chamada inesperada de ferramenta na árvore do trace. Exfiltração parece um span de recuperação cujo chunk o modelo obedeceu como instrução. Um prompt de sistema vazado aparece como um span de completion cujo texto se sobrepõe improvavelmente ao prompt acima. O Capítulo 7 vira o mesmo substrato de tracing para a disciplina de segurança — o OWASP LLM Top 10 como vocabulário de meados de 2025, a taxonomia injeção direta versus indireta que o vocabulário tenta nomear, e a matriz de mitigação em quatro camadas que impõe o princípio de que autoridade tem de casar com origem de confiança.
Próximo — Capítulo 7: Segurança e Guardrails de LLM. A postura de segurança que responde à pergunta que a camada de tracing acabou de tornar respondível — o que deveria ter acontecido, e quem tinha autoridade para fazer isso acontecer.