把生产 bad case / 失败轨迹转成训练数据时使用——从失败归因、轨迹前缀截取、DPO 偏好对构造、LoRA 训练到边界集与保留集双集验证的完整链路;也用于判断某类问题该走 SFT、DPO、RL 还是先修 Harness/工具/tokenizer,以及如何从运行轨迹中提取带证据的结构化学习信号。触发词:bad c
复制下面这句话,粘贴给 Claude Code、Codex、Cursor 等 AI 编程工具,它会读取安装说明并在你确认后完成安装。
请阅读 https://ai.atlankj.com/install/asset/gh-bad-case-to-dpo-a7bf3a01cc87 ,按照其中的说明把「bad-case-to-dpo」安装到你(当前 AI 工具)中。执行前先告诉我将运行的命令和写入的位置,等我确认。
查看 AI 将读取的安装说明正在读取 GitHub 原文…
内容来自 GitHub 原始文件,由原作者维护。在 GitHub 查看
① 采集与归因。 从用户纠正、点踩、事后审计三类生产信号收集失败轨迹,按错误分类定位首个错误步骤并记录错误类别。轨迹前缀回归任务就是从这个决策边界截取的。
② 分流:该不该训练。 先问 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「从运行轨迹中获得学习信号」