TL;DR

LLM-as-a-Judge is a probabilistic evaluator, not a truth source. Use it only for a named construct with bounded evidence, a versioned Judge Contract, human-labeled controls, and a measured error profile. Keep deterministic and human oracles authoritative where they apply. For Pairwise evaluation, map left/right labels back to stable candidate IDs before reconciling swapped runs; otherwise position bias can be recorded as a content winner.

Key Takeaways

  • Choose the evaluator after defining the construct. ROUGE, BLEU, exact checks, execution, human review, and Judge models answer different questions.
  • Version the complete Judge Contract. Dataset, rubric, model, prompt, parser, evidence, sampling, and environment jointly define the measurement.
  • Measure errors by slice. Accuracy or correlation alone can hide false passes on rare critical cases.
  • Swap labels are not candidate identities. Reconcile Pairwise results only after normalizing both runs to immutable candidate IDs.
  • A mitigation is not a proof. Randomization, Judge panels, and structured output can expose or reduce some failures but do not create ground truth.

The Boundary

ROUGE, BLEU, and exact match compare a candidate with a reference under a defined string or token rule. An LLM judge estimates whether a candidate satisfies a rubric. Neither is a universal measure of usefulness, truth, safety, or authorization.

Use the smallest evaluator that answers the question:

Question Appropriate evidence
Did the output contain the required identifier? parser or exact check
Did generated code work? tests, sandbox, security checks
Did a RAG answer cite supported facts? claim/evidence checks plus review
Which response is clearer for a user? blinded human or calibrated judge
Was a refund authorized? server policy and audit state

An evaluator is a measurement instrument. It needs a construct, a protocol, known failure modes, and calibration.

Freeze the Judge Contract

A Judge result is reproducible only when the complete evaluation contract is identifiable. A model name and a rubric paragraph are not enough.

Version these fields with every report:

yaml
judge_contract:
  dataset_revision: "sha256:cases-and-labels"
  slice_schema_revision: "sha256:slice-definitions"
  rubric_revision: "sha256:criteria-and-anchors"
  judge_model: "provider/model@immutable-version"
  judge_prompt_revision: "sha256:prompt"
  parser_revision: "git-commit"
  evidence_policy_revision: "git-commit"
  sampling_revision: "git-commit"
  inference_parameters:
    temperature: 0
    max_output_tokens: 256
  environment_revision: "container-or-lockfile-digest"

Also record candidate artifact IDs, generation prompts, retrieval snapshots, tool results, and run timestamps. Changing any of these fields creates a new measurement series. Do not splice old and new Judge scores into one trend line without a bridge study.

Where ROUGE and BLEU Still Help

Lexical metrics are not obsolete. They are useful when surface overlap is part of the contract:

  • translation regression with comparable references;
  • extractive summarization;
  • keyword or entity extraction;
  • templated outputs;
  • detecting an accidental change in a stable format.

They become weak when a task permits multiple valid phrasings, requires factual verification, or has several quality dimensions. Report them as one slice, not as a complete quality score.

Define the Construct First

Before writing a judge prompt, define:

  1. the user or business outcome;
  2. the evidence the evaluator may use;
  3. required facts or fields;
  4. forbidden claims and actions;
  5. acceptable alternatives;
  6. abstention or escalation behavior;
  7. the authoritative oracle, if one exists.

A rubric should describe observable behavior, not vague “intelligence”:

text
Correctness:
  pass: every material claim is supported by the supplied evidence or an approved source
  fail: any material claim contradicts evidence or invents a source

Instruction following:
  pass: required fields are present and constraints are respected
  fail: a required field is missing or a forbidden action is proposed

Evidence quality:
  pass: each high-impact claim maps to a cited evidence span
  review: evidence is incomplete or the claim is ambiguous

Do not use the rubric as an authorization policy. Server-side policy remains authoritative.

Three Judge Modes

Pointwise

Evaluate one response against a rubric. Use for sampled monitoring and regression slices. It is easy to operationalize but absolute scores drift when the judge or rubric changes.

Pairwise

Compare two responses for the same case. Use for controlled A/B experiments. Pairwise results are relative, not an absolute quality guarantee; randomize order and allow ties.

Reference or Evidence Guided

Compare claims with a reference, source document, expected structure, or execution result. This works best when the reference is not treated as the only valid wording and when unsupported additions are detected separately.

Keep judge instructions and evidence separate from candidate content. Candidate text can contain prompt injection or instructions aimed at the evaluator.

A Safe Output Contract

Ask for a small structured verdict, not hidden chain-of-thought:

