Garbage golden set, garbage score
In b1 we trusted the twelve golden questions without asking where they came from. That trust is exactly what today interrogates. A golden set is the ground truth your whole eval stands on, and it is the single easiest thing to get quietly wrong. This session gives you the four qualities of a set worth trusting, shows you how to scale one with synthetic generation, and drills the discipline that keeps generation honest: a human curates before the numbers get believed.
The four qualities of a golden set worth trusting 10 min live
A golden example is small: a question, the reference answer you would accept, and optionally the reference context (the chunk that should support it). The craft is not in any single row - it is in the shape of the whole set. Four qualities separate a set that measures reality from one that flatters your system.
LiveRight size: volume over per-item polish3 min▶
The instinct is to hand-craft a handful of perfect questions. The better instinct, at least once you are automating the grade, is more questions at slightly lower per-item polish.
- Anthropic's guidance is blunt about this. Prioritize volume over quality: more questions with slightly lower-signal automated grading beats fewer, hand-graded ones. Coverage catches more regressions than polish does.
- Statistics needs a denominator. A Hit Rate over twelve questions swings wildly when one flips. Over a hundred, one flip barely moves the number - and you can actually tell whether a change helped.
- Automated grading is what makes volume affordable. If every item needs a human to grade, you cap out fast. Structure for machine grading (Part 2, quality 4) and volume stops being expensive.
LiveDiversity: mirror the real task distribution3 min▶
A set that over-represents easy questions gives a high score that means nothing in production. The mix of your golden set should look like the mix of questions your system actually gets.
- Mirror the real-world task distribution. If a third of Recall's real traffic is Jira incident lookups (corpus B), roughly a third of the golden set should be too. Match topics, phrasings, and difficulty to reality.
- Sample from real logs when you have them. The truest distribution is the one your users already produced. Pull real queries, strip anything sensitive, and let them seed the set.
- Cover all three corpora. Recall spans personal notes (A), Jira incidents (B), and the company KB (C). A golden set that ignores one corpus cannot catch a regression that only hits that corpus.
LiveEdge cases, including the deliberately ambiguous4 min▶
The average question is not where systems break. Dedicate part of the set to the hard tail on purpose.
- Reserve cases for edge behavior. Empty results, questions spanning two corpora, near-duplicate chunks, out-of-scope questions the system should decline - these are where scores should drop, and where you want to know.
- Include ambiguous cases where even humans would struggle to reach consensus. Anthropic recommends this deliberately: a question with no single clean answer stress-tests how your system and your grader handle genuine uncertainty.
- Label edge cases so you can slice. Tag them, so you can report the score on the hard tail separately from the easy body. A flat average hides a system that aces the easy and fails the hard.
LiveStructure for automated grading3 min▶
The final quality is mechanical but decisive: the set has to be gradeable by a machine, or volume and CI are both off the table.
- Pick a grading mode per item. Multiple-choice (exact option match), string match (expected substring or id), code-graded (a function checks the output), or LLM-graded (a model judges against a rubric). Retrieval golden sets are usually string/id match - cheap and deterministic.
- Make the expected field unambiguous. For Recall's retriever the expected field is a chunk id (like C-refund), not free text - so grading is a set membership check, not a fuzzy comparison.
- Save the hardest grading for last. LLM-graded items are powerful but pricey and need their own validation (that is b5 and b6). Start with the cheap deterministic modes wherever the task allows.
Synthetic vs curated: generate, then curate 8 min live
Writing a hundred golden questions by hand is slow. The modern move is to let an LLM draft candidates from your own documents, then have a human curate: keep the good, fix the salvageable, cut the rest. Generation gives you volume; curation gives you trust. You need both.
Self-studyA simple prompt-based generator4 min read▶
The core idea is small: hand the model a chunk, ask it for questions a real user would ask that this chunk answers, and get back the expected answer and the source id along with each question. Here is a minimal generator over Recall's corpora.
Self-studyRAGAS testset generation3 min read▶
When you want more than a per-chunk prompt, RAGAS automates the whole thing. It builds a knowledge graph from your documents, then generates a mix of question types so the set is not all one shape.
- Knowledge graph first. RAGAS builds a graph from your docs and uses it to write questions that need one chunk (single-hop) or several (multi-hop).
- A deliberate mix. The default query distribution is roughly half single-hop and half multi-hop, split between abstract and specific multi-hop questions - so your set exercises both simple lookups and reasoning across chunks.
- testset_size is yours to set. Ask for 60 or 600. Then - same rule - curate before you trust the numbers it produces.
Self-studyValidate the generator against humans2 min read▶
OpenAI's guidance on evals is consistent on one point: an LLM can generate synthetic eval data and even grade it, but you validate that generated set (or model-graded eval) against human judgment before you trust it at scale.
- Sample and check. Have a human review a random slice of the generated set. If the answers or expected ids are wrong too often, the whole set is suspect - fix the prompt or the source, do not paper over it with volume.
- Agreement is the gate. Only once a human agrees with the generator on a good sample should you scale generation up and lean on the numbers. Trust is earned per set, not assumed.
- This applies double to LLM graders. The same validate-against-humans rule governs the model-graded metrics in b5 and b6, where the model is not just writing questions but scoring answers.
The seed set, scored again ★ 5 min live
Here is Recall's original twelve-question seed set from b1, scored live. As you read the table, treat it as the set under review: which questions are too easy, which corpus is thin, where is the ambiguous case that should be here and is not? That reading is the work of this session.
Live★ Review the seed set as data4 min▶
Change k and watch the score, but keep your eye on the questions this time, not the metric. A trustworthy set would spread evenly across corpora A, B, and C, include a couple of genuinely hard cases, and have at least one ambiguous entry. Judge this seed set against that bar.
Notice how few questions there are: with twelve, a single flip moves Hit Rate by more than eight points. That volatility is the b1 set telling you it is a seed, not a finished golden set. Growing and diversifying it is your homework.
Turn 3 real questions into golden entries ★ 12 min · your own system
The fastest way to internalize this is to build three real entries for a system you actually run - Recall, or your own.
Pull three real questions. Take three questions your system genuinely receives (from logs, from memory, from a teammate). Real phrasing, not tidy paraphrases.
Write the reference answer and context. For each, write the short answer you would accept as correct, and name the chunk or doc id that should support it. That id is your gradeable expected field.
Add one deliberately ambiguous case. Write a fourth entry where even you and a colleague would disagree on the single right answer. Note what the right behavior is - answer, decline, or ask to clarify.
Tag and file. Label the corpus and mark the ambiguous one as an edge case, so you can slice its score separately later. You now have four rows of a real golden set.
Before session b3 ◐ 45 min total
- Grow one golden set to at least 40 entries using the prompt-based generator over your own chunks, then curate every candidate by hand - keep a tally of how many you cut and why.
- Deliberately add three ambiguous entries where consensus is hard, and label them as edge cases.
- Check your distribution: does the topic mix of your set roughly match the topic mix of real traffic? Adjust until it does.
- Read: Anthropic's guide on developing tests, and skim the RAGAS testset generation docs for the default query distribution.
Official sources covered
Taught from official docs. This page covers ~80% of their working content on golden-set construction - the rest (full RAGAS metric suites, hosted grading) lands in later sessions.
Three questions before you go 🎯 ◐ 90 seconds
1 · Anthropic's guidance on golden-set size is best summarized as...
Anthropic advises prioritizing volume over per-item polish, because coverage catches more regressions and automated grading makes volume affordable.
2 · Why deliberately include ambiguous cases where even humans disagree?
Ambiguous entries force a decision you would otherwise skip: what is correct when there is no clean answer. Often that is a clarifying question or a decline, and only an ambiguous case tests it.
3 · You used an LLM to generate a golden set. Before trusting its scores at scale you should...
OpenAI's guidance: LLMs can generate synthetic eval data, but you validate that data (and model-graded evals) against human judgment before relying on it at scale. Trust is earned per set.