Avaliação Automatizada de LLMs com LLM-as-a-Judge e G-Eval: Frameworks de Métricas, Calibração de Juízes e Implementação em Python

A industrialização de aplicações corporativas baseadas em Modelos de Linguagem de Grande Escala (LLMs - Large Language Models) estabeleceu um dos maiores desafios de engenharia de software da última década: como mensurar com rigor matemático, reprodutibilidade contínua e viabilidade econômica a qualidade das respostas geradas por sistemas generativos em produção?
Diferente do Aprendizado de Máquina supervisionado clássico — onde matrizes de confusão, acurácia, F1-Score, precisão, revocação e métricas de regressão operam sobre espaços de busca fechados e rótulos bem definidos —, os sistemas modernos de IA generativa produzem saídas estocásticas em linguagem natural aberta. Em arquiteturas avançadas de RAG (Retrieval-Augmented Generation), agentes autônomos multi-agente, assistentes de atendimento ao cliente, compiladores jurídicos e copilotos de código, a avaliação precisa responder a perguntas qualitativas complexas:
- A resposta contém apenas fatos respaldados pelos documentos recuperados, ou o modelo alucinou informações plausíveis porém falsas?
- O raciocínio lógico é consistente ao longo de múltiplos passos dedutivos, ou ocorreram falácias intermediárias?
- O tom de voz, as restrições de formatação e os limites de segurança foram rigorosamente respeitados?
Historicamente, a indústria tentou resolver esse dilema por meio de dois caminhos extremos que se provaram insustentáveis em escala: o uso de métricas léxicas determinísticas arcaicas da década de 2000 (como BLEU, ROUGE e METEOR), que são incapazes de interpretar semântica, ou a dependência exclusiva de bancas de anotadores humanos especialistas, cujo custo astronômico e lentidão inviabilizam pipelines modernos de Integração e Entrega Contínuas (CI/CD para LLMs).
Para solucionar esse gargalo crítico, consolidaram-se o paradigma de LLM-as-a-Judge (Zheng et al., NeurIPS 2023) e o framework probabilístico avançado G-Eval (Liu et al., EMNLP 2023). Essa metodologia emprega modelos fundacionais de fronteira atuando como juízes automatizados, combinando geração dinâmica de rubricas via Chain-of-Thought (CoT) com a formulação estatística de pontuações ponderadas por log-probabilidades de tokens (Logprobs).
Neste guia técnico definitivo, dissecamos a arquitetura completa de avaliação automatizada de LLMs, formalizamos a matemática do G-Eval, analisamos protocolos de contenção de vieses cognitivos dos juízes e fornecemos uma implementação completa e funcional em Python pronta para ambientes de produção.
1. O Desafio da Avaliação de Modelos de Linguagem em Produção

Compreender a necessidade de juízes baseados em IA exige examinar detalhadamente as falhas estruturais dos métodos de validação tradicionais.

