Como Avaliar Modelos de IA
- ⬜🏗️ Harness: a Infraestrutura do Agente(IA Além do LLM)
Recomendamos completar os pré-requisitos antes de seguir, mas nada te impede de continuar.
“GPT-4 tem 86% no MMLU” — e dai? Essa metrica ajuda a escolher o modelo certo para o seu caso de uso? Provavelmente nao. Neste artigo, voce vai entender os benchmarks que existem, seus limites, e como montar uma avaliacao propria que realmente informa decisoes.
Os benchmarks mais relevantes
| Benchmark | O que mede | Como funciona | Limitacao |
|---|---|---|---|
| MMLU | Conhecimento geral (57 dominios) | Multiple choice: historia, bio, fisica, direito, etc. | Mede reconhecimento, nao raciocinio profundo |
| HumanEval | Geracao de codigo Python | 164 problemas de programacao; mede pass@k | Problemas simples; nao reflete coding real |
| SWE-bench | Resolucao de issues reais | Issues de repos open-source; verifica se patch passa nos testes | Padrao ouro para coding; caro de rodar |
| GPQA | Raciocinio expert-level | Perguntas de PhD em fisica, bio, quimica | Muito dificil; humanos experts acertam ~65% |
| LMArena (Chatbot Arena) | Preferencia humana | Humanos comparam respostas de 2 modelos (blind) | Sujeito a vieses (prefere respostas longas) |
| MATH | Raciocinio matematico | Problemas de competicao matematica | Modelos modernos ja saturam (~90%+) |
| ARC-AGI | Raciocinio abstrato / fluida | Pattern matching visual com regras nao vistas | Controverso; talvez nao mexa o que promete |
Pitfalls de benchmarks publicos
| Pitfall | Exemplo | Impacto |
|---|---|---|
| Benchmark overfitting | Treinar o modelo em dados similares ao benchmark | Score alto no benchmark, performance real mediocre |
| Data contamination | Perguntas do benchmark vazam no dataset de treino | Modelo "decorou" respostas; score inflado |
| Cherry-picking | Empresa reporta so benchmarks onde vai bem | Visao distorcida das capacidades reais |
| Metricas agregadas | Media de 57 dominios esconde que modelo e pessimo em matematica | Decisao baseada em numero que nao reflete seu caso |
| Saturacao | MMLU e HumanEval ja estao >90% para modelos top | Benchmark nao diferencia mais entre modelos top |
Avaliacao propria: o que realmente importa
LLM-as-Judge: automatizando avaliacao
Avaliar 1000 respostas manualmente e impraticavel. LLM-as-Judge usa um modelo forte para avaliar outputs de modelos mais fracos:
# LLM-as-Judge simplificado
import anthropic
client = anthropic.Anthropic()
rubric = """
Avalie a resposta do modelo nos seguintes criterios (1-5):
1. Corretude factual: a resposta esta correta?
2. Relevancia: responde a pergunta feita?
3. Completude: cobre os pontos importantes?
4. Clareza: e clara e bem organizada?
5. Concisao: e concisa sem ser superficial?
Retorne JSON: {"scores": {"corretude": N, ...}, "total": N, "reasoning": "..."}
"""
def evaluate(question: str, answer: str) -> dict:
response = client.messages.create(
model="claude-opus-4-20250514", # juiz forte
max_tokens=1024,
messages=[{
"role": "user",
"content": f"""
{rubric}
Pergunta: {question}
Resposta do modelo: {answer}
"""
}]
)
return parse_json(response.content[0].text)
# Rodar em batch
results_a = [evaluate(q, model_a(q)) for q in test_set]
results_b = [evaluate(q, model_b(q)) for q in test_set]
avg_a = sum(r["total"] for r in results_a) / len(results_a)
avg_b = sum(r["total"] for r in results_b) / len(results_b)| Vies do LLM-as-Judge | Descricao | Mitigacao |
|---|---|---|
| Position bias | Prefere a primeira resposta em comparacoes A vs B | Rodar 2x invertendo a ordem; media dos resultados |
| Verbosity bias | Prefere respostas mais longas mesmo quando menos precisas | Incluir "concisao" como criterio explicito na rubrica |
| Self-favoritism | Modelo prefere outputs do proprio modelo | Usar juiz de familia diferente (Claude julga GPT e vice-versa) |
| Calibracao | Scores absolutos variam entre execucoes | Calibrar contra julgamentos humanos; usar scores relativos (A vs B) |
Metricas especificas por dominio
| Dominio | Metricas | Ferramentas |
|---|---|---|
| RAG | Recall@k, nDCG, faithfulness, relevance | RAGAS, LlamaIndex eval |
| Coding | pass@k, SWE-bench resolve rate, edit accuracy | HumanEval, SWE-bench, custom test suites |
| Chatbot | User satisfaction, resolution rate, escalation rate | LLM-as-judge + metricas de negocio |
| Summarization | ROUGE, BERTScore, faithfulness | ROUGE-L para baseline, LLM-as-judge para qualidade |
| Classification | F1, precision, recall, confusion matrix | sklearn metrics + domain-specific thresholds |
Framework de decisao
📋 Escolhendo modelo para producao
Benchmarks publicos sao triagem rapida (eliminar modelos claramente inferiores). A decisao final SEMPRE deve ser baseada em avaliacao no SEU dominio, com SEUS dados, medindo o que importa PARA VOCE.
Alt: So benchmarks publicos — Aceitavel apenas para prototipacao rapida onde a decisao e reversivel e o custo de errar e baixo.
Eval Harness: pipeline de avaliação profissional
Um eval harness é a infraestrutura que automatiza suas avaliações — rodar os mesmos testes em novos modelos, comparar versões, detectar regressões. Sem harness, avaliação é manual e não-reproduzível.
# Eval harness mínimo em Python
import asyncio
from anthropic import AsyncAnthropic
client = AsyncAnthropic()
async def eval_one(example: dict, model: str) -> dict:
resp = await client.messages.create(
model=model,
max_tokens=1024,
messages=[{"role": "user", "content": example["input"]}]
)
output = resp.content[0].text
score = await score_with_judge(output, example["expected"])
return {"input": example["input"], "output": output,
"expected": example["expected"], "score": score}
async def run_eval(dataset, model):
results = await asyncio.gather(
*[eval_one(ex, model) for ex in dataset]
)
avg = sum(r["score"] for r in results) / len(results)
print(f"{model}: {avg:.2f}/5.0 ({len(results)} exemplos)")
return resultsA/B Testing de modelos em produção
Eval offline garante qualidade em dados históricos. A/B testing valida no contexto real: usuários reais, padrões de uso reais, resultados de negócio reais.
| Aspecto | Eval Offline | A/B Testing |
|---|---|---|
| Quando usar | Antes do deploy — triagem e validação | Após deploy — validação no mundo real |
| Dados | Dataset curado de historico | Requests de produção ao vivo |
| Métrica | Score de rubrica, benchmarks | CTR, resolution rate, satisfação, receita |
| Duração | Minutos a horas | 1-2 semanas (significância estatística) |
| Risco | Nenhum para usuários | Possível impacto negativo no grupo B |
| Custo | Fixo (dataset + compute) | Custo de servir o modelo mais caro simultaneamente |
Perguntas e respostas
❓ Preciso montar eval se so estou prototipando?
❓ Com que frequencia devo reavaliar?
❓ LMArena (Chatbot Arena) e confiavel?
Benchmark vs produção: o que realmente medir
| Contexto | O que medir | Como medir |
|---|---|---|
| Benchmark (pré-escolha) | Triagem rápida: qual modelo não usar | MMLU, SWE-bench, HumanEval + custo/M tokens |
| Eval próprio (pré-deploy) | Qualidade no SEU domínio, com SEUS dados | Rubrica + LLM-as-Judge calibrado em 100+ exemplos |
| Produção (pós-deploy) | Satisfação real, taxa de resolução, escalonamentos | Logs de usuário + feedback explícito + metricas de negócio |
| Monitoramento (contínuo) | Degradação de qualidade, drift de distribuição | Eval automatizado semanal em sample dos requests |
Quiz rápido
4 perguntas · Acerte tudo e ganhe o badge 🎯 Gabarito