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

Eval anatomy: the four parts of a number you can defend

Every launch argument eventually reduces to one sentence: "it works." This session takes that sentence apart into the four things it must contain to survive a hard question - a set of cases, a way to grade them, a threshold agreed in advance, and an honest interval around the result. You will build the skeleton of Beacon's golden set today, and every later session fills a part of it in.

🟢 Builder track AI engineers · ML engineers · technical PMs 45 min
0-3 · Welcome 3-18 · The four parts + the grading ladder 18-40 · Build-along: Beacon's golden set skeleton 40-45 · Q&A
Part 0

What this course is, and what it is not

This is not a course about eval metrics. Two of its siblings already do that job properly: Learn Evals goes deep on retrieval and generation metrics, and Model Evaluation covers the classic and LLM-era metric canon side by side. This course assumes those exist and asks the one question they leave open: given all these numbers, do you ship?

Live - presented in session Self-study - read after class Official sources covered
★ What you walk out with today The four-part anatomy every defensible eval has, the grading ladder that tells you when a rule beats a judge, the hard line between a capability suite and a regression suite, and the first fifteen rows of Beacon's golden set - written from real failures, not imagination.
The running case: Beacon Beacon is a B2B SaaS company shipping three bots this quarter - a customer-facing support chatbot, an internal text-to-query bot for analysts, and an analytics bot that writes insight summaries for executives. Same company, same eval discipline, three completely different gates. Sessions b5, b6 and b7 gate them one at a time, and b9 runs all three through the launch scorecard.
Part 1 · the anatomy

Four parts, and the failure that comes from skipping each 7 min live

An eval is not a script. It is four separable decisions, and teams usually make three of them well and one of them by accident. The one made by accident is the one that fails in production.

1 The set - which cases you run sampled from real traffic, in real proportions Skip it: you measure the demo, not the bot. The most common failure, and the least visible from inside. 2 The grader - how a case is scored rule, execution, or a judge you calibrated Skip it: an uncalibrated judge grades on length and confidence, and reports its own opinion as accuracy. 3 The threshold - decided BEFORE the run tied to a risk tier, written down, signed Skip it: the bar becomes whatever you scored. Nobody ever failed a gate they set after seeing the result. 4 The interval - the error bar on the result what n examples actually prove Skip it: 19 of 20 reads as 95% and proves 76%. The gap between those two numbers is this whole course. The sentence all four parts assemble into "On 500 cases sampled from December traffic, including a 15% adversarial and unanswerable slice, graded by execution where possible and by a judge calibrated against 120 human labels elsewhere, Beacon's support bot passed 474. That puts true task success at 92.5% or better with 95% confidence, against a T3 bar of 90%." Nobody in that meeting has a follow-up question. That is what a defensible number sounds like. Parts 1 and 2 are engineering. Part 3 is governance. Part 4 is arithmetic - and it is the one almost everybody drops, because a point estimate always looks more decisive than an honest range.
🔍 Click to zoom - four parts, four named failure modes, one defensible sentence
LiveWhere the cases come from: real failures beat imagination4 min▶

Anthropic's engineering guidance on agent evals is blunt about the starting point: begin with 20 to 50 simple tasks drawn from real failures, because early changes have large effect sizes and you do not need statistical power to see them. That advice is about iteration speed, not about launch evidence - and conflating the two is how a 20-case set ends up in a go/no-go deck. Both things are true at once:

  • 20-50 cases is the right size to start improving a bot. You are looking for 30-point swings, and 30-point swings are visible at n=30.
  • 20-50 cases is nowhere near enough to launch on. You are now claiming a 5-point difference from a bar, and that needs an order of magnitude more. Session a4 and b9 do this arithmetic properly.

Where the cases actually come from, in descending order of value: production logs of things that went wrong; support tickets and escalations; the questions your own team asks the bot to check it is alive; and last and least, questions you invented at your desk. Invented questions carry your assumptions about what users ask, which is exactly the bias the eval exists to catch.

Self-studyAnthropic's "volume over quality" principle, and its limit3 min read▶

Anthropic's published eval guidance recommends prioritising volume over quality: many automated lower-signal test cases beat a handful of hand-graded ones. This is correct and counter-intuitive, and it follows directly from the interval math - a noisy grader on 500 cases tells you more than a perfect grader on 20, because the sampling error dominates the grading error at small n.

The limit: it holds for the capability suite, not the safety canary. A 200-case injection suite scored roughly is fine. The eight cases covering "the bot must never issue a refund without approval" are graded exactly, by a person, every time, and must pass at 100%. Volume for the trend, precision for the tripwire.

Part 2 · the grading ladder

