fsck --no-reflogs --unreachable:基座 → Run2 用到的题数git log/show/blame/rev-list/reflog),把 git log -5、git blame 这类正常查史也算了进去。应重点复核 H3:其他 ref、对象、tag 与时间窗探查,剔除明确寻找未来答案、重复无收益的动作(568/936 个实例、1,133 个回合含 H3 或 U)。理由有四条:
--all 查询可达过去也可能合理。先固定口径,再测量。凡是全量可算的都算全量,需要语义判断的才用分层随机抽样和双人标注,并分别报告不确定性。
| 维度 | 操作定义 | 测量方式 | 证据级别 |
|---|---|---|---|
| 口径一致 | 训练侧与评测侧用同一个分类器 git_history_taxonomy.py:H3 refs/对象/时间窗筛查;U 上游/网络候选;H2 考古可达历史;H1 定位;H0 工作区 git | 全量:A 中被监督的 15,700 次调用(15,089 次 bash),评测 13,263 次调用 | 确定性,正则筛查 |
| 信息增益 | 探查是否返回了 HEAD 之外的对象,或晚于 base 的提交 | 环境源码(训练 aweagent/core/eval/setup.py:36、评测 image_builder/docker_utils.py:68)+ 全量观察分类 + 独立代理复核 | 确定性 + 复核 |
| 迁移 | 学生是否出现基座从未出现、教师特有的命令与推理措辞 | 指纹 n-gram、模板一致率、Jensen–Shannon 散度(题目级 bootstrap 1,000 次),并以教师自身两半散度为基线 | 风格迁移的强关联证据;不是失败归因 |
| 是否值得模仿 | 被监督回合是否应获得正向 loss | 按回合类型分层随机抽 72 个回合(种子 20261030),两名独立模型标注(71 条 Opus/Sonnet;1 条因 Sonnet 限额由另一 Opus 独立补标);Cohen κ、Wilson 区间、按总体加权 | 抽样估计,LLM 标注 |
| 覆盖 | 学生在评测中所处的状态,在被监督回合中占多少 | 状态特征分布对比(第 8 节) | 描述性,任务分布不同 |
| 其他缺陷 | 上游副本抄写、失败工具调用被监督 | 全量:观察→后续写入的逐字重合检测;read/edit 返回值分类 | 启发式候选+具体证据复核 |
同一指标按“实例或题目中至少出现一次”计算。教师侧分母为 A 的 936 个实例,只计被监督调用;评测侧分母为 50 题。
git log --oneline -5)教师侧 731/936,学生在 Run1/Run2 中是 50/50/50/50。这一类每题约 1–2 次,代价很低,不是主要问题。remove_future_commits:所有 ref 重置到 HEAD,reflog expire --expire=now --all,再 gc --prune=now。轨迹里 git log --all 的顶端就是 (HEAD -> scaleswe) pre-agent commit,branch -a 只列出 * scaleswe。但清理只作用于顶层仓库:trufont_uharfbuzz_pr119 的嵌套 harfbuzz 仍保留远端分支和 tag。另一个 A 实例 asottile_add-trailing-comma_pr12 的不可达对象来自 agent 自己的 stash。02e7a74)构建镜像时:删除晚于 base 的 tag,执行 reflog expire 与 gc --prune=now --aggressive,并校验 git log --all --after=<base> 为 0 条,否则构建失败。这对应 2025-09 issue #465 的官方修复(PR #471 / v4.1.0)。在已读取的三轮观察中均未检出未来提交证据(各 0/50);没有逐镜像核对 digest 或提交祖先关系,不能认证环境完全无泄漏;“PR 号大于题号”的命中全部是假阳性,原因是 PR 号与合并时间不单调。下图只统计“纯探查”调用,即每个 git 段都是 H3/H1、其余只有 head/grep 等过滤。混合命令的观察无法拆分,不计入。
--since/--after):教师 0.7%,基座 1/50,Run1/Run2 为 15/50/14/50。与“教师策略泛化到其他找修复方式”的假设一致,但基座本身已会日期搜索,不证明这一具体动作首次来自 SFT。教师侧为 936 个 A 实例中出现该命令(且被监督)的比例;评测侧为 50 题中出现的比例。
| H3 命令模板 | 基座 | Run1 | Run2 | 教师自身两半 |
|---|---|---|---|---|
| 与教师被监督模板完全一致的比例 | 3.4% | 70.9% | 68.3% | — |
| 与教师模板分布的 JS 散度(95% CI) | 0.98(0.95–0.99) | 0.34(0.29–0.42) | 0.31(0.21–0.42) | 0.096(独立等量子集) |
JS 散度以 2 为底,0 表示分布相同,1 表示完全不重合。“教师自身两半”是把教师随机分成互不重叠的两组 45 题后的散度,由独立代理计算,作为“同一分布”的参照。基座的 0.98 主要来自一道题(django-12965)的 489 次日期窗口搜索,这个模板教师从未用过。
R1 揣测隐藏测试;R2 凭记忆回忆上游或新版本源码;R3 寻找目标提交或上游修复。正则只做筛查。R2|R3 对双标注“有找答案意图”的精确率为 75%,召回率为 62%。
| 指标 | 教师(被监督) | Run1 | Run2 |
|---|---|---|---|
| H3 出现在首次检测到文件写入之前的比例 | 86.8% | 85% | 75% |
| H3 调用的 step 中位数 / 每题中位数 | 第 8 步 / 1 | — / 5 | — / 4 |
| H3 后 3 步内出现长失控的比例(随机步基线) | — | 13.0%(8.0%) | 11.2%(3.8%) |
长失控指 stop_reason=length 且推理 ≥20,000 字符。探查之后的失控率是基线的 1.6–3 倍,但这是描述性的:两者可能共同发生在“卡住、不知下一步”的状态里,不能据此说探查导致失控。按“有无 H3”或“H3≥5”分组的 resolved 率在三轮之间方向不一致,且无 H3 的题在 Run1/Run2 只有 4 和 5 道,不作推断。
判据:从 U 调用的观察里取 ≥25 字符、含代码结构的行,检查其后同一实例的写入命令或 edit 参数中,是否逐字出现至少 2 行。这是候选检测,既会漏掉改写式采用,也会把已见代码、删除锚点误计为新增。
build/lib/<包> 旧构建产物,以及 harness 自带 pipx venvs/swe-rex 里安装的本项目包新版本(例如 click、typing_inspection)。| 独立复核实例 | 实际可支持的结论 |
|---|---|
| pallets_click_pr2509 | step9–10读取swe-rex环境Click8.3.1;工作区8.2.0.dev0。step16新增 prompt_kwargs: t.Any = {} 与 prompt_kwargs["show_default"] = self.show_default,推理说“Implement upstream patch”。支持外部后续版本实现采用,未对照隐藏gold。 |
| liormizr_s3path_pr129 / pre-commit_identify_pr12 | 外部副本已有目标接口/映射;后续写入包含此前保留文本中未见的多条实现行。支持外部实现采用,时间关系与官方目标补丁尚未核验。 |
| joblib_threadpoolctl_pr163 | 粗匹配的3行位于将被删除的old代码,教师还写“Same source.”。不能认定目标答案抄写。 |
| trufont_uharfbuzz_pr119 | 子模块额外refs可读,但目标绑定step5已写,之后才读4.2.0;父仓库本有4.2.0升级历史,旧头文件也已有API。确认清理未递归和切依赖构建,不能计作未来目标修复泄漏。 |
因此没有采用Worker初报“至少16个确认泄漏”的计数。需把外部实现采用、环境恢复与未来目标答案泄漏分级,后两者不能靠字符串命中相互替代。
| 原生工具 | 被监督调用中成功的 | 失败原因 | 学生 edit 报错(基座 / Run1 / Run2) |
|---|---|---|---|
| read | 21/392 | 路径在会话工作区之外 274、文件不存在 97 | 23/136 / 26/108 / 42/118 |
| edit | 57/219 | 路径在会话工作区之外 106、文件不存在 56 |
训练环境的用户提示写着“仓库位于 /workspace/<repo>”,read/edit 工具却不接受这个路径。教师只好改用 bash,因此 96.1% 的被监督调用是 bash,936 条轨迹里只有 57 次成功 edit、21 次成功 read 可以模仿。学生在评测中的 edit 报错是另一类问题:先 read 后 edit、old_string 匹配不上、old 与 new 相同。这支持正确原生工具示范稀缺、训练与部署契约不同;不能直接证明学生 edit 报错由这些数据导致。共有 440 个被监督回合含失败的 read/edit,涉及 300 个实例。
| 方案 | 影响的被监督回合 | 说明 |
|---|---|---|
| 屏蔽含 H3/U 的回合 | 1,133(7.3%,token 6.7%) | 代价小,改变这些回合的正向训练目标;不保证生成习惯消失 |
| 屏蔽之后仍含 R2/R3 的回合 | 2,734(剩余 token 的 40.2%,723 个实例) | 回合级屏蔽会删掉大量正当推理,不可行 |
| 只留未命中上述筛查的实例 | 188/936 | 大幅减小覆盖,也可能改变难度分布,不能当正式筛选方案 |
结论:需确认的探查与失败工具调用可经语义复核后屏蔽或隔离处理;含相关措辞的回合也承载大量实质分析;优先在干净环境里重新执行生成替代示范。只删推理文字、改写成仿佛独立想到的答案,可能破坏因果上下文,需独立消融。
抽样总体为 A+C3 的 15,447 个被监督回合(A 本身为 15,434),按类型分为 4 层:含 H3(1,062)、含 U(71)、仅 H1/H2(872)、其他(13,442)。每层随机抽样,抽样单位为回合,层内不放回随机抽样,允许同一实例重复。两名标注员看到相同的可见前后文,彼此独立,不知道对方标签和总体统计;命令本身可见,因此不称完全双盲。一致性:imitate κ=0.68,类别 κ=0.71,找答案意图 κ=0.78,信息增益 κ=0.38(偏弱)。
以下按同一特征定义、同一文件写入检测器复算。训练分母含 A+C3 的 15,447 个监督回合;评测分母为各轮所有 assistant 回合。输入是下一动作之前的可见状态,文件写入仅为命令/工具返回启发式,不能称“改对”。
| 状态 | 教师监督 | 基座 | Run1 | Run2 |
|---|---|---|---|---|
| 第100个assistant回合之后 | 0/15,447(0.00%) | 2,668/5,590(47.73%) | 554/2,872(19.29%) | 1,992/4,838(41.17%) |
| 最近≥15次调用未检出文件写入 | 1,237/15,447(8.01%) | 4,062/5,590(72.67%) | 1,644/2,872(57.24%) | 3,411/4,838(70.50%) |
| 近5次调用同一调用重复≥3次 | 0/15,447(0.00%) | 2,263/5,590(40.48%) | 714/2,872(24.86%) | 1,162/4,838(24.02%) |
| 前一回合被length截断 | 0/15,447(0.00%) | 95/5,590(1.70%) | 94/2,872(3.27%) | 70/4,838(1.45%) |
| 输入上下文≥64,000 token | 5/15,447(0.03%) | 1,515/5,590(27.10%) | 319/2,872(11.11%) | 1,107/4,838(22.88%) |
| 当前思考≥20,000字符 | 3/15,447(0.02%) | 92/5,590(1.65%) | 90/2,872(3.13%) | 69/4,838(1.43%) |
最直接的覆盖缺口是重复调用之后与截断之后:学生两轮约四分之一回合发生在重复状态下,训练监督为 0;学生两轮 164 个回合接在 length 截断之后,训练为 0。第 100 回合之后占学生两轮回合的 33.0%,训练为 0。这支持“当前成功教师轨迹没有提供这些状态下的直接恢复目标”,不证明成功示范没有预防作用。
基座也已有循环与长失控;同一检测器下,基座 26/50 题出现重复状态,29/50 题出现≥20K字符思考。不能把复读起源全部归于 SFT。回合份额会被少数超长轨迹放大,按任务计 Run1/Run2 的重复状态仍分别覆盖21/50、20/50。上下文的训练侧用序列token起点,评测侧用请求input_tokens,仅作量级对照。
另一个与反馈利用相关的错位:独立解析的训练测试命令有 96.7% 为 pytest,Django runtests.py 只有4次;学生两轮识别到的直接测试入口中,runtests.py 为55/304(18.1%)。这不能作为加入 benchmark 仓库的理由;应在独立训练仓库补充按项目规范选择入口、读取错误后改变操作的示范。
| 维度 | 结论 | 依据 |
|---|---|---|
| 格式与台账一致 | 合格 | PR #7 已核对 1,735/1,735 个视图的 token、mask 和台账,没有非 assistant 监督位置。 |
| 结果可信度 | 有执行依据,需重审 | 936/936 通过 evaluator。旧审核标记 7 个上游实现依赖;本轮粗匹配 11 个候选(有重叠),需排除更早已见代码和正常依赖。330 个任务只声明 1 个 F2P 节点,测试判别力未验证。 |
| benchmark 隔离 | 精确家族检查通过 | 与受保护 SWE Verified 仓库名单精确交集为 0;fork/语义近重复未全面复核。未来信息访问需另审。 |
| 过程监督:动作 | 需修订 | H3/U候选回合 1,133 个;抽样H3回合中 71% 两模型都判不应模仿。失败的 read/edit 被监督 440 回合。 |
| 过程监督:推理 | 高风险,需语义重审 | 71.5% 的监督 token 所在回合含 R1–R3 措辞,不能整块计作坏监督。屏蔽 H3/U 后,40.2% 的剩余 token 仍位于命中 R2/R3 的回合,不等于这些 token 全部有害。 |
| 工具协议示范 | 不合格 | 成功的 edit 57/219、read 21/392,几乎没有原生工具的正确示范。 |
| 学生状态覆盖 | 恢复状态覆盖不足 | 重复/截断后监督未检出;≥64K上下文监督极少。是分布缺口,不证明教师示范无预防价值。 |
| 重复与权重 | 去重可改善 | 合并后 989 个视图;恢复区域的曝光份额只从 3.75% 升到 3.82%(PR #7)。 |
| 可迁移性 | 风格迁移强证据 | 教师特有命令和推理措辞从基座 0/50 升到 SFT 后的 32–48/50。 |
| 症候(基座→Run1→Run2) | 数据里的正面示范 | 数据里的反面示范 | 合并去重后的预期 |
|---|---|---|---|
| 查 git 历史 9→46→45 | H1/H2 正当查史 | H3 568/936 个实例、推理明说找目标提交 | 仍被监督:去重不碰 A 的 mask |
| 长截断复读 29→40→40 | 被监督思考 P50 约 52 token;长截断之后的恢复示范未检出 | 未检出静态复读文本 | 无直接治疗证据 |
| 首次修改前失控 12→25→19 | C1 早期修改(去重后权重下降) | 86.8% 的 H3 出现在首改之前,示范了“先找答案” | 无改善依据 |
| 无成功修改 9→19→17 | bash 写入示范很多 | 成功的原生 edit 只有 57/219 | 无改善依据:edit 报错从 23/136 升到 42/118 |
| 自然完成 15→5→5 | 904/936 条最终报告被监督 | — | 不是缺少报告样本:能否到达正确收尾状态仍需验证 |
| 遇错不改策略 | B 的 40 个恢复窗口(恢复曝光只占 3.82%) | 失败调用被正向监督 | 覆盖太窄 |
| 比较项 | FailForge · 2026-08 | OPRD · 2026-10 |
|---|---|---|
| 真正解决什么 | 原RFT把持续失败任务丢弃,导致能力缺口;把失败变成可模仿的成功执行。 | 成功轨迹SFT不能充分利用失败状态;用提醒条件教师在学生自身前缀上提供在线分布监督。 |
| 谁重执行 | 强教师 Kimi-K2.6;不是 Qwen3.5-4B。5次全失败→技能归纳→同一教师再跑5次→保留首条验证成功。 | 当前学生在线执行,无提醒;教师不重采样,只给同一学生前缀打分。 |
| 训练对象 | 原成功集+恢复轨迹,移除注入技能正文,标准SFT/NLL。 | 先8,000条Coding SFT,再2,000条IF SFT;在线成功支路NLL,失败支路Top-100 reverse KL。教师为同架构模型,20/40/60/80%刷新。 |
| 关键证据(各自协议) | 4B Verified:RFT 59.6→66.2;等样本数替换59.6→63.8;无gold版64.2。Hint救回352题却只有63.8,程序技能救回218题得到66.2,说明救回数量不能替代监督质量。 | 4B Verified:基座50.4→Coding53.6→IF55.8→完整OPRD61.2。IF后提醒跟随率49.3→77.1;446→222错误事件属于完整OPRD,不能归给IF。 |
| 本项目隔离约束 | 主版诊断读取gold patch,泄漏裁判也读补丁,不能原样使用。可借无gold消融,只用允许可见的失败轨迹和真实观察;隐藏判分仍留独立入口。 | 提醒不得揭示参考补丁;全局提醒可能用最终测试日志。本项目须限制为合法可见反馈,不能把隐藏judge日志搬进教师输入。 |
| 数据/计算成本 | 已有标准SFT可复用;成本在真实环境重执行与教师采集。文中训练超参指向未读到的附录,无法核实LoRA/全参。 | IF子阶段可单独测试;完整OPRD需要在线rollout、同词表教师logits。论文配置16×H20、131K训练上下文;不是最小硬件下限,也没有本地双5090/LoRA吞吐证据。 |
| 当前最主要短板 | 仍是教师分布;容易再次收集“顺利成功”而覆盖不到学生卡住状态;不清洗行为会继续蒸馏捷径。 | 2,000条IF的完整构造与生成者未披露,不能据此复制数据;只做IF不能获得完整在线算法的61.2结果。 |
选择依据:当前要产出可供已有LoRA SFT消费的新数据,FailForge的恢复后SFT、等规模替换、无gold消融与目标更直接匹配。它没有要求改成白盒在线KL,便于把改进归因于数据。OPRD的优势在后续在线阶段:它正面解决学生访问状态与教师成功轨迹不同的问题。本轮应把IF当作竞争假设:若“收到明确提示仍不会遵循”是主要瓶颈,IF可能比增加程序性成功轨迹更合适,需对照决定。
本地改造应如何命名:在独立训练任务上采当前冻结学生的真实失败前缀,教师从同一可重放状态继续,按“失败原因→可迁移程序指导→真实执行→独立验证”生产替代目标。这是FailForge式、学生失败状态驱动的纠偏SFT,不是论文原样复现。前缀与工具观察loss=0,只监督经核验的新恢复输出;不把教师续写充作fresh RL组成员。
移除指导≠消除依赖。教师动作来自 π(a|历史,指导),删掉指导后训练 π(a|历史) 会有条件分布错位。FailForge只删注入技能、不改动作与推理;其“把推理改写成自行发现”的消融反而降至62.0。因此不能任意清洗文句或伪造发现过程。受污染前缀要从污染之前的真实快照重新执行;对无gold程序指导,应检查剩余可见证据能否支撑后续动作,并用无指导恢复评测验收。
两篇都未报告本项目的git探查/长复读指标,也未提供LoRA专属消融;主要成绩均未报多种子方差或置信区间。不同harness、任务分母、温度和回合预算下的百分比只用作论文内部证据,不能预测本项目能回到20/50或提高多少分。
| 顺序 | 最小动作 | 准入证据 |
|---|---|---|
| P0 数据身份 | 保留原train/dev家族划分;C1/C2作为标签合并,B按源轨迹控制重复;C3单列语义复核。 | 新版本清单、原始hash、源消息位置和mask差异。989/976只是全量候选情景,不能把旧dev直接放训练。 |
| P0 净化 | 隔离确认读取并采用本项目外部答案实现的整条轨迹;复核H3/U,屏蔽明确越界探查和失败原生工具调用,保留真实观察与后续合法恢复。 | 逐条证据链,区分依赖库资料、当前源码symlink、旧代码删除锚点和实际新增实现。不能直接删除所有H3/U。 |
| P0 工具一致 | 让生成环境提示中的路径与read/edit真实可用路径一致,补真实成功read→edit→测试→结束序列。 | 成功工具返回和真实文件变化;不以exit=0替代工具成功,不要求一律native edit。 |
| P1 恢复生产 | 以当前学生在训练任务上的失误分布分层:重复探索、错误测试入口、工具契约、修改后回归、有效验证后的结束。优先替换低质监督,不先放大现有40条B。 | 真实可重放前缀、合法可见反馈、恢复动作及独立判分;新增状态覆盖与唯一实例数。 |
| 组 | 相同数据底座上的变化 | 所检验的问题 |
|---|---|---|
| D0 | 共同去掉已确认外部答案依赖后的A/C去重+B | 安全、可复算的参照分布 |
| D1 | D0+语义确认的坏动作mask与工具合同修正 | 过程净化是否改善行为 |
| F | D1中等监督token替换为无gold程序指导重执行的恢复轨迹 | 程序性失败恢复是否改善解题与退出 |
| I | D1中等监督token替换为IF/反馈遵循恢复样本 | 约束遵循是否是更直接瓶颈 |
F/I使用同一批独立训练任务或失败状态、同一教师、同等采集预算;各组从同一官方Qwen3.5-4B重新初始化LoRA,固定r16/α32(历史正式run配置)、目标模块、学习率调度、优化器、模板和有效监督token预算。与1个epoch或206步不能混为相同预算。主要评测不加提醒;另设带提醒诊断,检验“会不会遵循”与“能否自主纠错”。
主指标:独立家族dev上的真实resolved、配对新增回归和无指导恢复率;辅助指标:明确越界探查率、重复/长截断、有效文件修改、修改后验证、自然结束以及每题token/时间成本。先冻结阈值和协议再训练;现有SWE50已用于形成假设,仅作诊断,不能反复用来选数据或checkpoint。最终使用未参与选型的holdout并报配对置信区间,候选补种子或增大样本;50题中一题即2个百分点,不能凭一题差距宣布优胜。
<tool_response> 顺序配对;超过 4,000 字符的推理只保留首尾,所以推理措辞的统计是下限。冻结统计、抽样清单、两份标签、原文摘录与独立审查存于 storage/audits/sft-git-history-20261030/。行为规则是诊断工具,不用于自动重写训练资格。
python -X utf8 analysis/swe/extract_train_tool_calls.py --source-root E:/Deeplearning/local_train --out <scratch> DSH_REPO=E:/Deeplearning/deepseek-harness node --experimental-transform-types analysis/swe/extract_eval_tool_calls.mjs <scratch> base=<base-run> run1=<run1-run> run2=<run2-run> python -X utf8 analysis/swe/audit_git_history_supervision.py --dump <scratch> --out <audit.json> --labels storage/audits/sft-git-history-20261030/sample-labels.json --strata storage/audits/sft-git-history-20261030/sample-manifest.json python -X utf8 analysis/swe/build_git_audit_report.py --audit <audit.json> --extras storage/audits/sft-git-history-20261030/report-extras.json --out <report.html>