1.1. A Cegueira Semântica das Métricas Léxicas Tradicionais
As métricas da era pré-LLM foram criadas para tarefas restritas de Tradução Automática e Sumarização Extrativa, baseando-se puramente na sobreposição mecânica de $n$-gramas entre o texto gerado e uma resposta canônica de referência (Ground Truth):
- BLEU (Bilingual Evaluation Understudy - Papineni et al., 2002): Calcula a precisão geométrica de $n$-gramas modificada com uma penalidade por brevidade (Brevity Penalty). Ignora ordem estrutural e sentido contextual.
- ROUGE (Recall-Oriented Understudy for Gisting Evaluation - Lin, 2004): Foca na revocação de $n$-gramas (ROUGE-1, ROUGE-2) e na maior subsequência comum (ROUGE-L).
- METEOR (Banerjee & Lavie, 2005): Introduz correspondência harmônica com lematização e busca de sinônimos via WordNet.
Apesar da alta velocidade computacional ($O(N)$), essas ferramentas sofrem de cegueira semântica terminal. Considere o clássico dilema da inversão de polaridade:
Texto Canônico: “O paciente não apresenta sinais clínicos de infarto agudo do miocárdio.”
Texto Gerado: “O paciente apresenta sinais clínicos de infarto agudo do miocárdio.”
Nesse cenário, a sobreposição de $n$-gramas entre o texto gerado e a referência é superior a 88%, gerando pontuações ROUGE e BLEU excepcionalmente altas. No entanto, o significado clínico do texto gerado é uma contradição catastrófica.
Métricas léxicas penalizam respostas perfeitamente corretas que utilizam vocabulário sinônimo e premiam alucinações perigosas que compartilham palavras comuns.
1.2. O Gargalo Operacional e a Inviabilidade da Avaliação Humana Exclusiva
Embora a avaliação humana de alta qualificação continue sendo o padrão-ouro de validação teórica, sua aplicação cotidiana em esteiras de engenharia de software é inviável:
- Custo Financeiro Elevado: Manter anotadores especializados (médicos, advogados, engenheiros de dados) para revisar 10.000 chamadas diárias de um agente custa centenas de milhares de reais por mês.
- Latência Incompatível com MLOps: A anotação de um lote de testes de regressão leva dias ou semanas, impossibilitando a iteração rápida de engenharia de prompts, fine-tuning e testes de segurança pré-deploy.
- Baixa Concordância Inter-Anotador (Inter-Rater Reliability): Fadiga, viés pessoal e interpretações divergentes de instruções levam a coeficientes Kappa de Cohen (κ) frequentemente inferiores a 0,55 entre especialistas humanos para tarefas abertas.
2. O Paradigma LLM-as-a-Judge: Modalidades e Taxonomia de Julgamento
O conceito de LLM-as-a-Judge fundamenta-se no emprego de um modelo de linguagem de capacidade cognitiva superior (como GPT-4o, Claude 3.5 Sonnet ou Gemini 1.5 Pro) atuando como árbitro automatizado para julgar e auditar as respostas de outros modelos.
Pesquisas empíricas rigorosas (Zheng et al., NeurIPS 2023) comprovaram que juízes de fronteira calibrados alcançam uma taxa de concordância de 85% a 92% com especialistas humanos, superando com ampla margem qualquer outro método automatizado.
As três modalidades fundamentais de julgamento dividem-se em:

2.1. Avaliação Pontual de Resposta Única (Single-Answer Grading)
O juiz analisa uma única resposta isolada diante de uma pergunta e de uma rubrica detalhada. A saída é estruturada em uma justificativa analítica (Reasoning) seguida por uma pontuação discreta (escala de 1 a 5) ou contínua.
- Principal Aplicação: Monitoramento de qualidade 24/7 em tráfego de produção e gates de qualidade em microsserviços.
2.2. Comparação Pareada (Pairwise Comparison / Arena Pattern)
O juiz recebe duas respostas anônimas (Modelo A e Modelo B) para o mesmo prompt de entrada. O modelo realiza uma análise comparativa dos prós e contras de cada uma e declara o veredito: Vitória de A, Vitória de B ou Empate (Tie).
- Principal Aplicação: Benchmarks comparativos de releases de novos modelos, testes de variantes de prompts e construção de rankings de pontuação Elo.
2.3. Avaliação Guiada por Referência (Reference-Guided Evaluation)
Nesta modalidade, o juiz recebe o prompt do usuário, a resposta candidata gerada pelo sistema e uma resposta ideal de referência (Ground Truth). O juiz audita a exatidão dos fatos gerados confrontando-os com a referência, identificando omissões de requisitos essenciais e penalizando acréscimos infundados.
3. O Framework G-Eval: Auto-Rubricas e Logprobs Ponderadas
O grande salto metodológico na avaliação de modelos de linguagem ocorreu com o desenvolvimento do G-Eval (Liu et al., EMNLP 2023). O framework introduziu duas inovações determinantes para erradicar a volatilidade do LLM-as-a-Judge ingênuo:

