补丁被拒不再白费:失败反馈喂进训练,SWE-bench 首解从38.9%升到41.7%
核心概要
仓库级软件工程智能体此前只把每次尝试的通过或失败当作终局奖励,失败补丁和验证器反馈被丢弃。FC-SWE 在补丁验证失败后把仓库恢复到原始任务状态,用失败补丁与验证器诊断信息作为上下文再生成一条恢复轨迹,并让每条轨迹保留自己的验证结果、只把同一问题实际执行过的初始与恢复轨迹放进同一个比较组。在全部500个 SWE-bench Verified 任务上,同一 Qwen3.5-4B 策略下首解率从 GRPO 的38.9%升到41.7%,两次尝试累计从48.5%升到52.8%;训练时每条链最多两次尝试,测试时给到十一次尝试可累计解出70.7%。
深度剖析
失败补丁和验证器反馈现在会进入后续尝试的上下文,而不是只留下一个失败标签。 此前的训练把每次尝试独立采样,失败补丁既不触发也不影响训练组里的下一条轨迹。 在全部500个 SWE-bench Verified 任务上,同一 Qwen3.5-4B 策略下 FC-SWE 达到41.7% Resolved@1 和52.8% Resolved@2,GRPO 为38.9%和48.5%,初始策略为27.9%和36.3%。
每条轨迹只拿自己那份验证结果,恢复成功不会把先前被拒的补丁改判为正确。 若把链条最终结果广播给所有已执行轨迹,一次失败后恢复成功的链会把正奖励错误地分给被拒的初始补丁。 去掉轨迹局部奖励、改为共享最终结果后,条件恢复率从20.4%降到17.7%,Resolved@2 从54.8%降到51.8%。
优势估计的比较组由同一问题实际执行过的初始与恢复轨迹组成,未执行的恢复位置不进入统计。 按尝试序号分组会丢掉跨尝试的比较,而把未执行位置计入又会污染组内统计。 训练时每条链最多两次尝试,同一策略在测试时给到十一次验证器引导尝试可累计解出70.7%,GRPO 为67.3%,初始策略为61.1%。
启示与展望
评估覆盖全部500个 SWE-bench Verified 任务,使用 SWE-agent 与官方 SWE-bench 验证流程,控制器在每次尝试后读取基准测试结果与诊断反馈并在成功后停止,因此多尝试数字衡量的是验证器辅助下的恢复,而不是独立采样的 Pass@。受控训练比较使用 Qwen3.5-4B,训练数据来自 R2E-Gym 的十个仓库,与 SWE-bench Verified 无仓库重叠。部署时使用实际可得的验证器、把引导恢复的验证器与最终评分的留出测试分开,是文中提出的下一步。
评估假设每次尝试后都能拿到基准测试反馈,而通过有限测试集并不保证语义正确或完整满足问题描述。受控训练只用一个模型和一套配置,多个解码种子刻画的是推理波动而非独立训练策略之间的差异,部分消融只用单个解码种子,去掉运行时惩罚的对照也仅限共享奖励配置。训练时额外生成恢复轨迹,因此匹配任务与匹配初始组的比较并未匹配总训练算力;推理侧 token 成本是估算值,不是实测端到端时延。