json
{
  "verdict": "pass|fail|review",
  "dimensions": {
    "correctness": "pass|fail|review",
    "evidence_support": "pass|fail|review"
  },
  "evidence_ids": ["source-v7#paragraph-12"],
  "failed_claim_ids": ["c2"],
  "reason_codes": ["missing_evidence"]
}

Validate the JSON with a parser, reject unknown values, cap arrays and strings, and treat malformed output as an evaluation error. The orchestration layer, not the model, should emit evaluation_error. A Judge's explanation and self-reported uncertainty are debugging signals, not calibrated probabilities or trusted proof.

Calibrate the Judge

Position and Order

For pairwise tests, randomize A/B order and rerun a sample with the order swapped:

python
from dataclasses import dataclass

@dataclass(frozen=True)
class PairVerdict:
    winner: str  # LEFT, RIGHT, TIE, or REVIEW


def candidate_id(
    verdict: PairVerdict,
    order: tuple[str, str],
) -> str:
    if verdict.winner == "LEFT":
        return order[0]
    if verdict.winner == "RIGHT":
        return order[1]
    if verdict.winner in {"TIE", "REVIEW"}:
        return verdict.winner
    return "EVALUATION_ERROR"


def reconcile(
    first: PairVerdict,
    first_order: tuple[str, str],
    swapped: PairVerdict,
    swapped_order: tuple[str, str],
) -> str:
    first_choice = candidate_id(first, first_order)
    swapped_choice = candidate_id(swapped, swapped_order)
    if "EVALUATION_ERROR" in {first_choice, swapped_choice}:
        return "EVALUATION_ERROR"
    if "REVIEW" in {first_choice, swapped_choice}:
        return "REVIEW"
    if first_choice == swapped_choice:
        return first_choice
    return "REVIEW"


cases = [
    ("A wins both orders", "LEFT", "RIGHT", "candidate-a"),
    ("B wins both orders", "RIGHT", "LEFT", "candidate-b"),
    ("stable tie", "TIE", "TIE", "TIE"),
    ("left-position preference", "LEFT", "LEFT", "REVIEW"),
    ("right-position preference", "RIGHT", "RIGHT", "REVIEW"),
    ("one review", "REVIEW", "RIGHT", "REVIEW"),
    ("malformed verdict", "BROKEN", "RIGHT", "EVALUATION_ERROR"),
]

for name, first_winner, swapped_winner, expected in cases:
    actual = reconcile(
        PairVerdict(first_winner),
        ("candidate-a", "candidate-b"),
        PairVerdict(swapped_winner),
        ("candidate-b", "candidate-a"),
    )
    assert actual == expected, (name, actual, expected)

The immutable candidate ID, not LEFT, RIGHT, A, or B, is the comparison identity. This detects one kind of order sensitivity; it does not eliminate every bias.

Human Anchors and Controls

Maintain a control set with human-reviewed cases covering easy, ambiguous, adversarial, and high-risk examples. Compare Judge decisions with human labels by task slice. Record sample counts and uncertainty intervals, and recalibrate when the model, prompt, rubric, parser, or data distribution changes.

For example, the over-80% agreement reported in the MT-Bench and Chatbot Arena paper belongs to its Judge model, prompts, benchmark, human-vote protocol, and study date. G-Eval's correlations likewise belong to its natural-language-generation tasks and protocol. Neither result is a portable accuracy threshold. The acceptable error depends on harm, reversibility, and the cost of human review.

Report a calibration record rather than one agreement number:

Metric Question it answers
Confusion matrix by class Which human labels does the Judge confuse?
False-pass rate How often does a human-labeled failure pass?
False-fail rate How often does an acceptable case fail?
Review coverage What fraction is escalated instead of forced into pass/fail?
Conditional error after review What error remains among automatically decided cases?
Swap consistency Does Pairwise winner identity survive order reversal?
Slice support How many labeled cases support each language, risk, length, and task result?
Inter-rater record How stable is the human reference process itself?

Accuracy can look high when failures are rare. Correlation can look high while decisions around the release threshold are wrong. Preserve counts and confidence intervals, and inspect critical slices rather than averaging incompatible dimensions.

Biases to Test

  • verbosity and style preference;
  • position and order;
  • self-preference for the judge’s model family;
  • agreement with a reference even when the reference is wrong;
  • sensitivity to formatting or identity cues;
  • refusal to mark insufficient evidence;
  • prompt injection inside candidate or retrieved content.

Blind irrelevant metadata, keep candidate order randomized, and include concise correct answers in the control set.

Rubric order is another input variable. Research on rubric-based judging shows that the position of score descriptions and the order of multiple criteria can change outputs, with direction and mitigation benefit depending on the Judge model and dataset. Randomized or balanced permutations can audit this effect, but detecting or reducing an ordering effect does not prove agreement with the intended construct.