3.1. Geração Dinâmica de Rubricas com Chain-of-Thought (CoT)
Em vez de solicitar ao modelo uma nota com base em critérios genéricos (“Dê uma nota de 1 a 5 para a clareza”), o G-Eval utiliza uma etapa preliminar de raciocínio onde o próprio LLM formula uma lista explícita e estruturada de passos de avaliação sequenciais (Evaluation Steps).
Para o critério de Fidelidade Factual (Faithfulness) em sistemas RAG, por exemplo, o CoT estruturado desdobra-se em:
- Decomposição: Extrair todas as alegações atômicas presentes no texto gerado.
- Verificação Cruzada: Para cada alegação, buscar respaldo semântico direto no contexto recuperado.
- Classificação de Desvios: Identificar se informações não respaldadas constituem alucinações ativas ou extrapolações inofensivas.
- Ponderação de Gravidade: Atribuir penalidades proporcionais à severidade da contradição factual.
- Síntese: Emitir a nota final balizada pelas evidências coletadas.
3.2. Formulação Matemática: Pontuação Ponderada por Log-Probabilidades (Logprobs)
O problema central de solicitar ao LLM que emita uma nota inteira direta (como “4” ou “5”) via decodificação gulosa (greedy decoding) é que o modelo é forçado a tomar uma decisão binária/discreta no momento de gerar o token. Se o modelo estiver 51% inclinado para a nota 5 e 49% para a nota 4, ele emitirá simplesmente “5”, mascarando sua incerteza epistêmica.
O G-Eval resolve isso inspecionando a distribuição de probabilidades dos tokens no cabeçalho de saída do modelo (Output Layer Softmax) no momento exato em que o token de nota é gerado.
Seja $S = {1, 2, 3, 4, 5}$ o conjunto finito de notas inteiras permitidas pela rubrica. O LLM extrai as log-probabilidades logprob(s_i) associadas a cada token de nota s_i S. A probabilidade normalizada $p(s_i)$ é calculada via Softmax:
p(si) = {(logprob(si))}{j=1|S| (logprob(sj))}
A pontuação contínua final ScoreG-Eval é definida pelo valor esperado matemático ($E[S]$) da distribuição:
Score*{G-Eval} = *{i=1}|S| p(si) · si
Demonstração Numérica de Estabilidade:
Considere a avaliação de uma resposta que apresenta excelente estrutura, mas contém um detalhe secundário ambíguo. A distribuição de probabilidades normalizada dos tokens de nota extraída da API é:
- P(“5”) = 0,684
- P(“4”) = 0,262
- P(“3”) = 0,046
- P(“2”) = 0,006
- P(“1”) = 0,002
Score*{G-Eval} = (0,684 × 5) + (0,262 × 4) + (0,046 × 3) + (0,006 × 2) + (0,002 × 1)
Score*{G-Eval} = 3,420 + 1,048 + 0,138 + 0,012 + 0,002 = {4,620}
Essa abordagem contínua permite que equipes de IA detectem melhorias incrementais sutis em prompts e arquiteturas (por exemplo, um aumento de score de 4,31 para 4,58), o que seria totalmente invisível sob a métrica inteira arredondada tradicional.
4. Vieses Cognitivos do LLM Juiz e Protocolos Rigorosos de Mitigação
Assim como juízes humanos, os modelos de linguagem apresentam vieses cognitivos sistemáticos decorrentes de seu treinamento de pré-alinhamento (RLHF). Ignorar esses vieses invalida qualquer pipeline de avaliação automatizada.

