learn-agent-launch-with-phoebe / Builder session 4 of 10
Learn Agent Launch with Phoebe · Builder track · Session 4 of 10

LLM-as-judge: an instrument, or just another opinion

Rung 4 of the grading ladder is the only rung that can score whether a claim is grounded, whether a refusal was a good refusal, or whether an insight follows from the data. It is also the only rung with a published list of things it prefers for reasons that have nothing to do with quality. This session turns a judge from an opinion into an instrument, using the procedure proposed by the same paper that named the biases.

🟡 Builder track AI engineers · ML engineers · technical PMs 45 min
0-3 · Welcome 3-18 · Four biases, four mitigations 18-40 · Build-along: rubric, then calibration 40-45 · Q&A
Part 0

The rung you cannot avoid and cannot trust yet

Session b1 put the LLM judge at rung 4 of the grading ladder, second from the bottom in trustworthiness, and told you to reach for it last. That advice stands. But "last" is not "never" - there are questions no rule and no compiler can settle, and every one of them lands on a judge. The question this session answers is not whether to use one. It is what has to be true before a judge's output is allowed into a launch gate.

Live - presented in session Self-study - read after class Official sources covered
★ What you walk out with today The four documented judge biases and the mitigation each one has, a rubric written to the standard vendors publish rather than to taste, the calibration procedure that produces a number you can quote in a gate, and an honest answer to "how much do you trust this grader" that is a percentage instead of a shrug.
Where this sits in the running case Beacon ships three bots this quarter. The Analyst Bot's answers can be executed, so most of its eval never touches a judge - session b6. The Support Bot and the Insight Bot cannot be executed at all, so the judge is their quality gate, and the calibration number you build today is the thing that makes gate 1 of the launch scorecard mean something in b9.
Part 1 · why rung 4 exists

Three questions nothing cheaper can answer 5 min live

Before defending the judge, be precise about what it is for. A judge is not a general-purpose grader you point at everything. It is the grader of record for a small, specific class of question - the ones where correctness is a property of meaning rather than of a string, a return code or a result set.

Groundedness claims traced to sources A rule can confirm a citation exists. It cannot confirm the citation supports the sentence. Nothing runs, and embeddings rate a confident wrong answer as close. Refusal quality was the no a good no A rule sees the word "cannot" and marks it a refusal. Whether that refusal was warm, specific and offered the escalation path is a judgement, and judgement is rung 4. Does it follow insight from the numbers The chart is legal, the number is right, and the takeaway says "driven by pricing" when nothing in the data mentions pricing. No cheaper rung has an opinion here. Rung 4 is unavoidable, which is exactly why it needs a procedure Rungs 1 to 3 are instruments: they return the same verdict every time and their failure modes are known. Rung 4 returns an opinion from a model with documented preferences about length, position and authorship. What separates an opinion from an instrument is not the model you pick - it is whether you measured its agreement with a human. The cost of rung 4 is not the API bill. It is that an unmeasured judge reports its own preferences as your bot's accuracy, and nothing downstream can tell the difference.
🔍 Click to zoom - the three question types that have nowhere cheaper to go
LiveThe test for "does this actually need a judge"3 min▶

Ask one question of every case in your golden set: is there any machine-checkable consequence of this answer being right? If yes, that consequence is your grader and the judge is a detour.

  • "Is this SQL correct?" has a consequence - the rows it returns. Grade at rung 2, not rung 4.
  • "Did it escalate?" has a consequence - a handoff event in the trace. Grade at rung 1.
  • "Was the refund policy quoted accurately?" has no machine-checkable consequence. The passage says "14 days from delivery" and the answer says "two weeks after it arrives". Rung 4, and no lower.

In practice, running this test over a real golden set moves somewhere between a third and a half of the rows down the ladder, and it should be the first thing you do to any eval you inherit. What survives the test is the set the rest of this session is about.

Part 2 · the four biases

What the judge prefers, for reasons unrelated to quality 7 min live

Zheng et al. measured judge behaviour while building MT-Bench and named four failure modes. The useful thing about that paper is not the list - lists of model weaknesses age badly. It is that the same paper proposed a mitigation for each one, and every mitigation is cheap, mechanical, and something you can wire in this afternoon.

Position bias prefers first or last Swap the two answers and the verdict flips It scores a slot in the prompt, not the answer in it, and one run can never show you. Mitigation: run both orders, keep only the cases where the two verdicts agree. Verbosity bias prefers the longer answer Length reads as effort, and effort reads as quality A padded wrong answer outscores a short right one, so conciseness reads as a regression. Mitigation: few-shot the judge with graded examples, including short correct ones. Self-enhancement prefers its own family A judge favours outputs from its own model If one model writes the answer and grades it, part of the score is simply authorship. Mitigation: grade with a different model from the one under test. Anthropic agrees. Weak at maths poor at grading reasoning It cannot verify a chain it could not have produced On maths and reasoning it grades the confidence of the working, not its correctness. Mitigation: reference-guided grading - hand the judge the worked answer first. All four mitigations come from the paper that named the biases. None needs a bigger judge model, and all four are cheaper than the incident an inflated pass rate lets through.
🔍 Click to zoom - four biases, four mitigations, all from the same source
Real world