Always grade at the cheapest rung that works 6 min live

There is a strict ordering of graders by cost, speed and trustworthiness, and it runs in the opposite direction to how most teams reach for them. Reach for the LLM judge last, not first - it is the most expensive, slowest and least reliable rung, and half the cases you would point it at can be settled by running the output instead.

1 · Rule / exact match free · instant · exact Did it refuse? Did it call the right tool? Is the JSON valid? Does the SQL contain a DROP? Anything a regex or a schema check can settle, settle here. Deterministic, reproducible, and it never has an opinion about length. 2 · Execution cheap · truthful Run the output and compare results. Text-to-SQL execution accuracy, chart code that renders, a patch that makes the failing test pass. If your bot emits anything runnable, this rung is available and you should be on it. 3 · Embedding similarity cheap · fuzzy Cosine similarity to a reference answer, ROUGE-L. Useful as a cheap regression tripwire on phrasing drift. Weak as a correctness signal: a confidently wrong answer sits close to the right one in embedding space. 4 · LLM judge slow · biased · needed The only rung that can score groundedness, tone or whether an insight follows from the data. Also the only rung with documented biases toward long, confident, self-authored answers. Never use it uncalibrated - see b4. 5 · Human label slow · costly · truth The ground truth every other rung is measured against. You do not grade the whole set here - you grade the 100+ cases that calibrate rung 4, plus every safety canary, plus a weekly sample of production traffic. The rule: every case you move DOWN this ladder gets cheaper, faster and more trustworthy at once. Most teams grade at rung 4 out of habit, then wonder why their eval is expensive, slow and argues with itself.
🔍 Click to zoom - five rungs; the cheapest one that settles the case is the right one
Real world

The rung-4 habit costs real money. A common pattern in text-to-query evals is to ask a judge "is this SQL correct?" - a question that is slow, expensive, non-deterministic, and strictly worse than running both queries and comparing the rows. Execution accuracy became the field standard on the BIRD benchmark precisely because exact-string matching rejected valid alternative SQL while a judge was unreliable. The machine-checkable question is almost always available and almost always better; you just have to notice it is there.

Part 3 · the two suites

Capability and regression are different animals 4 min live

One golden set cannot serve both purposes, and merging them produces a suite that is simultaneously too easy to drive improvement and too flaky to block a deploy. Split them on day one.

Capability suiteRegression suite
Question it answersHow good is this bot, and is it getting better?Did we break something we already fixed?
Expected pass rateStarts low. If it is at 100%, it is too easy to be informativeNear 100%, always. Anything else is a bug, not a score
SizeLarge - hundreds, because you are estimating a rateSmall and growing - one case per past incident
Where cases come fromSampled production traffic + an adversarial sliceEvery bug you ever fixed, frozen forever
GradingMixed rungs; a noisy judge is acceptable at volumeDeterministic rungs wherever possible, so the gate is sharp
In CIReported, trended, not blockingBlocking. A red regression suite stops the deploy
RunsNightly or per release candidate - it is expensiveEvery pull request - it must be cheap enough to
Why the blocking suite must be deterministic A per-pull-request gate on 100 cases can only reliably detect a regression of roughly 10 points - the interval is simply too wide at that n to see anything smaller. You cannot fix that by adding cases (too slow for CI), so you fix it by removing noise: make the blocking cases rule-graded and execution-graded, where a failure is a failure and not a judge having an off day. Sharp gate, small n. Session b10 wires this up.
Demo 1 of 2

Beacon's golden set skeleton ★ 14 min · everyone builds

Not a toy exercise. Build the sheet you will actually use for the rest of this course, on a bot you actually own. If you do not have one yet, use Beacon's support bot - the category shares are given below.

Open a sheet with these seven columns: id · category · input · expected behaviour · grading rung · required capability · source. The last column records where the case came from - a ticket number, a log line, a person. Invented cases get marked "invented" and you will see how few of them you trust in a month.

Write your category list first, before any cases. For a support bot, Beacon uses five: straightforward help-centre lookup (30%), answer that must cite policy exactly (20%), multi-turn referring to earlier turns (20%), outside the knowledge base and must escalate (15%), adversarial or injected input (15%). Your percentages should come from a traffic sample, not from a guess.

Now fill fifteen rows - three per category. Take them from real logs if you have them. For each row, write the expected behaviour as an observable outcome ("escalates and does not state a policy") rather than a quality adjective ("handles it well"). If you cannot phrase it observably, you cannot grade it.

For every row, assign the grading rung from Part 2 - and push each one as far down the ladder as it will go. Watch how many rows you initially wrote as "judge" collapse to a rule once you phrase the expectation observably. That collapse is the point of the exercise.