RAG Evaluation

Evaluate retrieval and generation separately:

Dimension Evidence
retrieval relevance judged or labeled relevance of retrieved passages
evidence coverage required claims have supporting spans
faithfulness answer claims do not exceed the supplied evidence
answer correctness claims agree with an approved source or oracle
refusal/abstention unsupported questions are handled safely

Do not ask a judge to use general knowledge when measuring faithfulness. Give it the question, bounded evidence, answer, and claim identifiers. A correct fact unsupported by retrieved context may still be a retrieval failure.

Deterministic and Human Oracles

Use deterministic checks for code execution, schemas, arithmetic, policy decisions, permissions, and side effects. Use human review for ambiguous, high-impact, or novel cases. Use a judge for scalable triage and comparison where its calibration evidence supports the use.

An ensemble does not automatically create truth. Multiple judges can share the same bias. If they disagree, preserve the disagreement or escalate instead of manufacturing a precise average.

Cost, Privacy, and Sampling

Judge input often contains user questions, retrieved documents, and model responses. Before sending it to a provider:

  • minimize and redact personal or confidential data;
  • record purpose, retention, residency, and deletion behavior;
  • hash or surrogate identifiers;
  • cap context and explanation size;
  • avoid storing raw candidate text in default telemetry;
  • distinguish estimated cost from provider billing.

Choose sampling by risk and statistical purpose. A fixed “evaluate every request” or “sample X percent” rule is not universally correct. High-impact cases may require complete metadata and human review, while low-risk traffic may use stratified samples.

CI/CD Release Gates

Version all of the following:

text
task set + data digest + prompt + rubric + judge model
parser + evidence policy + oracle + sampling + environment + report

Use a gate such as:

text
contract checks
  -> deterministic scenarios
  -> replay comparison
  -> abuse and privacy cases
  -> calibrated judge triage
  -> human review of disagreement
  -> cost/latency check
  -> canary and rollback

Gates should express invariants and workload budgets. Do not block a release solely because an arbitrary judge average moved by a fixed amount without uncertainty and slice analysis.

The Judge itself needs a release state:

text
shadow
  -> calibration evidence collected
  -> approved for named dimensions and slices
  -> monitored with human controls
  -> suspended on drift, contract change, or error-budget breach

Approval for English support summaries does not authorize the same Judge for legal advice, another language, tool trajectories, or safety enforcement. Unknown or unsupported slices should produce review, not a confident score.

Common Failure Modes

  • treating a judge score as ground truth;
  • forcing every answer into one reference;
  • asking for hidden reasoning as an audit log;
  • allowing candidate content to control the judge prompt;
  • parsing model JSON without schema validation;
  • comparing models with different prompts, tools, or retrieval context;
  • reconciling swapped Pairwise labels without restoring candidate identity;
  • treating randomized rubric order as proof that position bias is solved;
  • averaging incompatible dimensions into one number;
  • retaining raw evaluation data without deletion and access controls;
  • using ROUGE/BLEU to score factual or policy correctness;
  • using a judge to authorize money movement, access, deletion, or external writes.

Practical Checklist

  • [ ] Define the construct, evidence, acceptable alternatives, and oracle.
  • [ ] Use exact or execution checks when the answer is objectively verifiable.
  • [ ] Keep judge output small, structured, bounded, and schema-validated.
  • [ ] Randomize pair order and include ties and insufficient-evidence outcomes.
  • [ ] Normalize Pairwise labels to immutable candidate IDs before reconciliation.
  • [ ] Calibrate against human control cases by risk and task slice.
  • [ ] Report false-pass, false-fail, review coverage, swap consistency, and slice support.
  • [ ] Test verbosity, self-preference, formatting, identity, and prompt injection bias.
  • [ ] Audit score-option and criterion ordering for rubric-based Judges.
  • [ ] Separate retrieval, evidence support, answer correctness, and safety.
  • [ ] Redact, minimize, sample, retain, and delete evaluation data deliberately.
  • [ ] Version task sets, rubrics, prompts, judges, parsers, oracles, and reports.
  • [ ] Combine judge evidence with abuse tests, cost/latency budgets, approval, canary, and rollback.

Conclusion

LLM-as-a-Judge is useful when it is treated as a calibrated, fallible measurement instrument. ROUGE and BLEU remain valuable for the contracts they actually measure; deterministic and human oracles remain authoritative where they apply. A mature evaluation system makes uncertainty visible, protects evaluation data, and refuses to turn a fluent model verdict into proof of correctness, safety, or permission.

Primary Sources