Verbosity bias is the one that quietly reverses your roadmap. Session b3 makes conciseness an operational metric: shorter answers are faster to read, cheaper to generate and usually better UX. Now grade those answers with an uncalibrated judge. The trimmed answer loses to the padded one, the quality dashboard dips, and the team concludes the conciseness work made the bot worse. Nothing about the bot got worse. The grader had a preference and nobody had measured it. This is the specific mechanism by which an unmeasured judge does not merely add noise - it points your team in a direction.

Self-studyPosition swapping in practice, and what to do with the leftovers3 min read▶

The mitigation is mechanical: present the pair twice, once in each order, and keep only the verdicts that survive the swap. The implementation is about ten lines.

★ Position-swap harness - keep only consistent verdictsdef verdict(judge, question, answer, reference): a = judge(question, first=answer, second=reference) # returns 1 or 2 b = judge(question, first=reference, second=answer) # returns 1 or 2 if a == 1 and b == 2: return "answer" # wins in both orders if a == 2 and b == 1: return "reference" # loses in both orders return "no_verdict" # order decided it, so the judge had no opinion

The interesting output is not the verdicts. It is the no_verdict pile. That pile is your position-bias rate, measured on your own data rather than quoted from a paper, and it is the single cheapest diagnostic in this session. A large pile means your rubric is not discriminating and no amount of averaging will fix it; those cases need a sharper scale, not more runs.

Do not silently drop them either. Report them: "n = 400, of which 37 had no consistent verdict" is an honest line in a launch document, and it is the kind of line that stops a room from over-reading a pass rate.

Part 3 · calibration

The step that turns an opinion into an instrument 6 min live

Every instrument in a lab has a known error against a reference. That is the entire difference between an instrument and a device that displays numbers. A judge becomes an instrument at exactly the moment you can state its agreement with a human-labelled slice of your own traffic - and not one minute before.

1 · Label by hand Pull 100+ traces from the traffic the judge will grade. Two labellers, reconciled. 2 · Run the judge Same slice, same rubric, both answer orders. Keep verdicts that survive a swap. 3 · Measure agreement Judge verdict against human label, as a percentage. Then list every disagreement. 4 · Name the skew Disagreements never come out random. They cluster: long answers, refusals, one topic. 5 · Fix the rubric Define every scale point. Add few-shot examples of what it got wrong. Force one number. 6 · Re-measure Same slice, new rubric. If agreement did not move, the rubric was not the problem. The target, and where the target comes from MT-Bench found a GPT-4 judge reaching over 80% agreement with human preferences - the same level two human annotators reach with each other. That is the bar: not perfect agreement, but human-parity agreement, measured on your own slice with your own rubric. Below it, the judge is an opinion. At it, it is an instrument. A judge is calibrated for one prompt, one model and one rubric. Change any of the three and the agreement figure you keep quoting belongs to something that no longer exists.
🔍 Click to zoom - six steps, and the human-parity bar they are aiming at

Three numbers recur across the practitioner literature and they are worth memorising as a set, because each one guards a different mistake:

The numberWhat it is forThe mistake it prevents
100+ tracesRead them by hand before you write any rubric. This is error analysis, not gradingWriting a rubric for the failures you imagined instead of the ones you have
100+ labelled examplesThe slice you validate the judge against, drawn from the same trafficQuoting a judge's pass rate with no idea whether the judge is right
Not 100% passA suite everything passes is measuring nothing. Make it harderMistaking an easy eval for a good bot, which no gate downstream can catch
The 100% trap is the one people argue about A 100% pass rate feels like the goal, and on the regression suite it is - that suite is supposed to sit near 100% because every case in it is a bug you already fixed. On the capability suite it is a diagnosis: your set is too easy, and it will keep reading 100% right through the release that breaks things. Session b1 split the two suites for exactly this reason, and this is where the split earns its keep.
LiveWhat the vendors converged on, independently4 min▶

The interesting part of the vendor landscape is not any single product. It is that three organisations designing judge tooling separately arrived at the same three ideas: a bounded scale, an explicit threshold, and a documented notion of how good the grader itself is.

