0/1 奖励
所有通过测试的执行轨迹都得到相同奖励。一次精准修复和一次带有多余改动的修复没有区别。
主动检查代码
另一个能读取代码仓库的模型系统担任判分 Agent,同时查看任务、执行轨迹、代码改动与测试输出,只给成功候选排序。
重新分配
低质量成功样本让出一部分 advantage,高质量样本得到更多训练权重。
同一道编程任务会生成多次完整尝试(rollout)。GAGAR 先比较其中已通过测试的代码质量,再重新分配正训练权重(advantage)。
所有通过测试的执行轨迹都得到相同奖励。一次精准修复和一次带有多余改动的修复没有区别。
另一个能读取代码仓库的模型系统担任判分 Agent,同时查看任务、执行轨迹、代码改动与测试输出,只给成功候选排序。
低质量成功样本让出一部分 advantage,高质量样本得到更多训练权重。
动态采样只保留同时包含成功与失败的尝试组。基础 advantage 等于每条轨迹的 0/1 奖励减去组内平均奖励。
相同的仓库初始状态与任务要求。
每条都包含推理、工具调用、观察结果与最终代码改动。
基础检查器只判断可执行测试是否通过。
全过或全错的尝试组不用于这次组内学习。
它先读执行摘要,再按需检查完整轨迹、代码位置和测试日志,还可以运行有针对性的检查。
任务要求与仓库初始状态。
Agent 怎样搜索、修改、测试与修正。
改了哪些文件与代码位置。
测试输出与判分 Agent 自己运行的检查。
先分档,再在同一档内排序,允许并列。
是否解决根本原因,策略是否合理。
修改位置是否正确,行为覆盖是否完整。
是否只做必要改动,避免无关重构。
是否破坏周边行为或公开接口。
是否复用现有抽象和代码约定。
各维度至少 4 分且没有严重问题。第一名系数为 1.0,后续并列组为 0.9。
中间档按并列组排名,从 0.85 线性下降到 0.4。
包含未要求的大规模重写、只对测试生效的绕过方案等严重缺陷,系数固定为 0.2。
论文没有发布真实尝试组。下面只演示公式 2,不代表观察到的训练样本。
4 次尝试中,2 次通过、2 次失败,因此 R̄=0.5。两个成功样本的原始 advantage 都是 +0.5。
假设两个成功实现分别为 T1 与 T3,系数为 1.0 与 0.2。
λ=1/(0.5×1.0+0.5×0.2)=1.667,两个正 advantage 变为 0.833 与 0.167,总和仍为 1。
这是按论文公式构造的教学例。判分提示词、真实候选代码与逐项评分没有公开。
正 advantage 总量不变,失败样本的 advantage 不变,组内平均值仍为 0。
λ 被截到 1.5,随后重新减去组内平均值。排序保留,但正权重总量与失败样本的 advantage 不再严格保持。
固定随机抽取 30 个 DeepSWE 任务,由 Claude Opus 5 读取保存的执行轨迹、代码改动与测试结果。论文没有报告人工复核或不同判分者之间的一致程度。
| DeepSWE 第 28 步 | 完整 GAGAR | 只降权 |
|---|---|---|
| 三次采样平均通过率 | 62.2% | 56.2% |
| 平均交互轮数 | 111.6 | 143.5 |
| 平均 token 数 | 172.9k | 236.0k |
| 第 30 步的策略熵(输出选择的分散程度) | 0.513 | 0.905 |
把可执行测试保留为正确性门槛,再在成功轨迹内比较可维护性;同时守住正负 advantage 的量级。
公开匿名化的任务、尝试组、代码改动和评分数据包,让人工审查者与不同判分 Agent 重复评分,并报告稳定性和开发者返工时间。