SWE-Critix:用 SFT 加强化学习训练“通用验证器”,给编程智能体的长轨迹判成败并说明理由,准确率从 57% 提到 78%

Published · AI Daily — AI-assisted deep research, methodology & disclosure

论文 2610.13356 针对“没有现成评测器时,如何判断编程智能体做对了没有”:先用教师模型对同一问题的成功与失败轨迹做对比分析,生成少量带推理链的监督数据,再用不含推理链的轨迹做强化学习,训练出 30B 级的验证器。在 4.3 万多条长轨迹的留出测试集上,基础 Qwen3-30B-A3B 推理模型准确率为 57%,监督微调后 66%,强化学习后 78%。模型、数据集和训练代码已开源。

论文 2610.13356 于 2026 年 10 月中旬出现在 arXiv 上,题目是《SWE-Critix:为评估编程智能体轨迹而后训练通用验证器》。它抓住的问题,随着编程智能体越来越能干而越来越突出:它们不再只是写一段代码,而是能检查仓库、改文件、运行命令和测试、解读反馈并反复修改,从单个函数的生成扩展到仓库级的议题解决,乃至长周期的软件开发任务。智能体越自主,就越需要可靠地验证它的执行轨迹,也就是它一步步解决任务的完整记录。可是在真实的端到端任务里,常常没有一个现成的、定义了成功标准的评测器。于是就需要一个验证器,判断智能体是否完成了任务,失败时还要指出原因。 难点在于轨迹本身。一条轨迹可以包含数百轮穿插的用户输入、环境反馈和模型回复,比一次性的模型回答难检查得多。论文引用的一个例子说,LoLBench 里的任务轨迹跨越 53 到 532 轮。作者把现有做法沿两个维度整理:验证的对象是只看最终结果(比如提交的补丁),还是也检查过程以发现不良的中间行为;验证的方法是不训练还是训练。不训练的方法直接用通用大模型或基于规则的评判;训练的方法则学习专门的评论器,又可以按是否只输出标量奖励来区分。按这个分类,基于训练、面向过程的通用验证还没有被充分探索。SWE-Critix 就想填这个空白:给定任务和执行轨迹,学到的验证器既预测完成与否,又生成一段自然语言分析来解释判断。

训练管线分几步。数据来自 CoderForge-Preview(摘要中写作 CodeForge-Preview),这是一个大型开放数据集,包含 25.8 万条轨迹(15.5 万条通过、10.3 万条失败),覆盖 1,655 个仓库的 5.1 万个议题。这些轨迹由 OpenHands 框架搭配 Qwen3-Coder-480B 生成,来自三个提供可执行环境的任务来源。作者进一步剔除超过 64K 词元或没有提交补丁(比如任务未完成)的轨迹,过滤掉 16% 的数据,再把剩下的分成监督微调、强化学习和测试三份。监督微调集里,从每个同时含有成功与失败轨迹的议题各挑一条成功和一条失败;强化学习集则包含所有剩下的失败轨迹,并按议题轮流采样成功轨迹直到两类平衡,以尽量覆盖不同的议题。 监督阶段的关键是推理链的来源。作者用更强的教师模型(GPT-5.5)对每一对成功与失败轨迹做对比分析,总结各自的过程、错误模式和导致成败的关键因素,并把得到的推理链后处理成适合逐条判断的形式,然后组装成监督微调样本。选择成对比较,是依据先前的研究:大模型做成对评判比做单个评判更好。他们从 Qwen3-30B-A3B-Thinking-2507 出发微调,在 16 个节点共 128 块华为昇腾 910B 的 NPU 上,用 MindSpeed-LLM 训练三个轮次、975 次迭代,大约 15 小时。强化学习阶段则使用其余 91.3% 只有单元测试结果、没有推理链的数据,奖励是简单的基于规则的结果奖励:预测的判断与单元测试得出的真实结果一致得 +1,否则 -1。训练用 VeRL 与 GRPO,组大小为 8,在 8 个节点共 128 块昇腾 910C 的 NPU 上进行,一个轮次 3,396 次迭代,约需 533 小时。

评测很直接:能不能分辨成功与失败的轨迹。测试集有 4.3 万多条长轨迹,每个模型对每个样本只评测一次,用 vLLM Ascend 部署在一个含 16 块昇腾 910C 的节点上,并报告准确率,以及正类(成功)与负类(失败)的精确率、召回率和 F1。结果显示出清晰的递进。基础 Qwen3 MoE 模型强烈倾向于把轨迹判为正确,负类召回率在所有子集上几乎为零,而且 9.6% 的回复不符合要求的输出格式,无法可靠提取判断。监督微调同时缓解了这两个问题,所有回复都严格遵守提示的格式,对正类的偏向也明显减轻。继续做强化学习,整体准确率从 66% 升到 78%;监督微调主要纠正的是基础模型的强烈正向偏置,而强化学习进一步增强了判别能力,把正类召回率从 67% 提到 85%,且没有明显牺牲负类召回率。 作者也坦率地写了不足。其一,R2E-Gym 子集上的表现明显低于 SWE-Rebench 和 SWE-Smith,一种可能的解释是它的数据量较小。其二,模型识别失败轨迹的能力仍然较弱,整体负类召回率只有 64%,这说明失败轨迹的模式更多样、信号更细微,更难与成功轨迹区分。未来工作里,作者计划引入 Open-SWE-Traces 等其他数据来源,用不同模型与框架的组合合成轨迹,并研究 2 比 1、1 比 2、4 比 1 等不同的正负类比例,而不仅是平衡配比。需要注意的是,所有轨迹都由同一个框架和同一个模型生成,这意味着验证器在别的框架、别的模型上的表现尚无证据。 我们的判断是,SWE-Critix 的意义在于证明“带理由的判断”可以通过相对简单的两阶段流程学出来,并且把模型和训练代码公开,方便别人复现和改进。同时要看清它的边界:这是一份自称初步的评估,每个样本只测一次;78% 的准确率意味着仍有明显的误判;对失败轨迹的识别比对成功轨迹弱,而在实际使用里,漏掉失败往往比误报更危险。如果团队想在自己的编程智能体流水线里用这类验证器,更稳妥的做法是把它当作辅助信号,与单元测试、人工抽查和独立的评测环境一起使用,并先在自己的轨迹上测一遍分类表现,再决定放在哪个环节。

Sources

FAQ

SWE-Critix 要解决什么问题?

真实的端到端软件工程任务里,往往没有现成的、定义成功标准的评测器。需要一个验证器来判断智能体是否完成任务,并在失败时指出原因。难点是轨迹可能含数百步与仓库、工具的交互。现有验证器要么直接用通用大模型,要么训练只输出标量奖励的评论器。

它是怎么训练的?

先用更强的教师模型(GPT-5.5)对同一问题的一条成功轨迹和一条失败轨迹做对比分析,总结各自的过程、错误模式与成败关键,据此构造少量带推理链的监督微调样本;再对其余 91.3% 没有推理链、只有单元测试结果的数据做强化学习,奖励规则是预测与测试结果一致得 +1,否则 -1,使用 GRPO。

结果怎样,有什么局限?

在超过 4.3 万条长轨迹的留出测试集上,准确率从基础模型的 57% 提高到 SFT 后的 66% 和 RL 后的 78%;正类召回率从 67% 提高到 85%,但对失败轨迹的召回仅 64%。R2E-Gym 子集成绩明显偏低,可能与数据量较小有关。作者称这是初步评估,每个样本只评测一次。