PatternWhere it shows upWhat to copy
Bounded scale, thresholded to pass/failAzure AI Foundry agent evaluators (intent resolution, task adherence, tool-call accuracy, task navigation efficiency) score on 1-5 with a default threshold of 3A graded scale for trending plus a binary for the gate. Do not let a room debate a 3.4
A reason returned with the scoreThe same evaluators return the rationale alongside the numberStore the reason with every verdict. Step 4 of calibration is impossible without it
Autorater calibration against human ratersVertex's rubric-based evaluation frames the grader as an autorater whose agreement with human raters is itself checkedThe vocabulary. "Autorater" makes it obvious the grader is a component with an error rate
Published benchmark targets per evalArize Phoenix ships pre-tested eval templates with precision and F1 figures published for each oneNever adopt a template without asking what it scored on a labelled set. If nobody knows, you are back to step 1

Anthropic's own eval-design guidance lands in the same place from the other direction: use a different model as the grader, define every scale point explicitly, force predictable output so parsing is not a second source of error, and quantify even fuzzy criteria rather than leaving them to the model's taste.

The honest edge: Phoenix ships under Elastic License 2.0 rather than plain open source, and the Azure and Vertex patterns are documented product behaviour rather than peer-reviewed findings. Copy the shape of the design, not the marketing around it.

Demo 1 of 2

Write Beacon's groundedness rubric ★ 10 min · everyone builds

Beacon's Support Bot answers from the help centre. The one thing that must never happen is a fluent, confident, wrong version of the refund window. That is a groundedness failure, it cannot be executed, and it is what a judge is for. Write the rubric now, before you have seen a single score.

Read 20 real traces first, silently, before writing anything. You are looking for the shape of the failures, not counting them. Every rubric written without this step grades the failures its author imagined.

Pick one criterion for this rubric. Groundedness only. The instinct to score helpfulness, tone and grounding on one scale produces a number nobody can act on - if it drops, you cannot tell which of the three moved.

Write out every scale point in observable language, with money and timing called out explicitly, because those are the claims that cost Beacon something. A scale point you cannot apply to a trace in five seconds is not defined yet.

Set the pass threshold inside the rubric, not in the analysis afterwards. Then force the output format so the parsing step cannot introduce its own errors.

Choose a grader model that is not the model under test. Beacon's bot runs on one family, so the judge runs on another. This costs a procurement conversation and removes an entire bias.

★ Beacon groundedness rubric v1 - one criterion, five defined pointsYou are grading ONE support answer against ONE retrieved policy passage. Score GROUNDEDNESS only. Ignore length, style, confidence and tone. 5 - every factual sentence is supported by the passage 4 - all facts supported; one sentence adds harmless framing not in the passage 3 - one unsupported factual sentence, and it is not about money, timing or eligibility 2 - an unsupported factual claim about money, timing or eligibility 1 - the central claim contradicts the passage PASS threshold: 4. Output only the number. No explanation, no punctuation, no other text.
The scale point that does the work is 3 versus 2 Everything above 3 is easy to agree on and everything at 1 is obvious. The whole value of the rubric sits in the line between "unsupported but harmless" and "unsupported and about money" - because that is where human labellers disagree with each other and where the judge will disagree with both. If two of your colleagues cannot apply that line to the same trace and land on the same number, the judge has no chance, and no calibration run will rescue it.
Demo 2 of 2

Calibrate it, then fix what the disagreements tell you ★ 12 min · everyone builds

This is the loop from Part 3, run once, on paper or in code. It takes an afternoon the first time and twenty minutes every time after. The output is a single percentage that you are then allowed to put next to the word "calibrated" in a launch document.

Sample 100+ traces from the same traffic distribution the judge will grade in production. Not the demo set, not the hardest cases, not last week's incidents. The slice has to look like the job.

Label them by hand against your rubric, two people independently, then reconcile the disagreements out loud. Human-human disagreement is your ceiling: a judge cannot beat the consistency of the people who defined the target.

Run the judge on the same slice with the swap harness. Record three things per trace: the score, the returned reason, and whether the verdict survived the swap.

Compute agreement and, more importantly, read the disagreements as a group. They cluster. Sort them by answer length, by category and by whether the answer was a refusal, and the systematic skew becomes visible in about a minute.

Fix the rubric against the cluster you found - usually by adding two few-shot examples that sit exactly on the disputed line - then re-run and re-measure. If agreement did not move, the rubric was not the problem and your labels probably disagree with each other.

★ The measurement, and the part that matters moreagreed = sum(1 for j, h in zip(judge_scores, human_scores) if (j >= 4) == (h >= 4)) agreement = agreed / len(human_scores) # target: >= 0.80, human-parity # The list, not the number, is what you act on: misses = [t for t, j, h in zip(traces, judge_scores, human_scores) if (j >= 4) != (h >= 4)] # Sort them and the skew names itself. misses.sort(key=lambda t: len(t.answer), reverse=True)
Real world

