← All learn articles

Traces vs Synthetic Data: Which Trains a Better Model?

Traces vs Synthetic Data: Which Trains a Better Model?

Synthetic data generated from traces wins, by up to 25.9 percentage points. On clean curated data the two approaches tie. The moment traces carry realistic noise, training on them directly drops 14 to 28 points below the curated ceiling while the synthetic pipeline stays within 2 points of it.

Which approach wins on the numbers?

Synthetic-from-traces, in every scenario, and by a margin that scales with how messy the traces are.

Scenario Synthetic from traces Direct on traces Delta
Curated data (human-annotated) 0.866 0.864 +0.002 (tie)
Noisy labels (50% corrupted tool calls) 0.844 0.721 +12.3pp
Schema drift (randomised function names) 0.844 0.585 +25.9pp
Low data (5 traces only) 0.852 0.649 +20.3pp
Irrelevant trace mixing (80% wrong domain) 0.858 0.694 +16.4pp

LLM-as-a-judge score on roughly 360 evaluation turn pairs from 34 held-out multi-turn conversations. Best teacher, GLM-5 at 744B parameters: 0.835.

The first row is the control, and it matters as much as the rest. When both pipelines train on clean human-annotated data they land within 0.002 of each other — so the synthetic step is not adding quality out of nowhere, and it is not degrading anything either. It is purely a noise-removal layer. On perfect data it does nothing; on realistic data it does almost everything.

Full write-up: why training on production traces fails.

How was this measured?

On the Schema-Guided Dialogue dataset from Google Research — over 20,000 human-curated multi-turn dialogues across 20 domains. The target task was the Restaurants_1 booking agent, with FindRestaurants, ReserveRestaurant, and respond_to_user tools.

After reserving 34 conversations as a shared test set, 327 clean traces remained as the canonical training source. Each scenario applies one deliberate corruption to those 327 and runs both pipelines on the result.

Parameter Value
Student model Qwen3-1.7B, LoRA rank 64
Generation teacher GLM-5
Judge GPT-OSS-120B
Training 4 epochs, learning rate 5e-5
Synthetic set size ~2,000 multi-turn conversations per scenario

Both pipelines shared the test set, student, hyperparameters and evaluation harness. The only variable was whether traces became labels or became context. Code and data: the benchmarking repository.

What are production traces actually good at?

Carrying the shape of your problem. Traces show real user intents, the vocabulary people actually use, realistic conversation flows, and genuine tool-usage patterns — none of which a hand-written seed set reliably captures, because nobody invents the awkward inputs that real users produce daily.

That is distributional signal, and it is the reason to bother with traces at all. The benchmark’s low-data row is the clearest demonstration: five real traces, used as seed context, got a 1.7B student to 0.852. The information content of five real conversations is high. Their value as labels is near zero.

What is synthetic generation better at?

Everything to do with correctness. The teacher reads the task description and the tool schema alongside the traces, so it knows what should happen, not only what did.

Then a validation layer checks each generated example against the target schema, filters near-duplicates, and rejects length outliers. That layer has no equivalent in direct training, where a malformed trace is simply a malformed training example.

The combination is the whole trick: traces supply the domain, the schema supplies the ground truth, and validation enforces it. Why every path ends in synthetic data covers the mechanism, and fine-tune with synthetic data the practice.

Why did direct training collapse under schema drift?

Because the model had no way to know which name was right. With 21 randomised function names spread across the traces — search_restaurants, lookup_restaurants, find_places_to_eat — direct training simply cannot learn a single correct tool vocabulary, and it scored 0.585.

The synthetic pipeline reads the correct schema from the job description, ignores the wrong names in the traces, and generates examples using the real API. Same input, 0.844.

Schema drift is also the most common of these failure modes in real logs, because APIs get renamed and old versions run alongside new ones for months. If you have ever shipped a breaking change to a tool schema, your trace archive has this problem.

Did the student really beat every teacher?

Yes. Five large models were evaluated as teachers on the same test set to establish ceilings.

Teacher model LLM-as-a-judge Std
GLM-5 0.835 0.006
Qwen3-235B 0.768 0.018
GPT-OSS-120B 0.765 0.020
MiniMax-M2 0.762 0.010
DeepSeek-3.2 0.744 0.014

The fine-tuned 1.7B student scored 0.844 to 0.866 across every scenario — above GLM-5’s 0.835, which is a 744B model and therefore roughly 437 times larger. Note that this only holds within the task. Nobody is claiming a 1.7B model is generally better than GLM-5. See can a small model beat its teacher for why specialisation produces this result.

Which should you pick?

Use traces as seeds and context; do not train on them as labels. That is the recommendation in one line, and the only case for direct training is one you almost certainly do not have.

Your situation Use
Traces you would personally vouch for, every one Either — they tie
Traces from a live system, unaudited Synthetic from traces
Multiple prompt or schema versions in the log Synthetic from traces, emphatically
A handful of traces and nothing else Synthetic from traces
No production system at all Hand-written seeds, see fine-tune with 20 examples

The first row is the honest exception, and it is rare — that guarantee is effectively impossible without human curation, at which point you have paid the labelling cost anyway.

One consequence deserves emphasis for multi-turn agents. A per-turn error rate compounds: at 95% per-turn accuracy only about 35% of 20-turn interactions come out fully correct. Tool-timing errors are the worst kind, because the output looks syntactically fine. Turn production traces into training data is the procedure.

Sources

Related

All Training data articles →