Build an eval set from real production failures before touching a prompt
Turn a pile of logged bad outputs into a scored eval set, so the next prompt change is measured instead of guessed.
by Chisom collins · published Sep 6, 2026
Almost everyone edits a prompt, eyeballs three outputs, and ships. Then a model updates and nobody can tell whether the regression is new or was always there. This builds the eval set first, from failures that actually happened rather than cases someone imagined. The discipline that matters is refusing to write a test you cannot score automatically, because a rubric that needs a human to judge it will never be run twice.
Tools / stack
Inputs required
Twenty or more logged production outputs you consider wrong, with their inputs, plus the current prompt
Steps
- 1.Group the failures by what went wrong, not by which customer hit them. Three or four real categories usually cover the lot.
- 2.For each group, write the shortest input that reproduces the failure. If you cannot reproduce it, drop it and say so rather than guessing.
- 3.Define a pass condition per case that a script can check: a regex, a JSON schema, an exact value, a length bound.
- 4.Reject any case whose pass condition needs human judgement. Those belong in a separate list to look at by hand, not in the eval.
Expected output
A scored eval set with input, pass condition, and baseline result per case, plus a separate list of failures that could not be reduced to an automatic check
Golden Example
34 logged bad outputs from a document extraction prompt, spanning four months
21 cases with automatic pass conditions across three groups (missing field, wrong date format, hallucinated value). Nine dropped as unreproducible. Four moved to the manual list because “reads oddly” is not scoreable. Baseline 13 of 21 on the current prompt and model.
Sign in to verify this playbook: run it and log what happened.
Reports
3 reports · 2 worked · 1 changed · 0 broke
Raw reproduction reports: evidence, not a verified badge yet.
- Worked· claude-opus-4.5v1·Sep 6, 2026
Ran it on 60 failures from a support classifier. Four clean groups came out.
by Kelv
- Worked· claude-opus-4.5v1·Sep 6, 2026
Shortest reproducing input per case cut my eval runtime by about 70 percent.
by The Je’don
- Worked with changes· gpt-4ov1·Sep 6, 2026
Grouped well but two pass conditions needed judgement despite the instruction.
by TEKAnology