What a first calibration run usually looks like. Agreement comes back somewhere in the sixties, which feels like a disaster and is completely normal. The disagreements sort into two piles: long answers the judge passed and the humans failed (verbosity bias, straight out of the paper), and polite refusals the judge failed and the humans passed (the rubric never said what an abstention scores, so the judge invented a rule). Neither pile needs a better model. The first needs a few-shot example of a long unsupported answer scoring 2; the second needs one more line in the rubric. Second run lands in the low eighties, and that number - not the bot's pass rate - is the one that unlocks the quality gate in b9.

Homework

Try it yourself - this week ◐ 50-60 min total

Source material

Official sources covered

Every framework and figure on this page traces to a primary source - peer-reviewed papers, vendor evaluation documentation and the practitioner canon catalogued in this course's source map. This page covers:

✓Zheng et al. (MT-Bench): position, verbosity and self-enhancement bias, plus weak math and reasoning gradingPart 2 · the four rows of the bias diagram
✓Mitigations proposed in that same paper: position swapping with consistency, few-shot judging, reference-guided gradingPart 2 · one mitigation per bias, none needing a bigger model
✓MT-Bench: a GPT-4 judge reached over 80% agreement with human preferences, equal to human-human agreementPart 3 · the target the calibration loop aims at
✓Practitioner canon: 100+ traces for error analysis, 100+ labelled examples to validate a judge, 100% pass means too easyPart 3 table + Demo 2 · the three numbers as a set
✓Anthropic eval-design guidance: a different model as grader, every scale point defined, predictable output, fuzzy criteria quantifiedDemo 1 · the rubric is written to this standard
✓Azure AI Foundry agent evaluators: 1-5 scales thresholded to pass/fail, default threshold 3, reason returned with the scorePart 3 vendor table · documented product behaviour, not a research finding
◐Vertex rubric-based evaluation and autorater calibration against human ratersNamed for its vocabulary only · no figures quoted
◐Arize Phoenix pre-tested eval templates with published benchmark targets (Elastic License 2.0, not plain OSS)Part 3 vendor table · licence flagged rather than glossed
◐Faithfulness and answer-relevancy formulas the judge is used to computeNot re-derived here · b2 states them, Learn Evals goes deep
Check yourself

Three questions before you go 🎯 ◐ 90 seconds

1 · Your bot and your judge run on the same model family, and the judge reports a high pass rate. What is the specific problem?

Judges have a documented preference for outputs from their own model, so a same-family setup mixes an authorship effect into every score. It is unrecoverable after the run - there is no correction factor to apply, because you never measured how large the effect is on your data. The mitigation is structural and cheap: grade with a different model from the one under test, which is also what Anthropic's eval guidance recommends.

2 · Your judged capability suite has scored 100% for three releases running. How should you read that?

A capability suite exists to find headroom, so a perfect score is a statement about the suite rather than about the bot. It will keep reading 100% straight through a regression, because none of its cases were ever hard enough to fail. The regression suite is the one that is supposed to sit near 100%, since every case in it is a bug you already fixed - which is exactly why b1 insisted the two suites stay separate.

3 · You run every judged comparison in both answer orders. Thirty-seven of 400 cases give a different verdict depending on order. What do you do with them?

A verdict that flips when you swap the order was decided by position, not by the answers, so keeping it in the numerator manufactures signal from noise. But quietly dropping it is worse than useless - the size of that pile is a free, honest diagnostic measured on your own data, and reporting "400 cases, 37 with no consistent verdict" is the line that stops a room over-reading the headline. A large pile means the rubric is not discriminating, which is a rubric fix, not a sampling fix.

Builder session 4 cheat sheet · pin this

Rung 4 is for meaningGroundedness, refusal quality, does-the-insight-follow. If the answer has a machine-checkable consequence, that consequence is your grader instead.
Four documented biasesPosition, verbosity, self-enhancement, weak at maths and reasoning. Named in the MT-Bench work, along with every mitigation.
Swap, then keep the agreersRun both orders, keep consistent verdicts, and report the no-verdict count. That count is your position-bias rate, measured on your data.
Different model as graderNever let the model under test grade itself. Costs a procurement conversation, removes a whole bias.
One criterion per rubricGrounding, tone and helpfulness on one scale gives a number nobody can act on. Split them or you cannot tell what moved.
Define every scale pointObservable language, threshold inside the rubric, output only the number. Parsing errors are a second grader you did not calibrate.
100 / 100 / not 100100+ traces read by hand, 100+ labelled examples to validate the judge, and a capability suite that never scores 100%.
Calibrated means a percentageOver 80% agreement is human-parity. Below that, the judge is an opinion. Recalibrate whenever the prompt, model or rubric changes.