Senior · Core path · 7 chapters
Building a golden dataset
Sourcing from real traffic, hand-labeling, coverage, refresh cadence
A small, carefully sampled human-labeled set exposes regressions that synthetic volume hides, but stale or biased examples can make a failing system look healthy.
Read these first
What you will know
Build an eval set from real production traffic rather than invented examples
Redact sensitive data and preserve the context needed to reproduce failures; otherwise the set is either unsafe or too sanitized to be useful.
Label examples by hand and say how long it took
Record annotation time and ambiguity decisions so future refreshes can be budgeted and inconsistent judgments can be found.
Justify the size of the set — and explain why ~100 good ones beat 10,000 generated ones
The useful quantity is coverage of distinct failure modes and decision boundaries, not raw row count or apparent statistical precision.
Cover the failure modes, not just the happy path
Stratify sampling around rare intents, ambiguous inputs, long contexts, known incidents, and adversarial cases so aggregate scores cannot hide dangerous gaps.
Define a refresh trigger and cadence, then run a refresh
New product behavior, traffic mix, policies, and incidents should force additions before the benchmark becomes a record of an older system.
Chapters
- 1
Model-authored eval sets
Five thousand generated support questions with generated reference answers measure behaviour on clean, single-intent, well-punctuated input, graded against a model's own idea of a good answer. Real traffic brings typos, missing order numbers, mixed languages and three questions in one message. This chapter takes both halves of a generated row apart, and names the jobs synthetic cases genuinely do better than sampled ones.
- 2
Sizing a golden dataset
Extra rows narrow the interval only when they are independent draws from real traffic; near-duplicates buy cost and a false sense of power. This chapter works the design-effect arithmetic on a clustered generated set, reframes size as coverage of distinct failure modes, shows why paired comparison does the job more rows were meant to do, and names the two cases where the answer genuinely is a bigger set.
- 3
Stratified sampling for an eval set
A uniform sample of 200 conversations scoring 0.91 can contain zero instances of a data-exposure bug that hits 0.3% of traffic. This chapter defines slices by intent, customer segment, input shape and known incident pattern, sizes each so it can say something on its own, deliberately oversamples the severe ones, and keeps population weights separate so the single aggregate number is reweighted rather than averaged.
- 4
Frozen context and ground truth
A row in the set is everything needed to re-run the conversation and get the same verdict: the input as the customer sent it, the retrieval context and tool fixtures as they stood at the time, and the ground truth beside them. This chapter separates the three kinds of ground truth — pass/fail label, reference answer, rubric — because the labelling budget cannot be estimated until that choice is made, and explains what the labelling metadata is for.
- 5
Pseudonymising an eval case
Replacing every name, email and order id with [REDACTED] satisfies compliance and makes half the cases unanswerable. This chapter covers substituting realistic, format-valid surrogates consistently across the conversation, the retrieved documents and the tool fixtures, why keyed hashing fails on exactly the cases worth keeping, what the design does and does not buy you legally, and the residue even a good pass leaves behind.
- 6
Adjudicating labeller disagreements
Agreement on 130 of 150 is not the interesting number; the 20 are. This chapter covers running a blind labelling pass, measuring agreement in a form that removes the base rate, adjudicating the disagreements into written rules rather than verdicts, re-labelling the earlier cases each new rule changes, and versioning the set so a sharper definition of a pass is not read as a regression.
- 7
Refreshing a golden dataset
A record 0.93 on a set with no subscription cases describes a product that shipped three months ago. This chapter sets refresh triggers on launches, traffic shifts, policy changes and incidents, shows why a wholesale rebuild destroys every historical comparison, and gives the additive refresh that preserves it: new strata alongside the old cases, a versioned set, a re-baselined previous release, retired cases, and a named owner.
External resources
- Golden dataset evaluation: build and maintain LLM test setslangfuse.com
Sourcing buckets, target sizes and how fast a dataset goes stale.
- A Practical Guide for Evaluating LLMs and LLMarxiv.org
Practical guidance on representative golden datasets: coverage, labeling, synthetic data, decontamination and refresh strategies.
- Building a Golden Dataset for AI Evaluation: A Step-by-Step Guidegetmaxim.ai
Practical sampling, labeling and review loop you can run this week.
- How to Build AI Evals in 2026 (Step-by-Step, No Hype)Aakash Gupta
Shows pulling and curating real production traces into a dataset.
- Build Your First Eval: Creating a Custom LLM Evaluator with a Golden DatasetArize AI
Assembling and labeling a golden set from scratch, then scoring against it