AAI Agentic Handbook
Evals & LLMOps

Synthetic data

Mid levelReviewed Oct 2026In 3 interview questions

Model-generated inputs, labels or conversations that fill eval or training gaps; fast to make, trustworthy only after filtering, dedupe and human spot checks.

In plain English

Synthetic data is data an AI model writes for you: test questions, example conversations, labelled answers. It fills gaps when real data is scarce, sensitive (medical, financial) or missing the rare cases you need to test, such as edge-case inputs or adversarial prompts.

It is a supplement, not a replacement: synthetic questions tend to be cleaner and more predictable than what real users type, so evals built only from them overestimate quality.

Analogy

A flight simulator's generated storms: invaluable for practising rare emergencies, but you still need hours in real weather before anyone believes you can fly.

Common pitfall

Asking one model to write questions and grade the answers, then reporting 95%. The generator writes questions that the same model family finds easy, and the grader shares its blind spots.

How it actually works

Generate along explicit dimensions instead of asking for 'diverse questions': cross-product a few axes (persona × intent × difficulty × phrasing style), then have the model write inputs for each cell. Seed from real artefacts (actual documents, schemas, anonymised traces) so the content is grounded. Filter aggressively: dedupe with MinHash or embedding similarity (cosine ≥0.92 as near-duplicate), drop items a validator model flags as unanswerable or ambiguous, and have a human review a 10% sample; keep rates of 30–60% are normal.

For evals, synthetic inputs are fine but labels should be human or carefully verified, and synthetic slices should be reported separately from real-traffic slices. For training, Self-Instruct (Wang et al., 2022) bootstrapped 52k instructions from 175 seed tasks, and Model distillation uses a strong model's outputs to train a smaller one, but recursively training on generated data without fresh real data degrades the tail of the distribution (Shumailov et al., Nature 2024, 'model collapse'). Never seed a generator from your held-out test set; that is self-inflicted Benchmark contamination.

What I'd ship on day one

Generator: a frontier model different from the system under test; explicit axis grid; seeds from real documents or de-identified traces; MinHash (datasketch) plus embedding-similarity dedupe; validator pass for answerability; 10% human review; tag every case source: synthetic and report its slice separately. Tools: distilabel, promptfoo or Inspect dataset generators, or a short script.

Worked example

Clinical intake assistant, no real patient data allowed in dev. Axes: 6 chief complaints × 4 personas (terse, anxious, non-native English, caregiver speaking for a parent) × 3 completeness levels = 72 cells × 5 = 360 synthetic intake conversations, generated from de-identified clinic templates. Filters: dedupe removes 41, a validator flags 63 as clinically implausible, a nurse reviews 40 of the rest and rejects 4. Final set: 252 cases. Real-traffic pilot later shows the 'caregiver' slice is under-represented 3× versus reality; the next batch is re-weighted.

In the interview

Say: "I generate along explicit axes from real seed material, filter and dedupe, have a human check a sample, and report synthetic slices separately from real ones." Expect: "why not just generate 10,000 cases?": because volume without diversity or verified labels gives a precise estimate of the wrong thing.

Axis grid × 5 each360
After dedupe319
Validator keeps256
After human sample252
Generation is cheap; the filters are where the quality comes from.

Numbers worth knowing

Keep rate after filtering
30–60%dedupe + validator + human sample; above 90% usually means filters are too loose
Self-Instruct scale
52k instructions from 175 seed tasksWang et al. 2022
Human review sample
10% of generated items, ≥50reject the batch if >15% fail

How to decide

WhenDo this
Real data is unavailable or cannot leave production (PHI, financial records)Generate from de-identified templates; validate with a domain expert sample.
You need rare or adversarial casesGenerate them deliberately per axis; real traffic rarely contains enough.
Real traffic existsUse it as the majority of the eval; synthetic fills named gaps only.

Cost maths

Generation: 360 cases × (1.5k in + 600 out) at $3 / $15 per M ≈ 360 × $0.0135 ≈ $4.90. Validator on a Haiku-class model ≈ $1. Human review: 40 items at 3 minutes by a $100/h nurse = $200. Humans are 95% of the cost and 100% of the trust.

Operating it

Time to scale up when…
  • Synthetic cases exceed 50% of the eval set: rebalance with sampled real traffic as soon as it exists.
  • Generated sets are reused for training: add dedupe against all eval sets and a fresh-real-data quota per training round.
What to monitor
  • Score gap between synthetic and real-traffic slices: alert when synthetic exceeds real by more than 10 points.
  • Near-duplicate rate within each new generated batch: alert above 15%.

When it goes wrong

What users saw

An insurance-claims bot scored 94% on a 1,000-case synthetic eval and 71% on its first week of real claims.

How it was caught

Pilot adjusters' override rate (29%) on live claims.

Root cause

All cases were generated by one model from clean policy summaries; real claims had OCR noise, mixed languages and multi-incident narratives the generator never produced, and the same model family graded the answers.

Fix

Rebuilt the eval as 60% sampled real claims (human-labelled) and 40% synthetic edge cases generated from real noisy documents, graded by a judge validated against adjusters.

Sources

  1. Self-Instruct: Aligning Language Models with Self-Generated Instructions — Wang et al., 2022paper
  2. AI models collapse when trained on recursively generated data — Shumailov et al., 2024paper

Check yourself

Three questions. Every option is explained once you answer.

1ConceptWhat makes a synthetic eval set more representative than 'generate 1,000 diverse questions'?
2ScenarioYour synthetic claims eval says 94%; the first real week shows 71% accuracy. What is the best fix?
3CalculationGenerating 360 cases at 1.5k input and 600 output tokens each, at $3 / $15 per M. Roughly what does generation cost?