1. 项目概述:当代码修复遇上噪声数据
在GitHub等开源社区中,每天都有成千上万的issue被创建和关闭。传统观点认为,清晰的问题描述是修复bug的关键前提。但现实情况往往令人意外——我们团队在分析SWE-bench数据集时发现,约38%的issue存在描述与最终解决方案不匹配的情况。这种"文不对题"现象导致基于LLM的软件代理在训练时学到错误的模式关联。
SWE-Fuse框架的突破性在于:它不再盲目相信问题描述与代码修改之间的表面关联,而是教会模型像资深工程师那样,通过测试失败反馈和代码上下文来逆向诊断问题。这就像让一位医学生不再依赖患者的主诉症状,而是通过实验室检查结果来确诊疾病。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心架构解析
2.1 无问题轨迹学习模块
这个模块的创新点在于构建了"双轨制"训练数据:
- 常规轨迹:包含原始问题描述+代码修改历史
- 净化轨迹:完全移除问题描述,仅保留测试失败信息与最终补丁
我们采用渐进式混合策略:
- 初期使用70%净化轨迹+30%常规轨迹
- 随着训练进行,逐步调整到50:50比例
- 最终阶段加入25%的"噪声增强"样本(故意错配描述与解决方案)
关键技巧:轨迹过滤使用三阶段验证
- Git元数据校验(排除cheating提交)
- 测试用例反向验证(确保补丁确实修复了失败用例)
- 人工标注的黄金数据集交叉验证
2.2 熵感知RLVR训练
传统PPO算法使用固定裁剪半径(ε=0.2),这在软件修复任务中会导致:
- 高熵阶段(探索期)过早收敛
- 低熵阶段(稳定期)缺乏微调能力
我们的改进方案:
python复制def dynamic_clip(entropy):
base_epsilon = 0.2
if entropy > 0.7: # 高不确定性
return min(0.5, base_epsilon * (entropy/0.7)**2)
else: # 低不确定性
return max(0.05, base_epsilon * (entropy/0.7))
实际训练中观察到三个典型阶段:
- 混沌期(前500步):熵值>0.9,裁剪半径自动放大到0.4-0.
