R
Interview Deckreact · next.js · senior/staff
0·0·122
IA Avançado

Evals — Avaliação de Sistemas de IA

Como medir qualidade de outputs de LLM: métricas, datasets de avaliação e CI para prompts.

Evals (evaluations) são testes para sistemas de IA — o equivalente a testes unitários para prompts e pipelines RAG. Tipos: Automated evals (LLM-as-judge, métricas como BLEU/ROUGE), Human evals (golden dataset com respostas esperadas), e Behavioral evals (testar que o modelo não faz X). Sem evals, você não sabe se uma mudança de prompt melhorou ou piorou o sistema.

Problema
Mudar o system prompt e não saber se melhorou. Deploy de nova versão do modelo e não perceber regressões. RAG que funciona nos testes manuais mas falha em edge cases de produção.
Solução
Golden dataset: 50-200 pares pergunta/resposta esperada. LLM-as-judge: usar GPT-4/Claude para avaliar qualidade das respostas em escala (faithfulness, relevância). CI para prompts: rodar evals em cada mudança de prompt, assim como testes unitários rodam em cada commit. Frameworks: RAGAS, Braintrust, LangSmith, PromptFoo.
Tip
LLM-as-judge é poderoso mas tem vieses: tende a preferir respostas mais longas e do mesmo modelo que o gerou. Sempre inclua alguns evals determinísticos (exact match, contains string) junto com LLM-as-judge. E sempre teste em prod com shadow traffic antes de trocar o prompt.
// PromptFoo config — eval como CI
// promptfooconfig.yaml
prompts:
  - file://system_prompt_v2.txt

providers:
  - openai:gpt-4o
  - anthropic:claude-opus-4-5

tests:
  - description: "Responde sobre autenticação JWT"
    vars:
      question: "Como funciona o refresh token?"
    assert:
      - type: llm-rubric
        value: "A resposta menciona expiração e rotação do token"
      - type: not-contains
        value: "Não sei"

  - description: "Não alucina sobre dados não fornecidos"
    vars:
      question: "Qual o salário médio na empresa X?"
      context: "A empresa X foi fundada em 2020."
    assert:
      - type: llm-rubric
        value: "A resposta admite não ter informação sobre salário"
      - type: factuality
        value: "A empresa foi fundada em 2020"

// Rodar: promptfoo eval --no-cache
// Output: tabela com scores por test case + provider
Q.O que é LLM-as-judge?
A.Usar um LLM (geralmente GPT-4 ou Claude) para avaliar outputs de outro LLM. Exemplo: dar ao GPT-4 a pergunta, a resposta gerada, e o contexto RAG, e pedir uma nota de 1-5 para faithfulness (resposta é suportada pelo contexto?). Escala melhor que avaliação humana. Limitações: viés do avaliador, custo, não substitui avaliação humana para casos críticos.
Q.Como criar um golden dataset?
A.Coletar 50-200 queries reais de produção (ou sintéticas para começar). Para cada query, documentar a resposta ideal (human-curated). Incluir edge cases: queries ambíguas, perguntas sem resposta no contexto, perguntas adversariais. Revisar periodicamente — o golden dataset deve evoluir com o produto.
Q.Como integrar evals ao CI/CD?
A.PromptFoo ou Braintrust: definir test cases em YAML, rodar `promptfoo eval` no CI. Criar thresholds: se faithfulness < 0.8 ou answer_relevancy < 0.75, o CI falha. Fazer diff de scores entre a versão atual e a nova — regressão de >5% é blocker. Rodar evals em PR de mudança de prompt, não só no merge.
90/122← →