13 KiB
Catálogo de métricas e KPIs — Runtime de consolidação de artigos
Versão: 1.0
Data: 23 de agosto de 2026
Escopo: runtime; self-healing excluído
Regra mestre: medir somente qualidade, operação, custo e riscos exigidos pelo runtime, sem criar telemetria sem consumidor ou finalidade definida.
1. Objetivo
Definir o que deve ser medido, como interpretar cada indicador, quais dimensões são permitidas e quais gates impedem o go-live ou uma promoção.
2. Princípios
- Invariantes críticas não são compensadas por média alta.
- Métricas de qualidade devem ser segmentadas por idioma, domínio, extrator, modelo e prompt.
- URLs, fingerprints e IDs de execução não devem virar labels de alta cardinalidade; pertencem a traces e logs.
- Custo e latência são instrumentados antes de receber limites numéricos.
- Limites são aprovados com baseline do staging, não inventados.
- O runtime emite sinais objetivos para futura análise de prompt, mas não executa self-healing.
3. KPIs do produto
| KPI | Definição | Meta ou gate |
|---|---|---|
| Publicação fundamentada | Markdown sem texto, URL ou imagem inventada | 100% |
| Aprovação end-to-end textual | Artigos textuais que passam integralmente pela verdade de referência | ≥ 95% |
| Integridade operacional | Artigos sem perda, corrupção ou duplicação | 100% |
| Cobertura de telemetria | Trace enviado ou evento preservado | 100% |
| Custo por Markdown aprovado | Custo LLM total dividido por Markdown aprovado | Limite aprovado após staging |
| Latência end-to-end | Tempo recebido até persistência final | Limites p50/p95/p99 após staging |
4. Invariantes críticas
As seguintes métricas possuem meta zero e bloqueiam promoção quando maiores que zero:
| Métrica lógica | Evento contado |
|---|---|
ungrounded_text_total |
Texto publicado sem origem ou reparo autorizado |
ungrounded_url_total |
URL publicada sem origem |
ungrounded_image_total |
Imagem publicada sem origem |
unauthorized_rewrite_total |
Reparo que resultou em paráfrase ou alteração semântica |
critical_fact_change_total |
Nome, número, data, placar, citação ou fato alterado indevidamente |
duplicate_output_total |
Saída final duplicada para mesmo fingerprint e versões |
lost_article_total |
Entrada validada sem estado terminal rastreável |
secret_exposure_total |
Credencial identificada em log, trace ou saída |
powerful_runtime_model_call_total |
Chamada de modelo potente no runtime |
online_promptfoo_call_total |
Promptfoo acionado pelo runtime |
text_regex_usage_total |
Uso detectado de regex no pipeline textual/assertions |
5. Métricas de volume e resultado
| Métrica lógica | Definição |
|---|---|
article_received_total |
Execuções iniciadas |
article_validated_total |
Entradas que passaram validação |
article_duplicate_total |
Fingerprints já concluídos |
article_completed_text_total |
Markdown produzido |
article_rejected_ecp_total |
Rejeições esperadas pelo ECP |
article_failed_validation_total |
Falhas antes do processamento |
article_failed_processing_total |
Falhas após validação |
Taxas derivadas:
- conclusão textual por artigo validado;
- rejeição ECP por artigo validado;
- falha de validação por artigo recebido;
- falha de processamento por artigo validado;
- duplicidade por artigo recebido.
6. Métricas de entrada
| Métrica lógica | Dimensões de baixa cardinalidade |
|---|---|
input_validation_failure_total |
reason, schema_version |
selected_extractor_total |
extractor |
selected_extractor_unavailable_total |
extractor |
source_language_total |
language |
source_domain_group_total |
domínio controlado ou site cadastrado |
ecp_version_total |
ecp_schema_version |
Domínio bruto de URL não deve virar label sem controle de cardinalidade. URLs individuais permanecem em trace/log.
7. Métricas de higienização
| Métrica lógica | Definição |
|---|---|
hygiene_call_total |
Chamadas lógicas de higienização |
hygiene_schema_failure_total |
Respostas fora do schema |
hygiene_grounding_failure_total |
IDs ou conteúdo sem origem |
hygiene_fallback_total |
Uso de provider fallback |
hygiene_deterministic_fallback_total |
Uso do fallback conservador |
hygiene_terminal_failure_total |
Nenhum resultado seguro |
block_candidate_total |
Blocos disponibilizados |
block_kept_total |
Blocos selecionados |
block_removed_total |
Blocos removidos |
link_kept_total |
Links editoriais mantidos |
image_kept_total |
Imagens editoriais comuns mantidas |
Nos evals:
- precisão de blocos;
- recall de blocos;
- perda material de conteúdo;
- ruído residual;
- precisão de links;
- precisão de imagens;
- acurácia de metadados.
8. Métricas de reparos textuais
| Métrica lógica | Definição |
|---|---|
text_repair_proposed_total |
Reparos propostos pelo LLM |
text_repair_applied_total |
Reparos validados e aplicados |
text_repair_rejected_total |
Reparos descartados |
text_repair_category_total |
Reparos por categoria fechada |
text_repair_ambiguous_target_total |
Fragmento não localizado inequivocamente |
text_repair_sensitive_change_total |
Tentativa de alterar entidade sensível |
Dimensões permitidas:
- etapa ou campo;
- categoria;
- modelo;
- versão do prompt;
- idioma;
- motivo de rejeição.
Texto original e substituição ficam no trace controlado, não em labels.
Gates:
- reparo indevido publicado: zero;
- alteração crítica publicada: zero;
- reparos rejeitados são medidos, não necessariamente erro terminal;
- taxa de rejeição crescente sinaliza necessidade futura de revisão de prompt.
9. Métricas do ECP
| Métrica lógica | Definição |
|---|---|
ecp_classification_total |
Resultado por categoria |
ecp_classification_failure_total |
Falha sem categoria válida |
ecp_pass_total |
Direto ou contextual |
ecp_reject_total |
Tangencial ou não relacionado |
ecp_latency_seconds |
Duração do classificador |
ecp_fallback_tier_total |
Tier usado pelo classificador, quando exposto |
A meta de qualidade intrínseca do classificador é herdada do projeto ECP e não duplicada neste catálogo. O runtime valida apenas integração, contrato, gate e resultado end-to-end.
10. Métricas de enriquecimento
| Métrica lógica | Definição |
|---|---|
sentiment_total |
Distribuição positive/negative/neutral |
tag_count |
Quantidade de tags por artigo |
enrichment_schema_failure_total |
Resposta inválida |
enrichment_grounding_failure_total |
Evidência ou tag sem suporte |
enrichment_fallback_total |
Uso de fallback barato |
enrichment_terminal_failure_total |
Markdown bloqueado por falha final |
Nos evals, medir acurácia de sentimento relativo ao ECP e aceitação das tags conforme verdade de referência.
11. Métricas de LLM
Para cada generation:
- papel lógico;
- provider;
- modelo;
- versão e hash do prompt;
- versão do schema;
- tentativa;
- status;
- tokens de entrada;
- tokens de saída;
- tokens em cache, quando disponíveis;
- custo;
- latência;
- timeout;
- retry;
- fallback;
- resultado de validação.
Métricas agregadas:
| Métrica lógica | Dimensões |
|---|---|
llm_request_total |
logical_call, provider, model, status |
llm_input_tokens_total |
logical_call, provider, model |
llm_output_tokens_total |
logical_call, provider, model |
llm_cost_total |
logical_call, provider, model |
llm_latency_seconds |
logical_call, provider, model |
llm_retry_total |
reason, provider, model |
llm_fallback_total |
logical_call, reason |
llm_output_validation_failure_total |
logical_call, reason, prompt_version |
12. Sinais para futura revisão de prompt
O runtime não diagnostica causa-raiz nem inicia self-healing. Ele registra sinais objetivos que poderão alimentar alertas e análise futura:
| Sinal | Condição objetiva |
|---|---|
prompt_review_signal_total{reason=schema} |
Saída LLM fora do schema |
prompt_review_signal_total{reason=grounding} |
ID, texto ou URL sem origem |
prompt_review_signal_total{reason=repair} |
Reparo rejeitado |
prompt_review_signal_total{reason=fallback} |
Primário exigiu fallback |
prompt_review_signal_total{reason=terminal} |
Primário e fallback falharam |
Dimensões:
- chamada lógica;
- prompt version;
- provider/modelo;
- idioma;
- domínio controlado;
- motivo.
Não existe:
- acionamento automático;
- modelo otimizador;
- judge;
- prompt candidato;
- alerta ativo como requisito deste projeto.
13. Métricas de persistência e idempotência
| Métrica lógica | Definição |
|---|---|
state_transition_total |
Transições por origem/destino |
state_transition_failure_total |
Falhas de persistência |
sqlite_lock_wait_seconds |
Espera por lock |
sqlite_busy_failure_total |
Timeout de lock |
atomic_write_failure_total |
Falhas em temporário/rename/hash |
resume_total |
Execuções retomadas |
idempotent_hit_total |
Resultado já concluído reutilizado |
orphan_temp_file_total |
Temporários órfãos encontrados |
14. Métricas de observabilidade
| Métrica lógica | Meta |
|---|---|
trace_created_total / article_validated_total |
100% enviado ou pendente |
telemetry_send_failure_total |
Medir; não bloquear artigo |
telemetry_pending_total |
Deve retornar a zero após recuperação |
telemetry_flush_failure_total |
Medir e preservar pendência |
trace_content_disabled_total |
Informativa |
trace_redaction_failure_total |
0 |
15. Métricas de capacidade
Medir no staging e produção:
- artigos por hora;
- execuções concorrentes;
- duração total p50/p95/p99;
- duração por estado p50/p95/p99;
- CPU;
- memória;
- crescimento do SQLite;
- uso de disco por saídas e temporários;
- espera por lock;
- falhas por saturação;
- tokens e custo por artigo recebido;
- tokens e custo por Markdown aprovado.
Gate já definido:
- sustentar 100 artigos por hora;
- zero perda;
- zero duplicação;
- zero corrupção.
16. Baseline e definição de SLOs
16.1 Staging
Executar corpus representativo no ambiente equivalente ao de produção, incluindo idiomas, domínios, extratores, estruturas editoriais, ECP, fallback observado e concorrência real.
16.2 Relatório obrigatório
- tamanho e composição do corpus;
- versões de código, prompt, modelo e ECP;
- throughput;
- latência p50/p95/p99 por etapa e total;
- custo p50/p95/p99 por artigo;
- custo por Markdown aprovado;
- taxa de fallback;
- utilização de recursos;
- falhas e outliers.
16.3 Aprovação
Antes do go-live, registrar no runbook:
- limite de custo por artigo;
- limite de custo por Markdown aprovado;
- SLO de latência end-to-end;
- timeouts por provider;
- limite operacional de fallback;
- limites de armazenamento.
Nenhum valor deve ser inserido sem evidência da baseline.
17. Logs estruturados
Campos mínimos:
- timestamp;
- severity;
- ambiente;
run_id;- fingerprint;
- estado;
- evento;
- código de erro;
- chamada lógica;
- provider/modelo;
- prompt version;
- duração;
- retry/fallback;
- trace ID;
- status final.
Campos proibidos:
- API keys;
- headers de autorização;
- secrets;
- ECP integral;
- HTML integral;
- artigo integral por padrão.
Conteúdo necessário para diagnóstico fica no trace conforme política, com possibilidade de desativação.
18. Dashboards mínimos
18.1 Saúde do runtime
- recebidos, concluídos, rejeitados e falhos;
- throughput;
- latência;
- custo;
- providers;
- fallback;
- persistência;
- telemetria pendente.
18.2 Qualidade
- schema e grounding;
- reparos aplicados/rejeitados;
- ECP;
- sentimento e tags;
- resultados por prompt/modelo/idioma/domínio.
18.3 Sinais de revisão futura
prompt_review_signal_totalpor motivo;- falhas após fallback;
- concentração por versão de prompt;
- custo potencial associado aos casos.
O dashboard existe; alertas específicos de self-healing ficam para o subprojeto futuro.
19. Cardinalidade
Podem ser labels:
- ambiente;
- estado;
- código de erro;
- chamada lógica;
- provider;
- modelo;
- prompt version;
- schema version;
- idioma controlado;
- extrator;
- categoria ECP;
- motivo categórico.
Não podem ser labels:
- URL;
- fingerprint;
- run ID;
- trace ID;
- título;
- autor;
- texto;
- tag editorial livre;
- nome livre de domínio não cadastrado.
20. Critério de aceite
O catálogo estará implementado quando:
- todas as invariantes críticas puderem ser medidas;
- KPIs puderem ser calculados por slice;
- Langfuse receber versões, custos, latência e scores;
- logs forem estruturados e sanitizados;
- telemetria pendente puder ser contada e reenviada;
- sinais de revisão de prompt existirem sem acionar self-healing;
- teste de staging produzir baseline completa;
- limites de custo e latência forem aprovados e incorporados ao runbook antes do go-live.