Post-training data

Synthetic training data for agents

Synthetic training data for agents is model-written conversations in which an agent uses its own tools. Every run is graded, so a trainer can learn from it.

How it gets made

Real agent logs are scarce, private, and thin on failure. Generating the runs is faster than waiting for them.

A generator needs three parts.

A world

Somewhere the agent can act, so that a tool call returns a real result instead of a stub.

A user

A goal and a person pursuing it. A separate model plays the user, so the agent is not talking to itself.

A grader

A verdict on each finished run, because a row with no grade carries no training signal.

Grading is the part that decides it

Ungraded synthetic data teaches a model whatever the generator happened to do wrong. A graded set separates the runs that worked from the runs that did not. Failures stay in the set with their label, so the trainer can use both.

Grading also has to name a behavior, not just a score. A behavioral marker is a named, measurable behavior, such as tool-call efficiency: the work done per tool call.

How Zero Proof Labs does it

The engine reads an agent's tools and system prompt and builds a world from them. It writes the users, plays the agent against scheduled tool faults, and grades every trajectory. You can watch a row get made step by step.

Every row is JSONL with four objects: Task, Rollout, Judgment and Marker. The same rows export as supervised fine-tuning examples or as contrastive pairs for reinforcement learning. Four modes cover eval sets, SFT, RL and adaptive runs. It all runs from three lines of Python in the Simulations SDK.

The same markers score production traces sent over OpenTelemetry, through trace ingest. One metric runs before training and after, so you can tell whether the behavior you trained actually landed. Every term on this page is defined on the glossary.

Claims and sources

5.0% to 30.0%

A 15 dollar synthetic set with no human-written row took Llama-3.1-8B from 5.0% to 30.0% on tau2-bench telecom. The same count of expert-written rows reached 17.5%. The fine-tuning post.

317 to 808 rows

A two-minute simulation run produces 317 to 808 graded rows, depending on mode. Simulations SDK.

75.3% accuracy

zeroproof-ecommerce-1b, trained inside a simulated marketplace, scores 75.3% macro intent accuracy at 18 cents per million output tokens. Intent model.

Common questions

Can synthetic data replace human-written data?

On tau2-bench telecom it beat it. A 15 dollar synthetic set reached 30.0% where the same count of expert-written rows reached 17.5%. Grading is what made the difference.

What makes a synthetic row useful?

Diversity, a grade, and a failure label that stays in the set. Rows with no grade teach a model its own mistakes.

Can one set serve both SFT and RL?

Yes. The same graded rollouts export as SFT rows, or as contrastive pairs for RL methods such as GRPO.

How do you know the behavior landed?

Score the same behavioral markers on production traces sent over OpenTelemetry, before training and after.

Questions, or a higher limit: jacob@zeroproofai.com