高质量 Agent 训练数据,正在怎么被合成?
大模型正在从“回答问题”走向“自主操作电脑”。这个转变里,有一个很硬的瓶颈:高质量、可执行、可验证的 Agent 训练数据不够。
一个终端任务看起来可能很简单,比如“修好某个测试环境里的失败用例”。但真正把它做成训练数据,通常需要完整的 Docker 环境、初始故障状态、任务指令、验证脚本,以及一条能真正完成任务的轨迹。手工构造这些东西很贵,所以过去一年里,一个很明确的方向浮出水面:能不能自动合成 Agent 训练数据?
下面按 arXiv 首次提交时间,梳理五篇代表性工作:TermiGen、CLI-Gym、SkillSynth、CLI-Universe 和 OpenThoughts-Agent。它们都在解决同一个问题,但切入点不一样:有人从环境故障入手,有人从技能组合入手,有人从严格验证入手,也有人把重点放在数据配方实验上。
1. TermiGen:让模型见过失败,也见过自救
论文:TermiGen: High-Fidelity Environment and Robust Trajectory Synthesis for Terminal Agents
arXiv 时间:2026-02-06
机构:UCSB、UCSD、AMD、University of Oxford、Google 等
项目/数据:https://github.com/ucsb-mlsec/terminal-bench-env
TermiGen 关注的不是“生成一条完美答案”,而是让训练轨迹里出现真实的失败状态。
这点很关键。小模型在真实终端里做任务时,经常会遇到命令报错、路径不存在、依赖没装、文件写错、输出格式不对等问题。如果训练数据里只有完美轨迹,模型很容易学会“一路顺风”的流程,却学不会如何从错误里恢复。
TermiGen 的方法分两步:
- 先生成可执行任务和 Docker 环境,并通过多智能体迭代把任务修到可运行。
- 再用 Generator-Critic 协议,在专家轨迹采集时主动注入错误,让轨迹包含“出错、诊断、修正”的循环。
论文报告最终得到超过 3,500 个 verified environments,并从中收集 3,291 条 trajectories。这些轨迹平均有 25.5 turns、8,722 tokens,覆盖 420 种 unique command-line tools。用这批数据微调 Qwen2.5-Coder-32B 后,TermiGen-Qwen2.5-Coder-32B 在 TerminalBench 上达到 31.3% pass rate。
TermiGen 的贡献可以概括为一句话:Agent 数据不能只教模型“怎么做对”,还要教它“做错之后怎么救回来”。
2. CLI-Gym:从健康环境反推出故障任务
论文:CLI-Gym: Scalable CLI Task Generation via Agentic Environment Inversion
arXiv 时间:2026-02-11
机构:Huawei、北京理工大学、中国科学院自动化研究所
代码:https://github.com/LiberCoders/CLI-Gym
数据:https://huggingface.co/datasets/LiberCoders/CLI-Gym
CLI-Gym 的思路很直观:先有一个健康环境,再让 Agent 把它“搞坏”,最后把这个坏掉的状态包装成一个修复任务。
论文里把这个过程叫 agentic environment inversion。Dockerfile 本质上是一段环境构建历史,而 Agent 可以沿着另一条历史去修改环境。当某些操作导致测试失败时,系统就可以把当前环境、失败信息和验证脚本打包成一个新的任务。
CLI-Gym 从 29 个开源仓库出发,生成了 4,066 个 task prompts,最终得到 1,655 个 problem instances。随后用强模型在这些环境里 rollout,得到 417 条成功轨迹,再过滤掉作弊路径和过于简单的轨迹,留下 291 条 Filtered-Success trajectories 用于训练。
实验结果也很有意思:只用这 291 条高质量成功轨迹,LiberCoder-235B-A22B 在 Terminal-Bench 1.0 上从 25.0 提升到 46.1,也就是 +21.1 个百分点;在 Terminal-Bench 2.0 上达到 31.0。
CLI-Gym 的价值不在于“量特别大”,而在于它证明了一件事:如果任务环境足够真实、验证足够强,几百条轨迹也可能产生很强的训练信号。
3. SkillSynth:用技能图控制任务多样性
论文:Toward Scalable Terminal Task Synthesis via Skill Graphs
arXiv 时间:2026-04-28
机构:腾讯混元团队
TermiGen 和 CLI-Gym 更关注“任务怎么变得真实可执行”,SkillSynth 则问了另一个问题:生成任务时,怎么保证模型学到的技能组合足够多样?
它构建了一个 scenario-mediated skill graph。图里的节点是 scenario,表示某个命令行状态;边是 skill-labeled transition,表示一个技能把一个 scenario 转换到另一个 scenario。系统从图里采样路径,把路径当作抽象工作流,再用多智能体 harness 生成完整任务实例,包括自然语言指令、初始文件系统快照、容器环境、验证脚本和 oracle solution。
论文中的图统计是:
- 82,073 个 scenario nodes。
- 57,214 条 skill-labeled transitions。
- 实验中路径长度上限为 7。
这种方法的好处是,任务生成不是只靠“多写几个 prompt”,而是从图结构上控制任务覆盖的技能路径。实验中,SkillSynth 生成的任务用于训练 Qwen3-8B、14B、32B。Qwen3-32B + SS 在 Terminal-Bench 1.0 / 2.0 上分别达到 33.8 和 29.6。论文也提到,SkillSynth 生成的任务实例已被用于训练 Hy3 Preview。
4. CLI-Universe:把“可验证”放到最前面
论文:CLI-Universe: Towards Verifiable Task Synthesis Engine for Terminal Agents
arXiv 时间:2026-06-22
机构:南京大学、阶跃星辰、ZODA、上海 AI Lab、华中科技大学
CLI-Universe 的关键词是质量。它不是简单把已有材料改写成终端任务,而是先定义多维能力分类法,再把任务一步步落到真实技术材料上。
它的 pipeline 大致是:
- 按 domain、skill type、capability、engineering pillar 采样组合,生成候选任务。
- 通过 evidence-guided deep research 检索真实仓库、文档、issue、教程,把任务具体化。
- 构建 Dockerized environment。
- 生成测试和参考解法。
- 用 rubric-gated test construction、hint-conditional filtering 和 fail-to-pass checking 做多级过滤。
整条链路里,只有 33.6% 的候选能留下来。换句话说,大约三分之二的候选任务会在某个验证环节被淘汰。
最终数据集叫 CLI-Universe-6K,包含 6,000 条训练轨迹。用它微调 Qwen3-32B 后,CLI-Universe-32B 在 Terminal-Bench 2.0 上达到 33.4,在 Terminal-Bench 1.0 上达到 38.8。这个结果说明,少而精的数据在 Agent 训练里非常有竞争力。
CLI-Universe 代表的是一种更工程化的方向:不要只追求生成得多,而要把任务是否真实、验证是否严格、监督信号是否有价值放在第一位。
5. OpenThoughts-Agent:用实验找数据配方
论文:OpenThoughts-Agent: Data Recipes for Agentic Models
arXiv 时间:2026-06-23
项目页:https://www.openthoughts.ai/
代码:https://github.com/open-thoughts/OpenThoughts-Agent
OpenThoughts-Agent 和前几篇不太一样。它不是提出一个单独的数据合成算法,而是系统研究“Agent 数据到底该怎么配”。
论文做了超过 100 个 controlled ablation experiments,研究任务来源、任务混合、任务增强、任务过滤、teacher 选择、轨迹过滤等环节。它的核心发现包括:
- 任务来源非常重要。不同来源带来的下游表现差异可以很大。
- 最强的模型不一定是最好的 teacher。
- 保留更长的多轮 execution traces 通常更好。
- 单纯重复 top sources 会遇到上限,后续需要通过任务增强和来源扩展提升多样性。
最终的 SFT 数据集 OpenThoughts-Agent-SFT-100K 是论文里的 100K agentic traces 版本。公开数据卡说明,任务来自 Top-4 来源:SWE-Smith、StackExchange-SuperUser、StackExchange-Tezos 和 IssueTasks;轨迹由 GLM-4.7-AWQ 在 terminus-2 harness 里生成,并过滤到至少 5 个 model turns。
用这套数据微调 Qwen3-32B 后,OpenThinkerAgent-32B 在 7 个 agentic benchmarks 上平均达到 44.8,比 Nemotron-Terminal-32B 的 40.9 高 3.9 个百分点。其中 SWE-Bench Verified 为 54.0,Terminal-Bench 2.0 为 26.2。
OpenThoughts-Agent 最值得借鉴的地方,是它把“数据工程”变成了可实验、可比较的配方问题。不是拍脑袋说某种数据好,而是把每个环节拆开做 ablation。
合成数据长什么样?
Agent 数据和普通指令微调数据不太一样。普通 SFT 往往是一条 prompt -> answer,但 Agent 数据通常要带环境、验证器、轨迹、工具调用、运行结果等信息。下面放几个 Hugging Face 上能直接看到的真实样例摘录。
CLI-Gym:一个 problem instance
CLI-Gym 在 Hugging Face 上公开的是 problem instances,不是只给自然语言任务。HF viewer 里实际可见的字段包括:
task_id: glibc-locale-name-and-territory-corruption-via-iso-639-3166-database-injection-with-python-faker-regional-data-desynchronization
task_yaml:
instruction: |
I'm experiencing some strange test failures in my Python Faker library
installation...
dockerfile: |
FROM jyangballin/swesmith.x86_64.joke2k_1776_faker.8b401a7d
RUN sed -i 's/^language "Czech"/language "Ukrainian"/' /usr/share/i18n/locales/cs_CZ && ...
docker_compose: |
services:
CLIGYM:
build:
context: .
dockerfile: Dockerfile
command: ["sh", "-c", "sleep infinity"]
run_tests: |
#!/bin/bash
set -uo pipefail -x
echo "tests/providers/test_address.py::TestFrFr::test_department ..."这类数据的重点不是讲一个故障故事,而是给出一个可构建、可运行、可验证的环境。dockerfile 负责制造故障环境,run_tests 负责判定 Agent 是否真的修好了问题。
OpenThoughts-Agent-SFT-100K:一条 agentic trajectory
OpenThoughts-Agent-SFT-100K 是 SFT 用的轨迹数据。数据卡把它称为 100,000-example point;HF viewer 当前显示 default/train 约 94.3k rows。一条真实预览行长这样:
agent: terminus-2
task: swesmith-17696_copy0000
trace_source: main
episode: episode-20
model: hosted_vllm/glm
model_provider: hosted_vllm
result: null
run_id: d73854f4-d271-4c79-a154-0fa2523ca37a
trial_name: swesmith-17696_copy0000__jRGRKV3
date: 2026-04-17T20:30:46.732658+00:00
conversations:
- role/content message list
- first message begins with a terminal-agent instruction prompt这里的 conversations 才是真正的多轮轨迹,里面记录 Agent 如何根据任务描述和命令输出一步步行动。和普通 ShareGPT 对话不同,它不是闲聊数据,而是终端任务里的行动历史。
OpenThoughts-Agent-RL-5K:RL 不是“答案数据”,而是任务包
OpenThoughts-Agent-RL-5K 的形态和 SFT 完全不同。它不是存 teacher trajectory,而是存在线 RL 要用的可执行任务包。下载 tasks.parquet 后可以看到,它只有两列:path 和 task_binary。其中 task_binary 是 gzip 压缩的 tar 包。
以第一条 pymethods2test-0000 为例,解压后的文件结构是:
instruction.md
metadata.json
task.toml
environment/Dockerfile
solution/solution.py
tests/test.sh
tests/test_solution.py其中 metadata.json 说明来源是 pymethods2test,task.toml 给出 agent 和 verifier 的超时配置,environment/Dockerfile 定义运行环境,tests/test.sh 会执行 pytest /tests/test_solution.py 并把 reward 写到 /logs/verifier/reward.txt。题面则放在 instruction.md 里,例如第一条任务要求在 /app/solution.py 里实现:
path: pymethods2test-0000
metadata:
source: pymethods2test
has_docstring: true
task:
difficulty: medium
category: sandbox
environment:
Dockerfile: |
FROM python:3.10-slim
WORKDIR /app
RUN pip install --no-cache-dir pytest
instruction:
function: min_seconds_to_eat_candies(...)
tests:
runner: pytest /tests/test_solution.py本地抽查也能看到,5,000 行都来自 pymethods2test,都采用同样的包结构。它确实不是一条条“老师示范轨迹”,而是 5,000 个可运行任务。Agent 在 Daytona sandbox 里通过 terminus-2 harness 尝试解决任务,reward 来自任务自己的 test verifier。也就是说,RL 数据集更像“训练场”,不是普通 SFT 那种用于模仿学习的答案轨迹集。
这也是 Agent 数据和普通文本数据最重要的区别:真正有价值的不是一段漂亮的回答,而是能被执行、能被验证、能产生奖励信号的环境。
一张表对齐
| 论文 | arXiv 时间 | 核心策略 | 数据/规模 | 核心贡献 |
|---|---|---|---|---|
| TermiGen | 2026-02-06 | 可执行环境合成 + 错误注入轨迹 | 3,500+ verified environments;3,291 trajectories | 让模型学习错误恢复 |
| CLI-Gym | 2026-02-11 | 环境逆向:健康环境到故障状态 | 1,655 problem instances;291 filtered success trajectories | 自动生成环境密集型修复任务 |
| SkillSynth | 2026-04-28 | 技能图采样工作流 | 82,073 scenario nodes;57,214 skill-labeled transitions | 从图结构控制技能多样性 |
| CLI-Universe | 2026-06-22 | 能力分类法 + 证据调研 + 多级验证 | CLI-Universe-6K;6,000 trajectories | 少而精的可验证任务合成 |
| OpenThoughts-Agent | 2026-06-23 | 100+ ablation experiments 找数据配方 | SFT-100K;RL-5K;OpenThinkerAgent-32B | 系统研究任务来源、teacher、过滤和规模 |
总结
这几篇工作连起来看,Agent 训练数据的演进线很清楚:
TermiGen 强调失败恢复;CLI-Gym 从真实环境反推出故障任务;SkillSynth 用技能图控制任务组合;CLI-Universe 把可验证和高质量过滤放到中心;OpenThoughts-Agent 则系统研究数据配方,告诉我们任务来源、teacher 和轨迹过滤会显著影响下游能力。
它们共同指向一个结论:Agent 数据的价值不只在数量,而在环境真实性、验证强度、轨迹质量和技能覆盖。相比继续堆更多普通对话数据,高质量、可执行、可验证的 agentic traces 更可能成为下一阶段开源 Agent 能力提升的关键。
参考链接
- TermiGen: High-Fidelity Environment and Robust Trajectory Synthesis for Terminal Agents
- CLI-Gym: Scalable CLI Task Generation via Agentic Environment Inversion
- Toward Scalable Terminal Task Synthesis via Skill Graphs
- CLI-Universe: Towards Verifiable Task Synthesis Engine for Terminal Agents
- OpenThoughts-Agent: Data Recipes for Agentic Models
- LiberCoders/CLI-Gym on Hugging Face
- OpenThoughts-Agent-SFT-100K on Hugging Face
- OpenThoughts-Agent-RL-5K on Hugging Face
- OpenThoughts-Agent-v1-SFT on Hugging Face
