关于 trace-to-training-data
将已评估的 Agent 轨迹转换为 SFT 示例或 DPO 偏好对,供训练数据整理流程使用。强调按奖励筛选、同任务配对及隐私和评估集防泄漏检查。
主要功能
- 01转换轨迹为 SFT 或 DPO 格式
- 02按奖励筛选成功轨迹
- 03从专家修正中生成 SFT 示例
- 04按步骤屏蔽不良轨迹内容
- 05检查敏感信息、重复项和数据来源
适用场景
- 01将已评分轨迹转换为训练行
- 02为同一任务构造偏好对
- 03避免评估样本进入训练集
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ wshobson/ agents --skill trace-to-training-data安装后在 Claude Code 中输入/trace-to-training-data确认已加载。
附带文件references/conversion-recipes.md
详细介绍
从 Trace 到训练数据
本技能假设 eval-harness-first
已经对这里要转换的 trace 完成了
评分——goldens、grader
以及 runs/<run-id>/results.json
在转换开始前都已存在。这正是
该技能在自身流程中提到的飞轮
环节:“同一批带标签的 trace 成为
训练集。”转换在这里发生;
评分已在上游完成。
输入: 已评分的 trace——
eval/goldens.jsonl 加上
runs/<run-id>/results.json,每一
行都带有一个 task_id、来自 grader 的
一个 verdict,以及当任务支持
标量分数(judge 分数、
执行部分得分,或 RLVR 验证器)时的
一个 reward:
{"task_id": "t-042", "trace_id": "t-042-a3",
"messages": [{"role": "user", "content": "..."}],
"verdict": "pass", "reward": 0.91,
"grader": "exact_match"}
输出格式: 行结构与
dataset-curation 的 Format Selection
表完全一致——SFT
messages 行或 DPO
prompt/chosen/rejected
对——因此本技能的输出
就是该技能的输入,中间
无需任何重塑步骤。
原则
eval harness 已经完成了
标注工作:results.json 中的每个
trace 在本技能接触它之前,
就已经带有一个 verdict,且往往
带有一个 reward。把已评分的
trace 转换成训练行是机械性
工作——从 dataset-curation 的表中
选一种结构,映射字段,写入
JSONL。
剩下的工作就是 curation——哪些
trace 达到质量门槛,哪些对
具有信息量,哪些行绝对
不能进入训练集。
任何需要重新评判某条 trace 的
转换步骤,都应视为 harness
缺少 grader 的信号,而非本技能
应该掩盖的缺口。没有 verdict 或
reward 的 trace 尚不可转换——
先把它送回 eval-harness-first,
不要在这里手工标注以
解锁转换。
从 Trace 生成 SFT
- 保留成功轨迹中 reward 最高的一部分, 而不是每一个通过的轨迹。按 reward 对通过的 trace 排序并取一个 比例(Agent-lightning 模式), 而不是取每一个仅仅 越过通过门槛的 trace——勉强 通过的 trace 是比 远高于阈值得分的 trace 更弱的 SFT 信号。
- 专家修正后的失败样本 直接成为金标 SFT 示例 (Langfuse 模式)——当人类将 一条失败 trace 的输出编辑为 正确输出时,该修正 无需 reward 阈值;人类 已经验证过它。 将修正样本直接送入 SFT 集。
- 对于多步 trace,步骤级掩码 优于整条轨迹丢弃。 当一条多步轨迹中只有 部分步骤是坏的时,对坏步骤 掩蔽 loss 并保留 好步骤,而不是丢弃整条轨迹。 SRFT 在 SWE-bench 上报告 步骤级 critic 掩码为 32.2%,而 轨迹丢弃为 30.9% ——更细粒度的切分带来了 真实但有限的差距。
从 Trace 生成偏好对
- 在同一任务上基于 通过与失败轨迹构建对, 绝不要从跨不同任务拉取的 不相关的最佳和最差 得分 trace 构建—— 跨任务对教会模型 偏好一个任务而非另一个任务, 而不是偏好一个回答而非另一个回答。
- 被拒绝成员选取该任务
reward 分布的 μ−2σ 处,
绝不要取绝对最小值。
preference-optimization的 Pair Construction 一节拥有 完整的选择公式; 本技能提供它所消费的 已评分轨迹。 - judge 评分的 delta 选择 能在不削减信号的情况下 削减对的数量。 按 chosen 减 rejected 的 judge delta 对每个候选对评分,并 只保留 delta 最高的子集—— 16.5k 候选池中的前 5k 与完整池的下游结果 相当。先构建完整候选集, 再按 delta 过滤;不要一开始 就把生成上限设为 5k。
卫生
- 任何行发布前都要扫描密钥和 PII, 并涂改所发现的内容。 来源于 生产日志的 trace 可能携带凭证、API key、 token 或客户数据 —— 对每一行 SFT 和 DPO 行运行密钥/PII 扫描 并涂改匹配项; 如果涂改后仍残留敏感字段,转换会 fail closed(该行被丢弃,而不是 带着原始内容发布)。绝不提交密钥。
- Eval goldens 绝不能泄漏
到训练数据中。 将
每个
eval/goldens.jsonlID 排除在每一个转换后的 SFT 和 DPO 集之外 —— 一个同时 作为 golden 出现的 trace,会让训练 针对之后 checkpoint 被评分的那个确切条目, 从而在后续每次 eval 运行时悄悄抬高分数。 - 对训练集去重,
而不只是在
新转换的行内去重 ——
精确匹配或
嵌入相似度,匹配
dataset-curation的 dedup 方法字段,在本批次合并 之前针对任何已存在的 训练数据运行。 - 来源信息写入
数据集卡片。 每一个转换后的
行都必须能追溯到其
来源
run_id和trace_id——dataset-curation的 Provenance 字段检查的正是这种 指向trace-to-training-data输出的链接;没有可追溯 来源的行还不能合并。
相关技能
eval-harness-first—— 生成 本技能所转换的已评分 trace; 没有 verdict 或 reward 的 trace 还不能转换,在转换前将它 送回那里。dataset-curation—— 拥有 目标格式以及本技能来源 数据所喂入的数据集卡片; 转换后的行必须与其 Format Selection 表字段名完全一致, 而不能是它们的近似。preference-optimization—— 消费本技能构建的 DPO 对, 并拥有上文引用的完整 μ−2σ 拒绝选择 公式。
可运行的 JSONL 到 JSONL 转换示例
—— 已评分 trace 到 SFT 行、trace
对到 DPO 对、修正到
SFT 行、拒绝采样
循环,以及 goldens holdout
检查 —— 位于
references/conversion-recipes.md。