QASenior

AI evaluation

AI evaluation is how you find out whether a model's output is good enough to ship. An evaluation set is a fixed collection of inputs with a way to judge each output, run on every change and reported as rates. Building one is not hard. Building one that tells you the truth is, because two decisions decide everything: which cases are in it, and how each answer is graded. This page is about those two decisions — the ladder of graders from a free exact match to an expensive human, when a model can judge another model, and how to read a number without fooling yourself.

A useful set is
30–100 real failures
Grade at
The lowest rung that works
Report as
Rates, not pass/fail

What goes in the set, and how big it needs to be

The instinct is to build for coverage: a case per feature, a case per category, spread evenly. That produces a set that scores ninety-something per cent from the first day and never moves again, which means it can no longer tell you anything. An evaluation set earns its keep by being concentrated where the system is weak, so its composition should be deliberately unbalanced.

  • Cases from production

    Every complaint, every negative rating, every surprising answer. This is the highest-value source and the only one that keeps growing as the product is used.

  • Cases nobody can get right

    Questions whose answer is not in the source. The expected behaviour is to say so, and this is the category most systems quietly fail.

  • Cases that must never break

    A protected set: refusals, regulated wording, the exact behaviour a customer was promised. Any regression here blocks a release regardless of the average.

  • A few easy ones

    Not for the score — as a canary. When the easy cases start failing, something structural has broken and the interesting numbers are meaningless.

Thirty to fifty cases is a real starting point and a hundred is a mature set for one feature. The value is not in the count — it is in each case being one somebody actually got wrong. And it is worth splitting the set from the start: a working set you look at and iterate against, and a holdout you run less often and never tune towards. Without the holdout you eventually optimise the prompt for the evaluation rather than for the users, and you will not be able to tell that it happened.

The ladder of graders

How an answer is judged matters more than how many answers you judge. There is a clear order to try things in, and the discipline is to climb only when the rung below genuinely cannot settle the question.

Judging an answer is a design decision, and there is a clear order to try things in. At the bottom sit the checks that cost nothing and cannot be argued with: does the output match exactly, does it parse, does it satisfy the schema, is the label one of the four allowed values. One rung up, run code on the answer — recompute the number it quotes, check the cited passage exists in the source document and actually contains the claim, confirm the tool call carried the right arguments. Above that, compare against a reference answer by similarity, which is fast and fuzzy and tells you less than it appears to. Only then reach for another model as a judge, which handles genuinely subjective questions like tone, helpfulness and whether an answer addressed what was asked — at a cost per case, with variance of its own, and needing to be calibrated against human labels before it can be believed. At the top, a person reads it: the slowest, most expensive and most trustworthy grader there is, and the one that has to define what good means before any rung below can be built. Most evaluation sets are graded far higher up this ladder than they need to be, which spends money to convert a fact into an opinion.

The second rung deserves more attention than it usually gets, because it covers far more of a real evaluation set than teams expect. If the answer quotes a number, recompute it and compare. If it cites a passage, check that the passage exists in the source document and actually contains the claim. If it calls a tool, assert the arguments. If it is a summary, check that every named entity in it appears in the input. Each of those is deterministic code, runs in milliseconds, costs nothing, and produces a result nobody can argue with — which is a materially different thing from a score.

Using a model as a judge, properly

A model can grade another model’s output, and it is genuinely useful for subjective criteria at a scale humans cannot reach. It is also a measurement instrument that has to be validated before its readings mean anything, and most teams skip that step entirely.

  • Ask for a binary verdict against a written criterion, not a score out of ten. "Does the answer cite a source for every factual claim — yes or no" is answerable and repeatable; "rate the quality from one to ten" produces sevens and eights forever.
  • Split a rubric into several independent binary checks rather than one holistic judgement. You then know which dimension moved, which is the entire reason for measuring.
  • Give the judge the reference material it needs to be right — the source document, the expected answer, the policy — rather than asking it to know the domain.
  • Watch for position bias when comparing two answers: the same pair judged in the opposite order should give the opposite verdict, and if it does not, run both orders and average.
  • Do not let the model that generated the answer grade the answer. It is measurably kinder to its own output, and you have built an instrument that reports what you hoped.

Then calibrate. Have a person label fifty cases against the same written criterion, run the judge on the same fifty, and measure how often they agree. Below rough agreement the judge is not measuring your criterion and the rubric needs rewriting; at high agreement you can use it at scale and re-check quarterly. Report that agreement number alongside every evaluation result, because a score of 0.86 from an uncalibrated judge is not a measurement — it is a rumour with a decimal point.

Reading the numbers without fooling yourself

An evaluation produces rates, not verdicts, and rates need care. Two questions decide whether a reported difference means anything: how many cases were behind it, and how much the number moves when nothing changes.

A number you can act on

  • Reported per category as well as overall, so you can see which kind of case moved.
  • Measured with each case run several times, so sampling noise is visible rather than assumed away.
  • Compared against a recorded baseline case by case, not just as one aggregate against another.
  • Accompanied by the judge’s agreement with humans, so you know what the instrument is worth.

A number that is lying to you

  • One aggregate percentage from one run, where a two-point move is indistinguishable from noise.
  • Ninety-four per cent on a set built from cases that already passed when it was written.
  • A score that only ever goes up, which means the prompt is being tuned towards the set.
  • A grade from an uncalibrated judge on a rubric nobody wrote down.

Anti-patterns worth naming

  • A set built from cases that already pass, which reports a high number and detects nothing.
  • A single holistic score out of ten from a judge, which averages away the one dimension that broke.
  • No holdout, so the prompt is tuned towards the evaluation until the evaluation stops predicting anything.
  • An unpinned judge model, which quietly re-scales every historical result the next time the provider ships an update.
  • A set that is never grown from production, which describes last quarter’s users and nobody else.

When to use it

Use it when

  • As soon as a feature has a handful of real failures worth remembering — thirty cases beats a platform.
  • With the lowest grader that can settle the question, climbing only when a check genuinely cannot.
  • With a model judge on subjective criteria, calibrated against human labels and reported with its agreement rate.
  • Split into a working set and a holdout, so you can tell tuning apart from improvement.

Avoid it when

  • A model-graded score for anything a schema check, a recomputation or a lookup can settle exactly.
  • Conclusions from one aggregate number from one run, where noise and a real change look identical.
  • A judge with no calibration against human labels, since an uncalibrated instrument reports what you hoped for.
  • Building an evaluation platform before the feature exists, which is process bought instead of information.

Found this useful?

Share it with someone who is working on the same problem.