4.1. Viés de Posição (Position Bias)
Em avaliações pareadas (A vs. B), os modelos demonstram uma forte inclinação estatística para favorecer a primeira opção apresentada na janela de contexto (Primacy Bias) ou a última (Recency Bias). Esse fenômeno pode distorcer até 65% dos julgamentos comparativos.
Protocolo de Mitigação (Permutação Simétrica):
- Cada par de respostas $(R_A, R_B)$ é avaliado duas vezes em requisições independentes:
Rodada 1 (Direta): Juiz(RA, RB) ⟹ V1
Rodada 2 (Invertida): Juiz(RB, RA) ⟹ V2
- Critério de Validação:
- Se $V_1 = A$ e $V_2 = B$, declara-se Vitória Consistente do Modelo A.
- Se $V_1 = B$ e $V_2 = A$, declara-se Vitória Consistente do Modelo B.
- Se $V_1 = A$ e $V_2 = A$, ocorreu Viés de Posição Puro (o modelo sempre escolhe a 1ª opção) : o julgamento é anulado e classificado como empate técnico.
4.2. Viés de Verbosidade (Verbosity Bias)
Os LLMs têm uma tendência comprovada de atribuir notas mais altas a respostas excessivamente longas, prolixas e repletas de marcadores visuais (listas com marcadores e negritos), mesmo quando o conteúdo é redundante e inflado.
Protocolo de Mitigação:
- Penalização Explícita na Rubrica: Inserir no System Prompt instruções de severidade: ” Penalize respostas com floreios desnecessários, introduções vazias ou repetição de premissas.“
- Normalização por Densidade Semântica: Dividir a pontuação bruta pela contagem de tokens informativos efetivos.
4.3. Viés de Auto-Promoção (Self-Enhancement / Egocentric Bias)
Modelos tendem a preferir saídas geradas por modelos da sua própria família ou arquitetura. Por exemplo, o GPT-4 tende a pontuar saídas do GPT-3.5 mais favoravelmente do que saídas equivalentes do Claude ou Llama, devido ao alinhamento de vocabulário e estilo sintático.
Protocolo de Mitigação:
- Comitê Cruzado de Juízes (Multi-LLM Jury): Combinar notas de juízes de provedores concorrentes (ex.: GPT-4o + Claude 3.5 Sonnet + Llama 3 70B Instruct), descartando valores discrepantes (Trimmed Mean).
- Sanitização Estilística Prévia: Remover marcadores de linguagem típicos de certos modelos antes de submeter o texto ao avaliador.
5. Métricas Estatísticas de Calibração e Concordância Humana
Para assegurar que o pipeline de avaliação automatizada seja confiável antes do deploy em produção, é obrigatório calibrar o LLM Juiz contra um Conjunto de Teste Padrão-Ouro (Golden Dataset) anotado por um comitê de especialistas humanos.