Mark which rows would go in the blocking regression suite versus the capability suite. On a fresh bot this will be almost none - the regression suite is grown from incidents, not written up front. Leave the column; it fills itself in over the next six months.

The trap in step 2 Almost every team writes a category list with no unanswerable and no adversarial cases in it, because those questions feel unfair. They are the two categories that decide whether a bot is safe to launch. A set with no unanswerable questions cannot detect a bot that never says "I do not know" - and that bot will confidently invent a refund policy in week one.
Demo 2 of 2

The first look at the gate you are building toward ★ 8 min · explore

This is the scorecard b9 builds properly. Open it now, once, so the shape of the destination is in your head for the next eight sessions. Switch on Golden set sampled from real traffic and watch what happens to the confidence figure - that single toggle is Part 1 of the anatomy, and it is worth more than every other lever on the board.

Press Ship anyway right now, before touching anything. Read the incident list. Every item in it is a failure mode this course teaches you to catch before it happens rather than after.

Now switch on Golden set sampled from real traffic alone. The confidence figure falls hard. Nothing about the bot changed - you only stopped grading it on questions chosen because it answers them well.

Add Adversarial + unanswerable slice and Judge calibrated vs human labels. It falls further. You now have an honest number for the first time, and it is bad. This is the normal and correct experience of building a first real eval.

Read the honesty rail under the board The per-category pass rates are a teaching model of a bot with realistic failure modes. The statistics are not a model: the confidence figure is a real 95% Wilson interval computed in your browser from the successes and n shown. Session a4 gives you the table to check it against.
Homework

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

Source material

Official sources covered

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

✓Anthropic agent-eval guidance: 20-50 tasks from real failures; capability vs regression suitesPart 1 + Part 3 · the launch-size question is answered in a4 and b9
✓Anthropic grading hierarchy: code/rule → embedding → LLM-based, and "volume over quality"Part 2 · execution rung added from the benchmark literature
✓Execution accuracy as the field standard over exact-set-match (BIRD, Spider)Part 2 · full treatment in b6
◐LLM-judge bias taxonomy and calibration procedureNamed here as the reason rung 4 is last · measured properly in b4
◐Wilson interval arithmetic behind the confidence figure in Demo 2Used here, derived in a4, applied in b9
◐Metric definitions (faithfulness, relevancy, tool-call accuracy) with formulasNot covered by design · b2 summarises, Learn Evals goes deep
Check yourself

Three questions before you go 🎯 ◐ 90 seconds

1 · Anthropic's guidance says to start with 20-50 tasks drawn from real failures. Why is that not the number you launch on?

The two activities have different statistical requirements. Early iteration produces huge effect sizes that are visible at tiny n, which is exactly why starting small is good advice. A launch decision compares your result to a threshold and needs the interval around that result to be narrow enough to clear it - a completely different problem, and the reason 19 of 20 proves only 76%.

2 · Your text-to-query bot's eval asks an LLM judge "is this SQL correct?" What should you do?

This is the rung-4 habit. SQL is runnable, so execution grading is available - and execution grading is free of judge bias, reproducible run to run, and settles the question the judge was only estimating. Execution accuracy displaced both exact-string matching and judging on the field's main text-to-SQL benchmarks for exactly this reason.

3 · Why must the blocking regression suite be graded deterministically rather than by a judge?

You cannot buy sharpness with volume in CI - a per-pull-request suite has to stay fast and cheap, which caps n. So you buy it by eliminating variance in the grader instead. Deterministic rungs mean a red suite is a real regression and never a judge having an off day, which is what makes the gate safe to block on.

Builder session 1 cheat sheet · pin this

The four partsThe set, the grader, the threshold set in advance, the interval around the result. Skipping any one has a named failure mode.
Cases come from failuresProduction logs > tickets > team probes > invented. Mark the invented ones; you will trust them less in a month.
The grading ladderRule → execution → embedding → LLM judge → human. Always grade at the cheapest rung that settles the case.
Runnable output = execution gradingIf it emits SQL, code, JSON or a chart spec, run it. Never ask a judge what a compiler can answer.
Two suites, never oneCapability: large, starts low, trended, non-blocking. Regression: small, near-100%, deterministic, blocks the deploy.
Volume over qualityMany rough automated cases beat few perfect ones - sampling error dominates grading error at small n. Except the safety canary, which is exact.
Observable expectations"Escalates and states no policy" is gradeable. "Handles it well" is not. If you cannot phrase it observably, you cannot grade it.
Threshold before resultNobody ever failed a gate they set after seeing the score. Write it down, seal it, then run.