mcpField
T
trace-to-training-data

trace-to-training-data

github.com/wshobson数据与数据库41.9k2.7k 次安装2 周前更新
代码仓库

关于 trace-to-training-data

将已评估的 Agent 轨迹转换为 SFT 示例或 DPO 偏好对,供训练数据整理流程使用。强调按奖励筛选、同任务配对及隐私和评估集防泄漏检查。

主要功能

  1. 01转换轨迹为 SFT 或 DPO 格式
  2. 02按奖励筛选成功轨迹
  3. 03从专家修正中生成 SFT 示例
  4. 04按步骤屏蔽不良轨迹内容
  5. 05检查敏感信息、重复项和数据来源

适用场景

  1. 01将已评分轨迹转换为训练行
  2. 02为同一任务构造偏好对
  3. 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.jsonl ID 排除在每一个转换后的 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。

评论

支持 Markdown