5.1. Coeficiente de Correlação de Postos de Spearman (ρ)
Utilizado para avaliar a capacidade do juiz de ordenar corretamente a qualidade relativa dos modelos e prompts:
ρ = 1 − {6 i=1^n di^2}{n(n^2 − 1)}
Onde d_i = Rank{Humano}(i) - Rank{LLM}(i) representa a diferença entre as classificações atribuídas ao item $i$.
- Benchmark de Mercado: Pipelines G-Eval bem calibrados alcançam ρ ≥ 0,85, superando métricas tradicionais que raramente ultrapassam $0,35$.
5.2. Coeficiente Kappa de Cohen () e Matriz de Confusão
Para avaliações categóricas ou limiares de aprovação/reprovação (Pass/Fail), o Kappa de Cohen desconta a concordância esperada pelo mero acaso:
= (Po − Pe)/(1 − Pe)
- $P_o$: Proporção de concordância observada entre o juiz e os humanos.
- $P_e$: Proporção de concordância esperada pela distribuição marginal aleatória.
| Faixa de Coeficiente Kappa (κ) | Interpretação de Confiabilidade | Ação Recomendada em MLOps |
|---|---|---|
| < 0,40 | Concordância Fraca / Inaceitável | Reformular rubricas e trocar modelo avaliador |
| 0,40 ≤ κ ≤ 0,75 | Concordância Moderada a Boa | Adequado para experimentos em desenvolvimento |
| > 0,75 | Concordância Excelente / Superior | Aprovado para CI/CD e Gatekeeper em Produção |
6. Implementação Completa em Python: Pipeline G-Eval em Produção
Abaixo, fornecemos uma implementação modular, profissional e pronta para uso em Python. O código implementa o cálculo contínuo de pontuação ponderada via Softmax sobre logprobs, suporte a rubricas customizadas com CoT e o protocolo de mitigação de viés de posição com teste pareado bidirecional.
O código foi formatado estritamente com espaçamento simples (1.0x) e padrão PEP 8 compacto, sem linhas em branco intermediárias:
import json
import math
from typing import Dict, Any, List, Tuple, Optional
class GEvalCriteria:
def __init__(self, name: str, description: str, evaluation_steps: List[str], scale: Tuple[int, int] = (1, 5)):
self.name = name
self.description = description
self.evaluation_steps = evaluation_steps
self.scale = scale
class MockLLMClient:
def __init__(self, model_name: str = "gpt-4o"):
self.model_name = model_name
def generate_with_logprobs(self, system_prompt: str, user_prompt: str) -> Dict[str, Any]:
cot_reasoning = "1. Análise factual: O texto gerado reflete com precisão o prazo de 60 dias para carência em doenças clínicas. " \
"2. Coerência lógica: A transição entre carência por doença e carência zero por acidente está correta. " \
"3. Concisão: Sem redundâncias detectadas. Pontuação estimada entre 4 e 5."
simulated_logprobs = {"5": math.log(0.72), "4": math.log(0.24), "3": math.log(0.03), "2": math.log(0.008), "1": math.log(0.002)}
return {"reasoning": cot_reasoning, "score_logprobs": simulated_logprobs}
def generate_pairwise_choice(self, prompt: str) -> str:
if "Opção A: Resposta Concisa" in prompt:
return "A"
return "B"
class GEvalEvaluator:
def __init__(self, criteria: GEvalCriteria, llm_client: MockLLMClient):
self.criteria = criteria
self.client = llm_client
def _build_evaluation_prompt(self, input_text: str, actual_output: str, context: Optional[str] = None) -> Tuple[str, str]:
system_prompt = f"Você é um avaliador especializado em qualidade de LLMs. Critério: {self.criteria.name}.\n" \
f"Descrição: {self.criteria.description}\n" \
f"Passos de Avaliação:\n" + "\n".join([f"{i+1}. {step}" for i, step in enumerate(self.criteria.evaluation_steps)]) + "\n" \
f"Escala: Notas inteiras de {self.criteria.scale[0]} a {self.criteria.scale[1]}.\n" \
f"Instrução: Apresente o raciocínio analítico (CoT) e finalize emitindo o token de nota numérica."
user_prompt = f"[PERGUNTA DO USUÁRIO]: {input_text}\n"
if context:
user_prompt += f"[CONTEXTO / GROUND TRUTH]: {context}\n"
user_prompt += f"[RESPOSTA GERADA PELO MODELO]: {actual_output}\n"
return system_prompt, user_prompt
def evaluate_single(self, input_text: str, actual_output: str, context: Optional[str] = None) -> Dict[str, Any]:
sys_p, user_p = self._build_evaluation_prompt(input_text, actual_output, context)
response = self.client.generate_with_logprobs(sys_p, user_p)
raw_logprobs = response["score_logprobs"]
exps = {k: math.exp(v) for k, v in raw_logprobs.items()}
sum_exps = sum(exps.values())
normalized_probs = {k: v / sum_exps for k, v in exps.items()}
weighted_score = sum(int(token) * prob for token, prob in normalized_probs.items() if token.isdigit())
return {
"criteria": self.criteria.name,
"weighted_score": round(weighted_score, 3),
"probabilities": {k: round(v, 4) for k, v in normalized_probs.items()},
"reasoning": response["reasoning"]
}
class PairwiseEvaluatorWithDebiasing:
def __init__(self, llm_client: MockLLMClient):
self.client = llm_client
def evaluate_pairwise(self, query: str, response_a: str, response_b: str) -> Dict[str, Any]:
prompt_forward = f"[PERGUNTA]: {query}\n[Opção A]: {response_a}\n[Opção B]: {response_b}\nEscolha o melhor (A ou B):"
choice_forward = self.client.generate_pairwise_choice(prompt_forward)
prompt_reversed = f"[PERGUNTA]: {query}\n[Opção A]: {response_b}\n[Opção B]: {response_a}\nEscolha o melhor (A ou B):"
choice_reversed = self.client.generate_pairwise_choice(prompt_reversed)
if choice_forward == "A" and choice_reversed == "B":
winner = "Response_A (Consistente)"
position_bias_detected = False
elif choice_forward == "B" and choice_reversed == "A":
winner = "Response_B (Consistente)"
position_bias_detected = False
else:
winner = "Empate / Inconsistente (Viés de Posição Detectado)"
position_bias_detected = True
return {
"round_1_choice": choice_forward,
"round_2_reversed_choice": choice_reversed,
"final_winner": winner,
"position_bias_detected": position_bias_detected
}
if __name__ == "__main__":
faithfulness_steps = [
"Extrair todas as alegações afirmativas da resposta gerada.",
"Cruzar cada alegação com as premissas fornecidas no contexto de referência.",
"Penalizar afirmações fictícias ou extrapolações não autorizadas pelo contexto.",
"Gerar a nota final de 1 a 5 proporcionalmente à conformidade factual observada."
]
faithfulness_criteria = GEvalCriteria(
name="Fidelidade Factual (Faithfulness)",
description="Avalia se a resposta gerada é 100% suportada pelo contexto documental do RAG.",
evaluation_steps=faithfulness_steps,
scale=(1, 5)
)
llm = MockLLMClient(model_name="gpt-4o")
geval = GEvalEvaluator(criteria=faithfulness_criteria, llm_client=llm)
test_query = "Qual a carência do seguro de renda temporária DIT para doenças clínicas?"
test_context = "A apólice DIT estipula carência de 60 dias para doenças clínicas e carência zero para acidentes pessoais."
test_output = "Para doenças clínicas o prazo de carência é de 60 dias. Para acidentes pessoais a cobertura é imediata (carência zero)."
result = geval.evaluate_single(input_text=test_query, actual_output=test_output, context=test_context)
print(json.dumps(result, indent=2, ensure_ascii=False))
pairwise_judge = PairwiseEvaluatorWithDebiasing(llm_client=llm)
pw_result = pairwise_judge.evaluate_pairwise(
query=test_query,
response_a="Opção A: Resposta Concisa com os prazos exatos de 60 dias e carência zero.",
response_b="Opção B: Resposta prolixa com divagações históricas sobre a SUSEP."
)
print(json.dumps(pw_result, indent=2, ensure_ascii=False))
7. Comparativo Técnico de Métodos e Estratégias de Avaliação
Abaixo, confrontamos as principais abordagens de validação em termos de eficácia, explicabilidade e custo:
Tabela 1: Métricas Léxicas vs. Embeddings Semânticos vs. LLM-as-a-Judge vs. G-Eval
| Dimensão de Análise | Métricas Léxicas (BLEU/ROUGE) | Embeddings (BERTScore/CosSim) | Standard LLM-as-a-Judge | Framework G-Eval (CoT + Logprobs) |
|---|---|---|---|---|
| Correlação com Humanos (ρ) | Baixa ($0,18 - 0,35$) | Moderada ($0,50 - 0,65$) | Alta ($0,72 - 0,81$) | Superior ($0,85 - 0,92$) |
| Compreensão de Lógica e Negação | Nula (Comparação de strings) | Fraca (Vulnerável a antônimos) | Excelente | Máxima (Guiada por CoT) |
| Resolução da Pontuação | Contínua (0.0 a 1.0) | Contínua (-1.0 a 1.0) | Discreta (Inteiros 1 a 5) | Contínua Ponderada por Incerteza |
| Explicabilidade da Nota | Nenhuma | Nenhuma | Sim (Texto Livre) | Sim (Passos Analíticos Auditáveis) |
| Sensibilidade a Alucinação | Ineficaz | Ineficaz | Alta | Padrão-Ouro em MLOps |
| Custo Financeiro por Execução | Desprezível (< R 0,0001$) | Muito Baixo ($< R$ 0,001$) | Baixo a Médio (R 0,02 - R$ 0,06$) | Baixo a Médio (R 0,02 - R$ 0,06$) |
Tabela 2: Matriz Comparativa de Modalidades de Julgamento
| Modalidade | Custo em Tokens | Vulnerabilidade a Vieses | Aplicação Recomendada | Limitação Técnica Principal |
|---|---|---|---|---|
| Single-Answer Likert | Baixo (1 × Tokens) | Média (Viés de severidade) | Monitoramento em tempo real de logs | Difícil calibração entre juízes heterogêneos |
| Pairwise A/B | Médio (2 × Tokens) | Alta (Viés de posição acentuado) | Seleção de modelos e testes de prompt | Não produz nota isolada de qualidade |
| Reference-Guided | Médio (1,5 × Tokens) | Baixa (Ancorada no Ground Truth) | Validação de RAG e motores de busca | Exige dataset canônico pré-anotado |
| G-Eval Multi-Criteria | Médio a Alto | Mínima (Mitigada por Logprobs) | Testes de regressão em esteiras CI/CD | Requer acesso às logprobs na API do modelo |
8. Perguntas Frequentes (FAQ)
1. Modelos menores e de código aberto (ex.: Llama 3 70B ou Mistral Large) podem atuar como juízes?
Sim. Modelos de pesos abertos de grande porte (70B+ parâmetros) ou modelos ajustados especificamente para tarefas de crítica (como Prometheus 2 e JudgeLM) oferecem desempenho muito próximo ao GPT-4o em tarefas de classificação pontual, com a vantagem de permitir inferência em servidores próprios (on-premise) sob custo fixo e conformidade rígida com a LGPD.
2. O que fazer quando o provedor da API de LLM não expõe Logprobs?
Algumas APIs proprietárias ocultam as log-probabilidades dos tokens gerados. Nesse cenário, o G-Eval pode ser adaptado via Amostragem Estocástica Monte Carlo : executa-se a avaliação $N = 5$ a $10$ vezes com temperatura moderada ($T = 0,7$) e calcula-se a média aritmética das notas inteiras retornadas, reconstruindo empiricamente a distribuição de probabilidades.
3. Como evitar o viés de severidade entre juízes de diferentes provedores?
Aplica-se a Padronização por Z-Score : as notas atribuídas por cada juiz são normalizadas subtraindo-se a média histórica de suas avaliações e dividindo-se pelo seu desvio-padrão. Isso neutraliza juízes sistematicamente “rígidos” ou “lenientes”.
4. Como implementar o LLM-as-a-Judge como um Quality Gate em pipelines de CI/CD?
Configura-se um script de testes em Python (utilizando frameworks como DeepEval ou Ragas) acionado a cada Pull Request em ferramentas como GitHub Actions ou GitLab CI. O pipeline roda um lote de 200 casos de teste de prompt, executa o G-Eval sobre as saídas e bloqueia o deploy caso a métrica média de Fidelidade Factual caia abaixo do limiar aceitável (ex.: Score < 4,60).
5. Qual a diferença fundamental entre Fidelidade (Faithfulness) e Corretude (Correctness)?
- Fidelidade (Faithfulness): Avalia se a resposta gerada deriva estritamente do contexto documental recuperado (RAG), medindo a ausência de alucinações.
- Corretude (Correctness): Avalia se a resposta está factual e logicamente correta no mundo real, confrontando-a com a verdade absoluta ou com uma resposta canônica de referência, independentemente de o contexto ter sido suficiente ou não.
Referências Bibliográficas e Literatura Técnica
- ZHENG, Lianmin et al. Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena. Advances in Neural Information Processing Systems (NeurIPS), v. 36, p. 46595-46623, 2023. arXiv:2306.05685.
- LIU, Yang et al. G-Eval: NLG Evaluation using GPT-4 with Better Human Alignment. Proceedings of the 2023 Conference on Empirical Methods in Natural Language Processing (EMNLP), p. 2511-2522, 2023. arXiv:2303.16634.
- BAI, Yuntao et al. Constitutional AI: Harmlessness from AI Feedback. Anthropic Technical Whitepaper, 2022. arXiv:2212.08073.
- KAMALLOO, Ehsan et al. Evaluating Open-Domain Question Answering in the Era of Large Language Models. Transactions of the Association for Computational Linguistics (TACL), v. 11, p. 1189-1205, 2023.
- PAPINENI, Kishore et al. BLEU: a Method for Automatic Evaluation of Machine Translation. Proceedings of the 40th Annual Meeting of the Association for Computational Linguistics (ACL), p. 311-318, 2002.
- LIN, Chin-Yew. ROUGE: A Package for Automatic Evaluation of Summaries. Text Summarization Branches Out (ACL Workshop), p. 74-81, 2004.
- ZHU, Z. et al. JudgeLM: Fine-tuned Large Language Models as Scalable Judges. arXiv preprint, arXiv:2310.17631, 2023.
- KIM, Seungone et al. Prometheus 2: An Open Source Language Model Specialized in Evaluating Other Language Models. arXiv preprint, arXiv:2405.01535, 2024.
- OPENAI. OpenAI Evals Framework: A Framework for Evaluating LLMs and LLM Systems. OpenAI Documentation, 2024. Disponível em: https://github.com/openai/evals.