尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

SWE-RL重排(Rerank)原理:多数投票+回归/复现测试如何选出最优补丁

SWE-RL重排(Rerank)原理:多数投票+回归/复现测试如何选出最优补丁 SWE-RL重排(Rerank)原理多数投票回归/复现测试如何选出最优补丁【免费下载链接】swe-rl[NeurIPS25] Official codebase for SWE-RL: Advancing LLM Reasoning via Reinforcement Learning on Open Software Evolution项目地址: https://gitcode.com/gh_mirrors/sw/swe-rlSWE-RL 是 NeurIPS25 收录的开源项目其 Agentless Mini 流水线通过定位→修复→重排三步自动修复真实软件缺陷。SWE-RL重排Rerank正是流水线的最后一环负责从一次采样生成的多个候选补丁中用多数投票 回归/复现测试组合策略挑出最优补丁从而显著提升自动修复的准确率。本文用通俗的语言拆解 SWE-RL 补丁重排的完整原理与实现细节。 为什么需要重排一次修复为什么会产生多个候选补丁在 SWE-RL 的 Agentless Mini 流程中模型并不是只生成一个修复方案。为了让结果更稳定repair.py会对同一个 bug 反复采样多个候选补丁num_samples参数控制通常几十个。每个候选补丁的质量参差不齐有些补丁能解决问题但引入了新的 bug有些补丁修复了问题但改动方式不同比如改了不同文件有些补丁根本是空输出或格式错误。如果随便取第一个补丁当最终答案准确率会大打折扣。SWE-RL重排的价值就在于把碰运气变成有依据地选择利用补丁之间的共识和测试反馈把最可能通过评测的那一个挑出来。 SWE-RL 重排三步流水线归一化→测试筛选→多数投票重排的核心逻辑全部集中在 src/swerl/agentless_mini/rerank.py入口main()按顺序执行三步步骤函数作用① 补丁归一化normalize_patches把原始补丁转成统一格式用于后续去重② 加载测试结果_load_results读取回归测试、复现测试的执行结果③ 多数投票majority_voting综合测试筛选 投票选出最终补丁第一步补丁归一化Normalize模型输出的补丁格式五花八门行号、缩进、空行都可能不同。normalize_patches会调用 utils/data.py 中的normalize_patch把每个补丁转换成标准化 diff。只有格式统一之后才能判断两个补丁是否本质相同这也是后续去重和投票的基础。第二步加载回归/复现测试结果_load_results会读取两类测试文件output_{i}_regression_test_results.jsonl回归测试执行结果记录每个补丁导致多少条原本通过的测试失败output_{i}_reproduction_test_results.jsonl复现测试执行结果记录每个补丁让多少条复现测试通过。这两类信号一负一正构成了重排打分的基础。文件读写由 utils/misc.py 的load_jsonl完成。️ 多数投票机制重复出现的补丁为什么更可靠在测试筛选之后剩下的候选补丁可能仍有多个。这时 SWE-RL重排 使用多数投票Majority Voting定胜负统计每个归一化补丁出现的次数得票最多者胜出如果票数相同则取最早出现的那个见get_selected_id位于 rerank.py。这里的直觉很朴素多个独立采样都得出相同改动说明这个方案更可能是模型的共识答案而非随机噪声。把重复的补丁合并后再投票本质上就是按去重后的版本计数避免同一个补丁的微小变体互相分流票数。 回归测试筛选如何确保修复不破坏已有功能回归测试重排的评判标准是补丁让多少条原本通过的测试失败失败越少越好。核心逻辑在select_patch_ids_by_regressionrerank.py统计每个补丁导致的真实回归失败数只统计在原仓库中本来就通过的测试只保留失败数最少的补丁如果某个补丁压根没有回归测试结果会被记一个 10000 的大惩罚值直接淘汰。一句话总结宁可不修也不能修坏。回归测试筛选保证了选出的补丁不会让原有功能大面积退化。✅ 复现测试筛选CodeT 共识集如何选出最优补丁复现测试重排从正面衡量这个补丁真正解决了多少问题。它的实现借鉴了 CodeT 的思路select_patch_ids_by_reproductionrerank.py记录每个补丁通过的所有复现测试编号存为集合把通过的测试集合完全相同的补丁归为一组共识集按公式测试数² × 补丁数给每个共识集打分得分最高的共识集中的补丁进入下一轮。这个公式的精妙之处在于双向约束既要通过的测试多又要认同这个结果的补丁多。如果一个补丁通过了很多测试但只有它自己这么认为分数反而可能不如通过测试较少但大家一致认同的补丁——因为后者更可能是稳定的正确解。 四种组合策略回归与复现测试如何协同SWE-RL重排 并没有只用一个测试信号而是把回归筛选和复现筛选组合出四种策略按优先级依次尝试见 rerank.py优先级组合策略筛选顺序特点1回归→复现先按回归失败最少再按复现共识集最稳妥优先不破坏旧功能2复现→回归先按复现共识集再按回归失败最少优先保证解决问题3仅复现只看复现共识集复现测试充分时效果好4仅回归只看回归失败数无复现测试时的兜底只有当高优先级策略无法缩小候选范围时才会降级到下一策略如果四种策略都无法区分候选就退回全部补丁直接做多数投票。你还可以通过--applied_rankers regression reproduction参数灵活控制启用哪些排序器。 快速上手一条命令运行 SWE-RL 补丁重排如果你已经跑完了定位localize和修复repair可以这样一键重排git clone https://gitcode.com/gh_mirrors/sw/swe-rl cd swe-rl pip install -e .[agentless] python -m swerl.agentless_mini.rerank \ --patch_folder ${REPAIR_DIR} \ --num_samples ${NUM_SAMPLES} \ --output_file all_preds.jsonl \ --deduplicate--patch_folder修复阶段输出的补丁目录--num_samples每个 bug 的采样补丁数需与修复阶段一致--deduplicate按归一化补丁去重后再投票--applied_rankers可选none、regression、reproduction控制启用哪些筛选器。重排结束后会生成all_preds.jsonl里面每个实例只保留一个最终补丁可直接用于 SWE-bench 评测。想了解重排前的定位与修复阶段可以查看 localize.py 和 repair.py如果你想深入 SWE-RL 的强化学习训练与奖励函数设计可参考 src/swerl/core/reward.py 和 src/swerl/core/prompts.py。 总结SWE-RL 重排为何能提升修复准确率SWE-RL重排Rerank的核心思想可以浓缩为一句话先用测试信号筛掉明显不行的补丁再让多数共识决定最终答案。回归测试守住不破坏旧功能的底线复现测试鼓励真正解决问题的方案多数投票则消解单次采样的随机性。三层机制环环相扣让 SWE-RL 在 SWE-bench 等真实软件修复基准上取得了显著更优的表现。如果你也在做代码补丁选择或测试驱动的修复排序这套测试筛选 共识投票的组合思路非常值得借鉴。【免费下载链接】swe-rl[NeurIPS25] Official codebase for SWE-RL: Advancing LLM Reasoning via Reinforcement Learning on Open Software Evolution项目地址: https://gitcode.com/gh_mirrors/sw/swe-rl创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表