把生产 bad case / 失败轨迹转成训练数据时使用——从失败归因、轨迹前缀截取、DPO 偏好对构造、LoRA 训练到边界集与保留集双集验证的完整链路;也用于判断某类问题该走 SFT、DPO、RL 还是先修 Harness/工具/tokenizer,以及如何从运行轨迹中提取带证据的结构化学习信号。触发词:bad case、失败归因、DPO、偏好对、轨迹前缀、拒绝采样、过度矫正、边界集、保留集、过早结束、reward hacking、LoRA 微调、训练评估隔离。
87%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Passed
No findings from the security scan
① 采集与归因。 从用户纠正、点踩、事后审计三类生产信号收集失败轨迹,按错误分类定位首个错误步骤并记录错误类别。轨迹前缀回归任务就是从这个决策边界截取的。
② 分流:该不该训练。 先问 prompt、工具、代码约束、上下文管理能否解决;再沿字节链路排除工具/Harness/tokenizer 问题。都不要动权重时就不训练。
③ 选训练形态。 按第七章评估数据集的类型映射到第八章用法:
| 你手上的材料 | 训练用法 |
|---|---|
| 端到端回归任务(含验证器) | RL rollout 任务与可验证奖励(RLVR);拒绝采样(RFT)的采样池 |
| 轨迹前缀回归任务 | DPO 偏好对、决策边界的 SFT 示范、On-Policy Distillation 的教师状态 |
| 失败归因记录(首个错误步骤与错误类别) | 过程监督的负标签(PRM)、RLVP 路径惩罚的规则来源 |
| Rubric 多维评分与人工金标集 | 向量奖励的各维度、生成式奖励模型(GRM)的训练与校准数据 |
④ 截取轨迹前缀,构造偏好对。 在决策边界上截出"准备宣称完成"的轨迹前缀:rejected 是过早结束的错误行为,chosen 是"先运行测试、逐条核对验收条件,再下结论"的期望行为。chosen 由教师模型生成,再经规则验证器过滤(拒绝采样)。案例太少时用数据扩充(换任务类型、换缺失的验证项、换完成措辞)形成数百条偏好对。失败原因、适用条件和验证器应随样本保存,方便追溯和复查。
⑤ LoRA DPO 训练。 小配比混入通用任务数据防过拟合。参考配置:Qwen2.5-7B-Instruct + bf16 LoRA、4 epochs、学习率 3e-5、单卡约 24GB 显存。训练回执记录配置、数据哈希与时间戳。
⑥ 双集验证。 对未完成任务集和已完成任务保留集分别让模型给出"下一步动作",判定属于"宣称完成"还是"继续验证":
优先采用格式固定、与训练提示一致的候选比较(固定两个候选动作,比较模型更偏好哪一个,直接测量决策边界),而不是开放式自由生成。同时抽查通用能力,确认 LoRA 补丁没有破坏其他能力。
⑦ 记录与追溯。 训练数据与评估集分开保存;数据构造有确定性模板和教师模型两条路径时,两条都留证据回执。
配套数据:24 条轨迹前缀 bad case,覆盖四类过早结束——未跑测试就宣称完成、多目标只完成一部分、声称完成但验收条件未满足、遇错放弃宣称不可能(含删除失败测试/skip 等 reward hacking 变体);与训练数据严格隔离的留出评估集为 boundary 12 条 + retention 8 条。
实测结果:基座在固定候选比较的未完成任务集上选对 3/12(25.0%),已完成任务保留集 8/8(100%);LoRA DPO 后分别为 11/12(91.7%) 和 8/8(100%)。自由生成是补充诊断:过早结束 1/12→0/12,但正常收尾 6/8→0/8——说明小数据 DPO 会让模型在开放式回答里过于谨慎,因此主要结论只采用候选比较口径,不能外推成线上总体成功率提升。
同一个问题还有 RL 分支:把"宣称完成前必须跑通验收测试"写成可验证奖励,测试对模型不可见,模型宣称完成时才运行,通过 +1、不通过 −1。
edit_file 的 old_string 匹配失败):把复制任务抽象成三个可验证任务——直接逐字复述、在相似且等长的多个字符串中选择完全相同的目标、把指定字符串完整抄写到 old_string 工具参数。样本特意包含真实编辑最容易损坏的空格、换行、反斜杠、Unicode 组合字符。训练后要用独立 tokenizer 审计排除词元化造成的假象:若 round-trip 上限本身就是 80.1%,模型测到 80.1% 就不能算作纯能力提升。评价一条轨迹实质是依次回答三个问题:事情是否办成了、是否以允许的方式办成、是否让用户舒服。
输出形态决定它能否成为学习信号:单一总分只能反映一次运行的优劣。四项内容(成败判定、每维度结论、证据位置、失败类型标签)齐备,后续才能判断该更新知识、提示词、程序还是模型参数。
chapter8/premature-completion-dpo/ — 全书唯一从生产 bad case 出发的训练实验:24 条 bad case、boundary 12 + retention 8 留出评估集、隐藏测试;python demo.py 离线端到端演示,python -m pytest -q test_pipeline.py 机制单元测试,python build_preference_data.py 生成偏好对(--teacher 走教师模型拒绝采样路径),python train_dpo.py --smoke 数据/tokenizer 前向检查,python train_dpo.py 单卡 LoRA DPO,python evaluate.py --decision-score 双集候选比较评估,python train_grpo_optional.py 同一问题的可选 RL 分支。chapter8/curly-quote-sft/ — 规则类反馈的另一种监督目标:先写 SKILL.md 规范,再结构化合成数据做作用域敏感 SFT。chapter8/exact-copy-sft/ — byte-exact 复制 SFT,含 tokenizer_audit.py 排除词元化假象。chapter8/cot-distillation/ — "生成候选—验证过滤—只留正确轨迹"的拒绝采样流水线范例。book/chapter8.md「从问题案例到后训练」book/chapter8.md「SFT 数据合成:从示范到可训练轨迹」book/chapter8.md「奖励设计:如何把任务目标变成学习信号」book/chapter9.md「从运行轨迹中获得学习信号」bojieli/ai-agent-book
dbc046e
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.