IA First · Episódio 6
Avaliar Qualidade de Resposta de IA Sem Ficar Perguntando no Slack: "O Que Vocês Acharam Disso?"
Avaliar resposta de LLM sem achismo: por que BLEU e ROUGE enganam, LLM-as-judge calibrado, golden dataset e teste de regressão de prompt no CI/CD.

Neste artigo · 11 seções
- O problema das métricas clássicas: BLEU, ROUGE e por que elas mentem
- BERTScore e métricas semânticas: melhoria real mas ainda insuficiente
- LLM-as-a-judge: quando o avaliador também é um modelo
- Arquitetura em três camadas: barato, rápido, confiável
- Golden dataset: a base de tudo
- Regression testing: tratando prompt como código
- Ferramentas práticas: o que usar sem construir do zero
- Human-in-the-loop: quando automação não basta
- Como começar amanhã de manhã
- Conclusão: saia do Slack, entre no CI/CD
- Insights & Takeaways
Toda vez que você muda o prompt, troca de modelo ou ajusta parâmetro, a primeira coisa que acontece é alguém postar no Slack: "Pessoal, dá uma olhada nessa resposta. O que acharam?"
Cinco pessoas respondem "parece bom", duas dizem "não sei, depende", uma aponta um erro que só ela viu, e no final você ainda não sabe se pode fazer deploy.
Esse processo quebra em três lugares:
- Não escala: Você não consegue validar 100 outputs manualmente toda vez que muda vírgula no prompt.
- Não é reproduzível: "Parece bom" hoje vira "estranhamente diferente" amanhã, e você não tem baseline para comparar.
- Não pega regressão: Você melhora um caso específico e quebra outros cinco sem perceber.
Se você gerencia time que trabalha com IA em produção, precisa de avaliação automatizada, sistemática e versionada. Esse artigo é sobre como construir isso sem virar projeto de doutorado.
O problema das métricas clássicas: BLEU, ROUGE e por que elas mentem
Primeira tentação: usar métrica "científica" como BLEU ou ROUGE, que vêm de 20 anos de pesquisa em NLP.
BLEU (Bilingual Evaluation Understudy) conta quantos n-gramas (sequências de palavras) aparecem tanto na resposta do modelo quanto na resposta de referência. ROUGE (Recall-Oriented Understudy for Gisting Evaluation) faz coisa parecida, mas otimizada para resumos.
Problema: ambas ignoram completamente significado.
Exemplo concreto:
- Referência: "A capital da França é Paris."
- Modelo A: "A capital da França é Paris."
- Modelo B: "Paris é a capital da França."
- Modelo C: "A capital francesa é Paris."
BLEU dá nota máxima para A, nota mediana para C e nota baixa para B, mesmo que todas três sejam idênticas em significado.
Se você tem múltiplas respostas válidas para a mesma pergunta (o que acontece em 90% dos casos de uso real), BLEU e ROUGE vão penalizar paráfrase legítima.
Pior ainda: você pode enganar BLEU repetindo palavras da referência sem fazer sentido. Score sobe, qualidade desce.
Quando ainda vale usar BLEU/ROUGE:
- Teste rápido de regressão catastrófica (modelo começou a gerar lixo total).
- Casos muito restritos onde formato importa mais que significado (geração de template).
- Baseline histórico para comparar com trabalho anterior que usava a mesma métrica.
Fora disso, você está medindo a coisa errada.
BERTScore e métricas semânticas: melhoria real mas ainda insuficiente
Próximo nível: métricas baseadas em embedding que capturam similaridade semântica em vez de só contar palavras.
BERTScore compara embeddings contextuais de cada token na resposta do modelo com cada token na referência, usando modelo BERT pré-treinado. Isso significa que "carro" e "automóvel" têm score alto de similaridade, mesmo sem overlap de palavra.
Vantagens claras:
- Reconhece paráfrase.
- Captura nuance semântica melhor que n-grams.
- Correlação com julgamento humano é bem maior que BLEU/ROUGE.
Limitações que ainda existem:
- Computacionalmente caro (10-100x mais lento que BLEU).
- Não detecta erro factual (pode dar score alto para frase semanticamente coerente mas factualmente errada).
- Dependente de qualidade da referência (se referência está errada, score não ajuda).
- Varia com versão do BERT usado.
Recomendação prática: Use BLEU/ROUGE como filtro rápido no CI/CD para detectar mudança absurda. Use BERTScore para validação mais profunda em subset importante do test set. Nenhum dos dois substitui validação específica do domínio.
LLM-as-a-judge: quando o avaliador também é um modelo
Aqui entra a virada de jogo: usar outro LLM como juiz da qualidade do primeiro.
Como funciona: Você manda para modelo "juiz" (normalmente GPT-4, Claude Opus ou similar) três coisas:
- A pergunta original do usuário.
- A resposta gerada pelo seu sistema.
- Um rubric de avaliação detalhado.
O juiz retorna score (numérico ou categórico) e explicação do porquê desse score.
Exemplo de prompt de avaliação:
Você é um avaliador de qualidade de respostas de suporte técnico.
Pergunta do usuário: {input}
Resposta do sistema: {output}
Avalie a resposta nos seguintes critérios:
1. Corretude: A informação está factualmente correta? (1-5)
2. Completude: A resposta cobre todos os aspectos da pergunta? (1-5)
3. Clareza: A linguagem é clara e acessível para usuário não técnico? (1-5)
4. Ação: A resposta dá próximo passo claro para o usuário? (sim/não)
Retorne sua avaliação em JSON:
{
"corretude": 4,
"completude": 5,
"clareza": 3,
"acao": true,
"justificativa": "A resposta está correta e completa, mas usa jargão técnico..."
}
Por que isso funciona melhor:
- Captura nuance que métrica estatística não pega (tom, utilidade, alinhamento com política da empresa).
- Adapta para critério específico do seu domínio.
- Escala melhor que revisão humana (roda em batch, reproduzível).
- Dá explicação, não só número, o que ajuda debug.
Limitações que você precisa conhecer:
- Modelo juiz também pode errar, ter viés e alucinar.
- Custo: você está dobrando ou triplicando custo de inferência.
- Latência: adiciona 500ms-2s por avaliação.
- Posição no prompt afeta resultado (apresentar opção A antes de B pode favorecer A).
Como mitigar vieses:
- Use avaliação pairwise com posição randomizada (compare modelo novo vs modelo antigo, depois inverte ordem e compara de novo).
- Rode múltiplas avaliações e faça média.
- Calibre juiz com exemplos anotados por humano antes de confiar cegamente.
- Use DAG (Directed Acyclic Graph) de múltiplos juízes especializados em vez de um juiz genérico.
LLM-as-judge virou método mais popular para avaliar aplicação de IA em 2025-2026 justamente porque equilibra custo, velocidade e qualidade melhor que alternativas.
Arquitetura em três camadas: barato, rápido, confiável
Melhor estratégia não é escolher uma métrica, é combinar três níveis com custo e confiança crescentes.
Camada 1: Métricas determinísticas (milissegundos, custo zero)
- Validação de formato (JSON válido, campos obrigatórios presentes, comprimento dentro do limite).
- Regex e keyword matching (respostas de suporte não podem conter palavra proibida).
- BLEU/ROUGE como smoke test (mudança drástica de score indica problema).
Roda em todo commit, em todo test case, sem custo adicional de modelo.
Camada 2: Métricas semânticas e classificadores leves (50-200ms, custo baixo)
- BERTScore para similaridade com golden answer.
- Classificador de toxicidade, PII, sentimento.
- Embedding similarity (comparar output com cluster esperado de respostas boas).
Roda em subset representativo do test set, em pull request e antes de deploy.
Camada 3: LLM-as-judge (500ms-2s, custo médio/alto)
- Avaliação multidimensional com rubric customizado.
- Comparação pairwise entre versões de prompt ou modelo.
- Validação de raciocínio, groundedness, alignment com política da empresa.
Roda em casos críticos, antes de release para produção, em amostra de tráfego real.
Essa arquitetura te dá velocidade de feedback (camada 1 responde em segundos), confiança técnica (camada 2 pega erro semântico) e validação de negócio (camada 3 avalia critério subjetivo mas importante).
Golden dataset: a base de tudo
Métrica só faz sentido se você tem conjunto de teste representativo.
Golden dataset é coleção curada de entradas, contexto e saídas esperadas que se torna fonte de verdade para medir qualidade.
Características de golden dataset bom:
1. Representativo de produção Extrai casos reais de log de aplicação, cobrindo distribuição verdadeira de perguntas, não só casos fáceis inventados.
2. Diverso Cobre variação de tópico, intenção, dificuldade, idioma, edge cases. Se 10% das perguntas são adversariais, 10% do test set precisa ser adversarial.
3. Com metadados ricos Cada item tem tags: categoria, persona de usuário, dificuldade esperada, critério de sucesso, fonte. Isso permite análise granular: "modelo novo é 5% melhor no geral, mas 15% pior em perguntas técnicas complexas".
4. Versionado e auditável Test set evolui com produto. Você precisa saber qual versão do dataset estava em uso quando rodou avaliação histórica.
5. Limpo de contaminação Garante que exemplos de teste não vazaram para treino do modelo (problema real com modelos fine-tunados).
Como construir:
- Extraia de produção: Amostra aleatória estratificada de interações reais (com PII removido).
- Adicione casos sintéticos: Use LLM para gerar variações controladas de cenários importantes.
- Anote com especialistas: Time de produto, suporte ou domínio específico revisa e marca resposta esperada.
- Promova incrementalmente: Comece com "silver dataset" (sintético ou automático), promova para "gold" conforme humano valida.
Tamanho típico: 100-500 casos para começar, 1000-5000 para sistema maduro. Você não precisa de 100K exemplos, precisa de exemplos certos.
Regression testing: tratando prompt como código
Aqui entra a parte que separa protótipo de produto: teste de regressão automatizado no CI/CD.
O problema: Você melhora prompt para caso específico. Deploy. Três dias depois descobre que quebrou funcionalidade em outro fluxo que ninguém testou.
A solução: Tratar mudança de prompt como mudança de código, com test suite que valida comportamento esperado.
Como funciona na prática:
-
Versionamento de prompt Prompt não vive mais hardcoded no código. Vive em biblioteca versionada (Langfuse, Braintrust, Humanloop, ou até Git com JSON).
-
Test suite em YAML ou código Cada test case define entrada, contexto e critério de sucesso em linguagem natural.
Exemplo:
- name: "Pergunta sobre política de devolução" input: "Posso devolver produto usado?" expected_criteria: - "Deve mencionar prazo de 30 dias" - "Deve explicar condição do produto para devolução" - "Não deve prometer reembolso incondicional" -
Batch evaluation no CI/CD Toda vez que alguém muda prompt ou modelo, pipeline roda test suite inteiro. Cada output passa por LLM-as-judge que verifica se critérios foram atendidos.
-
Gate de deploy Se score médio cai abaixo de threshold, ou se mais de X% de testes falham, build quebra. Igual a teste unitário, mas para comportamento de LLM.
-
Análise de custo e latência Além de qualidade, pipeline checa se novo prompt não explodiu custo (tokens) ou latência.
Ferramentas que fazem isso:
- Promptfoo: CLI open source, define testes em config, roda localmente ou no CI, gera relatório Markdown.
- Braintrust: Plataforma de avaliação com UI, versionamento de prompt, A/B test e scoring automatizado.
- LangSmith: Foco em observabilidade e tracing, com evaluation integrado e replay de traces.
- Confident AI (DeepEval): Framework Python code-first, métricas prontas para RAG, integração com CI/CD.
Escolha depende do workflow. Promptfoo é bom para times que querem CLI e config declarativo. Braintrust e LangSmith são melhores para times que preferem UI e colaboração entre eng e produto. DeepEval é forte para quem quer controle total em Python.
Ferramentas práticas: o que usar sem construir do zero
Você não precisa implementar framework de avaliação na mão. Já tem ecossistema maduro em 2026.
Aqui vai mapa de navegação rápido:
Braintrust (framework-agnostic, foco em evaluation e experiment tracking)
- Melhor para: Times que querem comparar modelos, versões de prompt e configurações com métrica consistente.
- Integra com qualquer LLM via API padrão, não amarra em stack específico.
- UI colaborativa, não-devs conseguem rodar eval e dar feedback.
- Pricing: Free tier generoso, Pro a partir de $100/mês para equipe.
LangSmith (observabilidade e debugging para LangChain e além)
- Melhor para: Times que já usam LangChain ou precisam de tracing profundo de agentes multi-step.
- Tracing end-to-end de cada chamada, com replay e debugging interativo.
- Evaluation com LLM-as-judge, anotação humana e métricas custom.
- Integra via OpenTelemetry, não exige proxy proprietário.
- Pricing: Free até 5K traces/mês, Plus $39/user/mês.
Promptfoo (CLI open source, testes como código)
- Melhor para: Devs que querem eval no CI/CD sem UI pesada, tratando prompt test como unit test.
- Define testes em YAML, roda via CLI, gera HTML report.
- Red teaming e robustness checks embutidos.
- Open source (free), cloud opcional a partir de $50/mês.
Confident AI / DeepEval (Python-first, métricas prontas para RAG)
- Melhor para: Times que trabalham com RAG e querem métricas específicas (groundedness, context relevance, faithfulness).
- Code-first, integra direto em pytest ou CI/CD Python.
- 50+ métricas built-in, incluindo LLM-as-judge pré-configurado.
- Free tier, Pro a partir de $100/mês.
Langfuse (open source, observability e eval)
- Melhor para: Times que querem controle total, deploy on-premise e arquitetura aberta.
- Suporta LLM-as-judge, human annotation e benchmarks custom.
- Pode rodar self-hosted.
Estratégia combinada: Muitos times usam Promptfoo no CI/CD para testes rápidos, Braintrust ou LangSmith para análise profunda e experimentação, e Confident AI para métricas específicas de RAG. Não são excludentes, são complementares.
Human-in-the-loop: quando automação não basta
LLM-as-judge é poderoso, mas não é oráculo.
Casos onde você ainda precisa de humano no loop:
- Critério subjetivo e específico de negócio: Tom de voz, alinhamento com brand, adequação cultural.
- Edge cases críticos: Cenários raros mas de alto risco (legal, saúde, financeiro) onde erro tem consequência real.
- Calibração de juiz: Você precisa de conjunto anotado por humano para validar que LLM-as-judge está alinhado com expectativa real.
- Análise de falha: Quando modelo falha, humano entende por quê melhor que métrica.
Workflow híbrido eficiente:
- Automatização filtra volume (métricas determinísticas + LLM-as-judge rodam em 100% dos casos).
- Sistema flagga casos de baixo score, alta incerteza ou categoria crítica.
- Humano (PM, especialista de domínio, QA) revisa subset flagado.
- Feedback humano volta para refinamento de rubric e retreino de juiz.
Ferramentas como Braintrust, LangSmith e Humanloop têm interface de anotação integrada, permitindo que não-devs revisem outputs e marquem erros diretamente na plataforma.
Isso fecha loop de melhoria contínua: automação escala, humano corrige e refina, automação incorpora aprendizado.
Como começar amanhã de manhã
Avaliar LLM não precisa virar projeto de três meses. Você pode ter sistema básico funcionando em uma semana.
Dia 1: Defina critério de sucesso Liste 3-5 dimensões que importam para seu caso de uso: corretude, completude, tom, groundedness, latência, custo. Transforme cada uma em rubric específico com escala numérica ou categórica.
Dia 2: Monte golden dataset pequeno Extraia 50-100 exemplos reais de produção (ou invente se ainda não tem tráfego). Anote resposta esperada ou critério de aceitação para cada um.
Dia 3: Implemente avaliação determinística Escreva validadores simples: formato, comprimento, presença de campos obrigatórios. Roda em segundos, pega erro estrutural.
Dia 4: Adicione LLM-as-judge Escolha um juiz (GPT-4o ou Claude Sonnet), escreva prompt de avaliação com rubric, rode contra test set. Guarda score e justificativa.
Dia 5: Integre no CI/CD Use Promptfoo, Braintrust ou script Python customizado para rodar eval em cada mudança de prompt. Gate de deploy: se score cai >10%, bloqueia merge.
Semana 2: Refina e expande
- Adiciona mais casos ao test set (alveja 200-300).
- Calibra LLM-as-judge com anotação humana em subset.
- Configura dashboard de métricas ao longo do tempo.
Não precisa ser perfeito dia 1. Começa simples, itera rápido, adiciona sofisticação conforme a dor aumenta.
Conclusão: saia do Slack, entre no CI/CD
Avaliar qualidade de LLM não é luxo, é higiene básica de engenharia.
Se você ainda está perguntando no Slack "o que acharam?", está deixando qualidade de produto dependente de quem viu a mensagem, quando viu e se estava de bom humor.
Sistema automatizado de avaliação te dá:
- Velocidade: Feedback em segundos, não em horas de round-robin no Slack.
- Reprodutibilidade: Mesma mudança avaliada sempre da mesma forma.
- Proteção contra regressão: Melhoria em A não quebra B sem você saber.
- Confiança para iterar: Você muda prompt sabendo que test suite vai pegar se algo explodir.
Não é eliminação de julgamento humano. É escalar julgamento humano via automação onde faz sentido, liberando gente para focar em caso complexo e decisão estratégica.
Se você gerencia time que constrói com IA, evaluation framework é tão importante quanto o modelo em si. Modelo muda, caso de uso evolui, mas processo de validar qualidade é o que te permite fazer isso rápido e com segurança.
Bota métrica no CI/CD antes que "parece bom" vire incidente de produção.
Insights & Takeaways
- BLEU e ROUGE ignoram significado e penalizam paráfrase válida. Use só para smoke test rápido, não como métrica principal.
- LLM-as-a-judge virou padrão para avaliar output de LLM porque captura nuance subjetiva com escala automatizada, mas exige calibração com humano.
- Arquitetura em três camadas (determinístico, semântico, LLM-judge) equilibra velocidade, custo e confiança.
- Golden dataset bem construído (representativo, diverso, com metadados) é fundação de toda avaliação confiável.
- Regression testing de prompt no CI/CD, igual a unit test de código, evita que melhoria em um caso quebre outro sem você saber.


