SWE-Swiss-32B 发布:一个在软件修复任务上达到顶尖水平的 32B 开源模型

大语言模型4个月前发布 小马良
421 0

由北京大学、字节跳动 SEED 团队与香港大学联合研发的 SWE-Swiss-32B 正式亮相。

该模型在 SWE-bench Verified 基准测试中取得 60.2% 的通过率,不仅在同规模开源模型中树立新标杆,更与部分更大规模的闭源系统处于同一性能区间。

其背后是一套系统性的训练策略——SWE-Swiss 配方:通过多任务监督微调 + 强化学习优化,让模型掌握软件问题解决的三大核心能力:定位、修复、测试验证

SWE-Swiss-32B 发布:一个在软件修复任务上达到顶尖水平的 32B 开源模型

更重要的是,团队将完整模型权重与训练数据集全部开源,为社区提供了一个可复现、可扩展的高质量代码智能范本。

核心目标:打造真正会“修 Bug”的 AI 模型

当前许多 AI 编程助手擅长生成代码片段,但在面对真实 GitHub 项目中的复杂 Bug 时,往往束手无策。

SWE-Swiss 的目标不是写代码,而是完整模拟开发者解决实际问题的流程

  1. 定位:找出需要修改的文件
  2. 修复:生成能通过测试的补丁
  3. 验证:确保修复有效且不引入新问题

这三步构成了一个闭环的软件工程工作流。SWE-Swiss 的训练方法,正是围绕这三个能力展开的“结构化课程设计”。

SWE-Swiss-32B 发布:一个在软件修复任务上达到顶尖水平的 32B 开源模型

SWE-Swiss 配方:三技能课程 + 两阶段训练

整个训练分为两个清晰阶段:

  • 第一阶段:多任务监督微调(SFT)
    同时训练定位、修复和单元测试三大能力,建立通用理解
  • 第二阶段:强化学习(RL)优化修复能力
    在真实测试环境中获取反馈,持续提升最关键任务的表现

这种“先广度、后深度”的策略,使模型既能全面理解问题,又能精准执行关键操作。

第一阶段:高质量 SFT 数据构建

所有能力的基础,是高质量、经过验证的训练数据。SWE-Swiss 采用“验证拒绝采样”策略:先生成大量候选样本,再通过自动化测试筛选出真正成功的案例。

1. 定位任务:精准找到要改的文件

  • 目标:根据问题描述,预测需修改的文件列表
  • 数据来源:SWE-bench 和 SWE-Gym-Raw 中的真实 issue 与对应 commit
  • 生成方式:用 DeepSeek-R1-0528 根据问题和仓库结构预测文件
  • 筛选标准
    • 预测文件数 ≤ 5
    • 召回率 = 1.0(所有真实修改文件都被覆盖)
  • 结果:构建出 5,302 个高质量定位样本

这确保模型学会“聚焦”,避免盲目扫描整个项目。

2. 修复任务:生成可通过测试的补丁

  • 目标:基于问题描述和目标文件,生成正确的代码补丁
  • 环境支持:使用 SWE-gym 和 SWE-smith 提供的 Docker 环境进行安全执行
  • 输入增强:除真实文件外,还加入干扰文件(LLM 错误预测的文件),提升难度
  • 筛选标准:补丁必须在真实测试套件中完全通过
  • 结果:获得 3,935 个成功修复样本

每一条数据都是“已被验证的有效解决方案”,而非猜测。

3. 单元测试生成:为修复提供验证能力

  • 目标:根据问题描述,生成能重现 Bug 的新测试用例
  • 筛选标准:生成的测试必须满足:
    • 对正确补丁 → 通过
    • 对错误补丁 → 失败
    • 行为与原始测试一致
  • 结果:构建 1,017 个高质量测试生成样本

这赋予模型“自我验证”能力,是实现可靠自动化修复的关键一环。

🚀 第二阶段:强化学习优化修复能力

在完成多任务 SFT 后,模型已具备基础能力。接下来,团队聚焦最关键的“修复”任务,引入基于真实测试反馈的强化学习

训练机制

  • 模型:以 Qwen2.5-32B-Instruct 为基座,SFT 后命名为 SWE-Swiss-SFT
  • 算法:采用 GRPO(Group Relative Policy Optimization)
  • 奖励函数:二元信号
  • 关键技术
    • 无 KL 损失
    • 更高剪裁阈值
    • 动态采样
    • 引入 DAPO 的令牌级策略梯度损失

课程式训练策略(受 POLARIS 启发)

为避免模型在简单任务上过拟合,采用两阶段 RL 训练:

  1. 第一阶段(200 步):全量数据训练,建立广泛能力
  2. 第二阶段(90 步):移除模型已掌握(准确率 >90%)的问题,集中攻坚难点

📈 性能表现:从 36.0% 到 60.2%

阶段SWE-bench Verified 分数说明
基线(Qwen2.5-32B-Instruct)~20%(估计)未经专门训练
SFT 后(SWE-Swiss-SFT)36.0%多任务学习已显著提升
RL 后(单补丁)45.0%超越 DeepSeek-R1-0528(43.2%)
多补丁 + 测试时扩展60.2%达到当前开源模型领先水平

注:评估流程基于 Agentless 框架,确保公平可比。

这一提升充分证明:结构化训练 + 真实反馈优化 是通往高性能代码智能的关键路径。

测试时扩展:增强的自一致性机制

传统自一致性依赖“精确匹配”进行多数投票,在代码生成中效果有限——因为语义相同的补丁可能有多种写法(变量名不同、缩进差异等)。

为此,SWE-Swiss 提出 增强的自一致性(Enhanced Self-Consistency)

综合评分 = 精确匹配分 + 相似度代表分

  1. 精确匹配分(Score_EM)
    候选补丁在多次生成中出现的频率
  2. 相似度增强分(Score_Sim)
    • 使用编辑距离计算所有生成补丁间的相似度
    • 对每个候选,取 top-k(k = 总数一半)最相似邻居
    • 计算平均相似度,反映其在“合理解簇”中的代表性

最终选择综合得分最高的补丁作为输出。

这种方法既保留高频模式,又捕捉语义等价的变体,显著提升选择准确性。

多补丁生成与过滤流程

为提高成功率,系统支持生成多个候选补丁,并通过两轮过滤筛选最优解:

  1. 第一轮:回归测试过滤
    所有候选补丁运行项目原有测试套件,淘汰失败项
  2. 第二轮:生成测试验证
    • 使用 LLM 生成新的“重现测试”(reproduction test)
    • 先验证该测试能否正确重现原问题
    • 再用其验证候选补丁
  3. 最终选择:使用增强自一致性选出最佳补丁

这套机制显著提升了修复成功率,是 60.2% 高分的关键支撑。

🌐 开源计划

团队宣布将开源以下资源:

  • ✅ SWE-Swiss-32B 模型权重
  • ✅ 完整的训练数据集(定位、修复、测试生成)
  • ✅ 训练与推理代码

项目地址将在近期公开,欢迎关注后续更新。

此举极大降低了复现门槛,有助于推动 AI for Code 领域的可验证研究。

© 版权声明

相关文章

暂无评论

none
暂无评论...