Diego Souza · AI Engineer

Todos os projetos

Observabilidade de agentes

Ver o que um agente fez sem guardar o que os usuários disseram.

gate de serviços verificado, telemetria de produção pendenteÚltima verificação: 2026-10-29 · Commit afd9b49

Resumo

Problema
Um agente pode repetir, tentar de novo e gastar entre serviços, e as equipes não deveriam precisar coletar prompts para enxergar isso.
Meu papel
Construí a instrumentação, as métricas e o detector de loops.
Stack
Python, OpenTelemetry, Prometheus, Grafana, Jaeger
Resultado
O gate fake de serviços completo passou: 70 tests, service traces, a dashboard and four firing alerts.

Traces OpenTelemetry, logs correlacionados, métricas Prometheus e detecção determinística de loops. A captura de conteúdo vem desligada, e testes provam que o status dos spans não carrega conteúdo. No demo live, é isto que você está vendo.

Veja rodando

O demo ao vivo roda este sistema contra um modelo real e mostra cada passo.

Demo ao vivo

Como funciona

Um trace sem texto do visitanteFluxo: Requisição da API, Span worker.run, Span agent.triage, Chamada ao modelo, Detector de loopsRequisição da APISpan worker.runSpan agent.triageChamada ao modeloDetector de loopsUm trace sem texto do visitanteFluxo: Requisição da API, Span worker.run, Span agent.triage, Chamada ao modelo, Detector de loopsRequisição da APISpan worker.runSpan agent.triageChamada ao modeloDetector de loops

O fluxo inteiro. Aperte tocar ou próximo para percorrer.

Versão em texto deste diagrama
  1. Requisição da API P05. A requisição inicia o trace.
    • depois Span worker.run
  2. Span worker.run P05. O worker continua o mesmo trace a partir do contexto do job.
    • depois Span agent.triage
  3. Span agent.triage P05. Um span em volta dos quatro agentes.
    • depois Chamada ao modelo
  4. Chamada ao modelo P03. Tokens, custo e latência são registrados. O conteúdo não.
    • depois Detector de loops
  5. Detector de loops P03. Um detector determinístico sinaliza ações repetidas.

Decisões

A captura de conteúdo vem desligada

Os spans carregam tempo, status e contagem de tokens. Um teste confere que o status do span nunca carrega conteúdo.

Código: supportops_obs/instrumentation.py

Descartado: Capturar prompts e aparar depois.

A detecção de loops é determinística

Um detector de ação repetida sinaliza loops a partir da sequência de ações, sem modelo no meio.

Código: supportops_obs/loopdetect.py

Descartado: Perguntar a um modelo se o agente travou.

Resultados

Medido

Medido
MétricaValorModoFonte
Gate fake de serviços completo70 tests, service traces, a dashboard and four firing alertsserviços, modelo fake.planning/phases/025-accounted-local-live/VERIFY.mdCommit 83fe067 · 2026-10-29 · Exit code 0

Não medido, então não afirmado

  • Volume e custo de telemetria em produção.
  • Privacidade em toda integração, só nos caminhos que os testes cobrem.

Galeria de falhas

O que aconteceu
O primeiro gate com Docker estourou a espera pelos alertas sintéticos.
Causa
Uma partida a frio demorou mais que a espera configurada. Todos os alertas dispararam depois.
O que mudou
A espera é configurável e foi aumentada sem mudar nenhum limiar.

Valide você mesmo

git clone https://github.com/DiegoVSouza/supportops-observability.git
cd supportops-observability
uv sync --locked --extra dev && uv run --locked python scripts/check_full.py

Esperado: Os testes unitários passam. A parte de serviços precisa de Docker.

O que eu faria diferente

Eu colocaria os limiares do detector de loops no trace como atributos desde o início, para ajustá-los ser visível.

Próximo projeto

Workflows assíncronos duráveis