Skip to content

SWE 系列 论文阅读

📅 发表于 2025/01/02
🔄 更新于 2025/01/02
👁️ -- 次访问
📝 0 字
0 分钟
swe
#Self-play SWE-RL
#SKyRL-Agent
#InfoCode
#NEBIUS-SWE
#Devstral2
#Devstral
#SWE-RL

(2512) Self-Play SWE-RL (Meta)

摘要

(2511) SkyRL-Agent

🌺 论文摘要

论文摘要

(2511) InfCode

🌺 论文摘要

论文摘要
  • paper

  • InfCode提出对抗式多智能体框架,通过测试补丁与代码补丁生成器的迭代互搏解决仓库级缺陷修复中验证信号弱、补丁易过拟合的问题。Test Patch Generator持续构造更强测试用例以暴露缺陷,Code Patch Generator则针对性改进代码,形成动态强化闭环;Selector智能体最终在容器化环境中评估多候选方案,筛选最可靠补丁。

  • 该方法在SWE-bench Verified上以79.4%准确率刷新SOTA,在SWE-bench Lite上达40.33%,领先基线11例。消融实验表明对抗迭代与选择器分别贡献4.0和8.0个百分点提升。

  • 核心贡献在于将对抗训练思想引入代码修复领域,通过可复现的执行环境与多维度评估机制,显著提升了LLM生成补丁的真实可靠性与泛化能力,为自动化软件维护建立了新的质量保障范式。

问题背景

❓问题背景

问题背景

核心方法

📕核心方法

核心方法

实验设置

✍️实验设置

实验设置

基础模型

训练任务/数据

评测任务/数据

算法/策略

超参

关键结果

🍑关键结果

关键结果

未来方向

⛳ 未来方向

未来方向

(2509) Kimi-Dev

🌺 论文摘要

论文摘要

参考链接

模型效果

核心方法

重要结论

关键贡献

问题背景

问题背景

问题背景

核心方法

📕核心方法

核心方法

实验设置

✍️实验设置

实验设置

基础模型

训练任务/数据

评测任务/数据

算法/策略

超参

关键结果

🍑关键结果

关键结果

模型效果

重要结论

关键贡献

未来方向

未来方向

未来方向

(2508) SWE-Swiss

🌺 论文摘要

SWE-Swiss 论文摘要

参考链接

核心方法

  • 3任务SFT数据构建方法:问题定位+ 问题修复+ 测试生成,蒸馏DeepSeekR1共10k数据
  • 2阶段训练方法:3任务SFT + 2阶段RL 课程学习,难样本:过滤正确率>90的数据。
  • TTS方法:EM + GT代码相似度

模型效果(Qwen2.5-32B-Instruct)

  • SWE-Verified SFT达36RL达45RL提升9pt,增加TTS(best-120) 达60分。
  • 通用任务Math任务代码生成任务上,均有提升

重要结论

  • 虽然工作用SFT,但基于RL做定位,也很有效果

关键贡献

  • 开源数据

问题背景

问题背景
  • Agentless 把SWE分解为固定workflow
  • 如何通过提升各子任务能力,来提升SWE效果

📕核心方法

核心方法

核心思想

  • 提升3技能定位修复单元测试生成

  • 2阶段训练

    • 3任务SFT:分别构造SFT数据

    • 2阶段RL:通过执行反馈 提升修复能力

3任务SFT数据构建(定位+修复+测试生成)

定位+修复+测试生成 SFT数据构建

背景

  • 通过提升3任务能力,来提升SWE能力。
  • 模型:均使用DeepSeek-R1-0528蒸馏模型

问题定位

  • 数据源:SWE-Bench、SWE-Gym-Raw
  • 提取GT修改文件。
  • LLM预测修改文件
    • 输入:Issue + 项目结构;输出:需要修改的文件
  • 筛选标准:recall=1 + 预测文件数<5
  • 最终:5.3k 定位数据

问题修复

  • 数据+环境:SWE-gym、SWE-smith。
  • LLM预测Patch
    • 输入: Issue + GT修改文件 + 相关文件;输出:Patch
  • 筛选标准:单元测试。保留通过的。
  • 最终:3.9k 修复数据

测试生成

  • 数据源:SWE-gym、SWE-smith,同问题修复数据。
  • LLM生成单元测试
  • 筛选标准:实际执行测试结果,需和原测试保持一致。
  • 最终:1k 单元测试生成数据

2阶段训练(3任务SFT + 2阶段RL)

2阶段训练 (SFT + RL)

3任务SFT

  • 10k SFT数据集。
  • 把不同的多任务能力,训进一个单模型。

2阶段RL (课程学习)

  • 奖励设计:通过单元测试:1,其他:-1
  • 阶段1:训200步,全部数据
  • 阶段2:训90步,过滤正确率超90%的样本

测试和TTS

TTS

单Patch生成

  • 2阶段 定位 + 修复
    • 定位模块:先预测相关文件
    • 修复模块:预测文件 + 检索文件 --> 生成修复Patch,检索使用text-embedding3-small

多Patch + TTS

  • 核心:生成多个patch + 过滤patch + 选择最优patch

  • 过滤patch:原测试过滤 + 生成测试过滤

    • 生成测试:Issue+预测相关文件,生成测试用例。测试用例通过一致性选择过滤。
  • 最优patch选择:

    • 传统self-consistency:基于EM做投票选择,数学居多。

    • 增强self-consitency:除EM以外,增加与GT代码相似度得分。

      Score(c)=ScoreEM(c)+ScoreSim(c)

实验设置和结果

✍️实验设置

实验设置

基础模型

  • Qwen2.5-32B-Instruct

训练任务/数据

  • SFT(定位+修复+测试生成):10k 数据
  • RL(修复):SWE-Gym, SWE-smith

评测任务/数据

  • SWE-verified

算法/策略

  • 3任务SFT + RL
  • DAPO技巧:no kl lossclip_higher, 动态采样token-level loss

超参

🍑关键结果

关键结果

模型效果(Qwen2.5-32B-Instruct)

  • SWE-Verified SFT达36RL达45RL提升9pt
  • 增加TTS后,Best-of-120达60分
  • 通用任务Math任务代码生成任务上,均有提升
    • Instruct < SFT < SFT + RL

重要结论

  • 虽然工作用SFT,但基于RL做定位,也很有效果。预测正确:给+1奖励。

关键贡献

  • 完全开源。

未来方向

未来方向

(2508) NEBIUS 长上下文多轮SWE (筛选SWE-rebench数据)

🌺 论文摘要

论文摘要

参考链接

核心方法

  • SWE-rebench数据筛选策略过滤有误数据+控制复杂度+LLM质量评估+确定性测试
    • 选出7k数据 做训练,用Verified-50做快速验证。
  • RFT冷启动方法自蒸馏6.5k轨迹数据 + SFT Mask错误格式动作,仅学习有效动作。
  • 2阶段RL课程学习65k -> 131k全部样本 -> 难度样本
    • 难样本:过滤阶段1期后 正确率 > 2/3正确率=0的样本
  • 部分DAPO技巧超长步数惩罚 + 去掉0优势样本 + Token-level Loss
    • 步数惩罚:鼓励高效和惩罚死循环动作

模型效果 (Qwen2.5-72B-Inst)

  • 训练后,SWE pass@1达39分pass@10达58分持平DeeepSeek-V3-0324

重要结论

  • 不要过滤超长样本要惩罚死循环
  • 训推不一致:采样topk, topp导致词表被截断,解法:关闭filter
  • 未来难题方向:长程信用分配问题盲目自信问题

SWE方法及挑战

❓问题背景

目前SWE方法
SWE 存在挑战
  • Long-Horizon 多轮交互
    • 2阶段RL,YaRN 技术 扩展至131k
  • 反馈复杂:反馈一大堆报错,可能看不懂
    • RFT 冷启动
  • 数据难以构建
    • 对策:使用ReBench做清洗,一套清洗策略
  • 奖励稀疏
    • 对策:GRPO/DAPO,Token-Level Loss
  • 评估贵且有噪声:跑1次要几分钟,还学不到东西;
    • 对策:Verified-50子集去掉Noisy不稳定数据

核心方法

📕核心方法

筛选 SWE-rebench数据

SWE-ReBench 数据筛选

SWE-ReBench

  • 原始:21k任务 + 3.4k python仓库
  • 筛选后:7.2k 任务

数据筛选策略

  • 过滤任务本身有误的数据:如属性错误、引用错误导致不能通过测试等。
  • 控制复杂度修改文件数<7 + 修改代码数<500行
  • LLM评估质量:去掉问题描述不清楚、任务过于复杂test patch有问题的数据。
  • 确定性测试:执行50次,需要结果一致,不一致则过滤。

评测集

  • Verified-50:从SWE-verified 随机选择 50个任务,做训练时验证。
  • SWE-rebench 5月和6月版

环境动作空间 (SWE-Agent Scaffold + ReAct)

SWE-Agent Scaffold + ReAct

动作空间

  • 任意shell命令:ls, cat, grep等。
  • 编辑命令:新闻部替换指定行
  • 自定义搜索和查找:search_file、open、`goto
  • submit:终止

SWE Task

  • Issue描述测试套件sandbox 环境快照

RFT冷启动 (筛选正确轨迹+Mask错误动作)

Rejection Finetuning 冷启动

背景

  • Qwen2.5-72B-Instruct:SWE 仅11分,因为指令格式不遵循

方法

  • 在选定的SWE-rebench任务上,Rollout 10次,仅保留成功的6.5k轨迹
  • SFT 1个epochMask 错误格式动作只学习有效动作
  • 准确率由11提升至20分

DAPO算法+2阶段RL训练

GRPO 算法配置

奖励配置

  • 整体奖励:稀疏奖励 + 步数超长惩罚,全部正确才为1

    Rfinal(τ)=R(τ)+Rlength(τ)
  • 步数超长惩罚惩罚死循环 + 鼓励高效方案

    Rlength(τ)={0,|τ|<LthrLthr|τ|TmaxLthr,|τ|Lthr

GRPO 算法配置

  • 整体同DAPOtoken-level-loss
  • Group-10 计算,但去掉优势为0的样本
  • rollout=10
2阶段RL训练

2阶段RL训练

  • 阶段1:65k,构建baseline
  • 阶段2:131k交互轮数T_max翻倍,处理更复杂问题

阶段2优化

  • 降低clip上限:更新更稳定,防止模型跑偏,(2506) Magistral
  • 增加问题难度:(2506) 课程RL学习(E2H Reasoner)
    • 去掉成功率>2/3的任务
    • 去掉成功率一直为0的任务
  • 增大batch size梯度计算更准确,(2505) Skywork-OR1
  • 减少每次迭代采样的实例数量平衡开销
  • 以上来自推理模型训练经验

实验设置

✍️实验设置

实验设置

基础模型

  • Qwen2.5-72B-Instruct

训练任务/数据

  • SWE-rebench清洗的7.2k 数据

评测任务/数据

  • SWE-verified

算法/策略

  • RFT 冷启动 +2阶段RL训练 (65k -> 131k上下文)

超参

  • 具体见RL算法配置
  • H200,8卡 * 16节点,每节点32核CPU960GB CPU内存

SWE环境

  • agent执行:Kubernetes集群,每个实例 0.5 CPU + 2GB内存
  • 评估:云平台 TractoAI

关键结果(Qwen2.5-72B-Inst)

🍑关键结果

关键结果

模型效果 (Qwen2.5-72B-Instruct)

  • RFT 冷启动微调:SWE-verified 达20分
  • 2阶段 RL训练pass@1达39分pass@10达58分
  • RFT+2RL后: 效果持平 DeepSeek-V3-0324,低于235b-Inst-2507,超过Qwen3-235B。

重要结论

  • 不要过滤丢弃超长样本:实际丢弃了超长负样本,导致死循环得不到惩罚
  • 训推不一致导致训练崩溃

SWE 难题未来方向

⛳ 未来方向

未来方向

稀疏奖励和信用分配问题

  • 背景:长轨迹难以分配奖励信号。

  • 未来方向:

    • Reward Shaping:设计中间奖励,通过部分测试用例、减少编译器保持数量等。

    • 训练辅助Critic:提供step-level的优势估计,实现细粒度更新

    • 前缀采样:从共享非空前缀开始进行多次Rollout,更好知道中间动作哪个动作更好

不确定性和风险感知(盲目自信)

  • 背景:稀疏二值奖励 鼓励agent提交patch:可能表现得很自信但结果不正确
  • 现实:需要识别何时该放弃
  • 方法:
    • 模型显示输出置信度分数
    • Agent自主决定是否重新尝试:自主 Best-of-N 选择

(2508) DeepSWE (Agentic)

🌺 论文摘要

DeepSWE 摘要

参考链接

核心方法

  • Kubernates R2E环境集群 + R2E-Gym 4.5k数据 + 环境执行反馈
  • GRPO++算法
    • DAPO技巧:Clip-Higher+去除KL Loss+ 去除熵loss + compact过滤
    • Dr.GRPO技巧:优势不除以标准差 + 去掉序列内Token平均
    • RLOO技巧:留一法计算优势
  • Hybrid TTS

模型效果

  • Qwen3-32B 经GRPO++优化后,SWE-verified 达42分TTS达59分

重要结论

  • 用Claude蒸馏来SFT模型,SWE仅34分,低于SWE-Agent-LM 40分
  • SWE-SmithSWE-Gym数据做RL,提升有限
  • R2E-Gym 很适合做RL,较好课程学习

关键贡献

问题背景

❓问题背景

问题背景
  • Agent:通过工具调用和真实环境交互,环境给予反馈、奖励信号。
  • Code Agent:IDE工具(Bash+文件搜索+文件编辑 + 文件浏览)等。

Agent

Code Agent

核心方法

📕核心方法

SWE环境(Kubernates集群)

SWE 环境扩展 -Kubernates集群

并发需求

  • 每次RL迭代:512个Docker容器,BS=64、8passes。
  • 并行RL实验:每时刻都有几千个容器在运行。

解决方法

  • Kubernates集群,每个节点:200 CPU + 6TB local NVME SSD
  • 可扩展至1000 CPU 集群。

RL设置(动作空间+数据+稀疏奖励)

RL 环境和数据

动作空间

  • 执行Bash:执行命令,返回sdtout和sdterr
  • 搜索:在目录下或对单文件进行搜索
  • 文件编辑:查看、创建、替换字符串、插入、撤销修改等。
  • 完成/提交:LLM决定已经解决PR,结束

数据

  • R2E-Gym 4.5k数据集,过滤污染数据。

稀疏奖励

  • 1:测试用例全部通过,(Pass2Pass, Fail2Pass)
  • 0:超时至少有1个未通过
  • 超时时间:5分钟,官方是30分钟。

GRPO++算法(DAPO+Dr.GRPO+RLOO)

GRPO++ (DAPO+Dr.GRPO+RLOO)

相关笔记

采用 DAPO 技巧

  • Clip-Higher鼓励探索和防止熵崩塌

  • 移除KL Loss:避免LLM受原始SFT影响限制探索空间

  • 移除熵 Loss:会增加不稳定性,导致熵增加,训练崩溃。如果基模熵在0.3-1,就无需熵loss

  • Compact 过滤:对达最大长度超时达最大步数的数据,Mask Loss

采用Dr.GRPO 技巧

  • 优势不除以标准差:消除任务难度偏差

  • 去掉序列内平均,消除长度偏差,其实就是DAPO的Token-Level-Loss

采用RLOO 技巧

  • 留一法计算优势

Compact 过滤:

Hybrid TTS (DeepSWE-Verifier)

TTS 相关工作
Hybrid TTS方法

Hybrid TTS

  • 不执行验证
    • 不执行,由LLM选择最优轨迹
    • DeepSWE Verifier:在正确和错误patch上,训练2epoch,识别正确和错误
  • 执行验证
    • 由LLM生成测试用例,用例通过最多则为最优轨迹
  • 混合方法

TTS 参数

  • 上下文长度:16k -> 32k -> 128k,超过32k 收益就比较小
  • Rollout数量:8、16等

不执行和执行两种方法对比:

TTS 对比:

最大输出token对比

实验设置

✍️实验设置

实验设置

基础模型

  • Qwen3-32B

训练任务/数据

评测任务/数据

  • SWE-verified,官方R2E-Gym代码库来评估
  • 超参:100步64k上下文
  • 指标:pass@1 avg16, best@8, best@16
  • TTS策略:免执行方法 + 执行免执行混合方法

算法/策略

  • GRPO++ (多种策略),R2E-Gym Scaffold

超参

  • 上下文长度:16k -> 128k,其中32k效果很好了,后期收益不大
  • 训练:32k50轮;测试:64k100轮
  • Rollout:16、8等,做了多组实验
  • 64张H100训练6天

关键结果(Qwen3-32B)

🍑关键结果

关键结果

模型效果

  • GRPO++ 微调Qwen3-32B,得DeepSWE-Preview-32B,SWE得分59分,效果提升20pt。
    • pass@1 42.2分pass@16 71分TTS best@16 59分

重要结论

  • 使用Claude3-4蒸馏数据做SFT,仅34.4分,低于SWE-Agent-LM 40分
  • 使用SWE-SmithSWE-Gym数据集,但提升有限训练中无解率很高
  • 相反R2E-Gym很适合RL,提供足够的课程学习,随时间推移解决越来越难的问题

未来方向

⛳ 未来方向

未来方向
  • 更大模型:比如DeepSeek-R1
  • 更长上下文
  • 扩展到不同领域的agent

(2512) Devstral2

Devstral2 摘要

参考链接

模型效果

  • 模型小效果好
    • 256kDense模型,比Kimi/DeepSeek都小很多
    • Devstral2:123B72.2 SWE-verified
    • Devstral Small2:24B68 SWE-verified
  • 仍落后于闭源模型

关键结论

  • 支持探索代码库跨文件协调更改架构级上下文
  • 支持 Mistral Vibe CLI 工具

(2505) Devstral

🌺 论文摘要

Devstral 摘要

参考链接

核心方法

  • SFT轨迹数据合成方法:基于环境探索+单元测试验证, 保留正确轨迹
  • Post-Training方法简单过滤SFT严格过滤SFTRL训练

模型效果

  • Devstral-small-24B模型,SWE达46分迭代式 Best-of-3指标。

❓问题背景

问题背景
  • 开源模型在代码片段生成效果好,但在复杂多步骤SWE任务表现不好。
  • Coding Agent需要迭代开发debug集成软件工具等能力,大都依赖闭源模型

核心方法(环境探索SFT数据+PostTrain)

📕核心方法

核心方法

模型架构

  • 基于Mistral-Small3 开发:24B,40层,GQA,128k

数据构建方法

  • 目标:Cot推理+code执行能力
  • Agent框架:OpenHands CodeAct scaffold;SWE环境:SWE-Gym
  • 模型基于以上环境去探索,基于单元测试验证,仅保留高质量正确轨迹数据

Post-Train

  • SFT:大量数据微调(简单过滤),高质量数据微调(严格过滤)
  • RL:使用SFT模型生成新数据,再去做RL训练。
  • 论文不清楚。

实验设置

✍️实验设置

实验设置

基础模型

  • Mistral-Small3 24B

训练任务/数据

  • 没说

评测任务/数据

  • SWE

  • OpenHands Scaffold:安全的沙盒环境,代码、bash、网页浏览(本实验禁用)。

  • Best-of-3作为pass@1第1次(温度=0)第2、3次(温度=0.1)

    • 一般做法:多次取avg 作为pass@1
  • 评测时的交互轮数:50轮效果好,100轮也没有提升。30轮低10个点。

算法/策略

  • SFT + RL

超参

  • 128k

关键结果(Devstral-small-24B)

🍑关键结果

关键结果

模型效果

  • Devstral-small-24B SWE达46分,超越一众顶尖模型。
    • Qwen3-235B(25), DeepseekR1V3(40+), GPT-4.1-mini(23.6), Claude3.5-Haiku(40.6)。

重要结论

  • 评测交互轮数:50轮 效果好46分30轮36分
  • 温度0.10.4比较好,0.7和1.0反而Pass@4还低了。

⛳ 未来方向

未来方向
  • 新版本优化:2507比2505好
    • 优化数据生成和筛选过程:提升数据质量
      • 微调数据过滤机制:可能不仅看是否单元测试,还会看代码风格、步骤冗余度等。
    • 不同脚手架支持:构造伪脚手架.
    • 多格式训练:增加XML格式、原生函数调用格式等。

(2502) SWE-RL (Meta)

🌺 论文摘要

SWE-RL 摘要

参考链接

核心方法

  • 1套GithubPR数据收集构建方法仓库事件克隆 + PR聚合 + 预测相关文件 + 数据过滤
    • SWE-RL PR数据:27.3w
  • 1套AgentSFT数据合成方法PR种子筛选 + 定位数据合成 + 编辑数据合成
  • SWE-RL方法:LLama3-70B + GRPO不执行环境,采用Patch相似度来做奖励信号

模型效果

  • SWE-RL-70B 达41分Best-of-500

重要结论

  • RL比SFT效果好
  • Best-of-N 越大越好,但后期逐渐收敛。
  • DenseReward 比Sparse Reward好。

整体流程如下

问题背景

❓问题背景

问题背景

问题

  • SWE 进展:repo-level 代码生成Issue Resolution(SWE Bench)。
  • SWE-Bench:主要依赖私有模型GPT-4o, Calude-3.5,开源模型很少。
    • DeepSeekR1 RuleRL很强,但是SWE任务效果不行
  • 传统规则奖励难以直接应用到SWE任务
    • 数学:EM匹配
    • 代码:竞赛题,单代码文件容易执行;SWE:有依赖,不是自包含的。

SWE 相关工作

  • (2411)Lingma-SWE-GPT:迭代开发过程,基于Qwen2.5-Coder-7B和Qwen2.5-72B-Instruct 构建。
  • (2412)SWE-gym:第一个用于开放训练的环境,提升Qwen2.5-Coder-7B/32B效果。
  • (2501)SWE-fixer:微调Qwen2.5 base,提升best@1性能。

GitHub PR数据收集构建方法

Github PR 数据 概览
  • 最终:27.3w 高质量 Gihub PR
  • 每个PR包含:
    • Issue描述:问题
    • Code Context所有相关文件 (需要修改 + 不需要修改的)
    • Oracle Patch:GT解决方法
Github PR数据收集构建方法

Github Events Clone

  • 目标PR数据:PR中的所有事件PR之前的源代码
  • 通过 GHAchive 拉取事件:1501-2412共10年数据
  • 通过GitClone 仓库:包含历史所有commit,共460w repo。

PR 数据聚合

  • 从PR出发,关联Github事件代码库,仅保留已合并的PR,聚合以下内容
    • Issue、用户讨论、Review Comment、出事代码、Commits、代码变更。
  • 保存从merge basehead commit所有的中间提交代码变更
  • 扫描所有PR,识别Issue与对应PR 匹配 (Prompt, Response)。累计 240w PR

预测相关但未修改文件

  • 问题
    • 目前PR仅包含被修改过的文件,但实际预测会检索到很多无关文件
    • 如果训练时,只看修改文件,会产生bias。
  • 方法
    • 根据Issue+已修改文件,使用Prompt+LLM预测 相关但未被修改文件列表
    • 把这部分 相关但未修改文件列表 加入数据集中。

数据过滤

  • 背景:PR有噪音,需剔除有害PR。但允许一定噪音,尽量召回高质量PR。
  • 过滤规则:
    • 过滤机器人PR
    • 过滤变更极大的PR
    • 细粒度过滤:检查每个代码块 Hunk (参考CodeLLaMA ),确保是在写代码,去掉版本、锁定等内容。
  • 最终:1100w PR -> 27.3w 高质量PR

AgentSFT 数据合成

SFT 数据合成

PR 种子数据筛选

  • 收集高质量PR种子数据:启发式规则筛选

问题定位数据-合成

  • LLM合成
    • 输入:Issue描述 + 仓库结构 + 目标编辑文件 + 相关文件
    • 输出: CoT推理生成需要编辑的文件
    • LLama-3.3-70B-Instruct
  • 过滤:仅保留推理正确的答案

代码编辑数据-合成

  • LLM 合成
    • 输入:标准答案Patch
    • 输出: Search/Replace格式的代码编辑数据
  • 过滤:保留格式正确search/replace内容正确 (能搜索到)的数据。

相关工作

核心方法

任务Prompt 设计

Prompt 设计

整体

  • Reasoning + Tool Use 风格。prompts.py
  • THINKING_SYSTEM + AGENTLESS_REPAIR

THINKING_SYSTEM

  • 强调输出思考过程

AGENTLESS_REPAIR

  • --- BEGIN ISSUE ---:{problem_statement},Issue 定义
  • --- BEGIN FILE ---:{content},包含相关文件的全部源代码
  • 任务指令:先定位再修复
  • 输出格式:Search/Replace 协议,严格的Diff格式
  • 样例:

输出样例

python
```python
### mathweb/flask/app.py
<<<<<<< SEARCH
from flask import Flask
=======
import math
from flask import Flask
>>>>>>> REPLACE
```

RL 设计

📕核心方法

核心方法

任务

  • 给定Issue +上下文,进行推理,生成代码变更,把代码变更应用到Patch中

奖励

  • 不去真正执行,而是对比Patch 相似度。Python.difflib.SequenceMatcher。reward={1,格式不正确compare(patchpred,patchgt),格式正确

算法

  • GRPO + KLLoss

训练和测试存在不同点

训练vs测试不同点

训练

  • 给出所有相关代码文件,隐式强迫模型先找Bug再做修复

评测时 (Agentless mini 框架)

  • 完整Pipeline
    • Step1 文件定位:bug在哪个文件?
    • Step2 测试生成:生成测试用例,来复现bug
    • Step3 回归测试:挑出哪些旧测试用例跑一遍,防止改坏了别的地方。
    • Step4 修复代码:请写出修复代码
  • SWE-RL 训练时仅有4,没有1、2、3。但在测试时,有泛化性

实验设置

✍️实验设置

实验设置

基础模型

  • Llama-3.3-70B-Instruct

训练任务/数据

  • RL:27.3w 构建的PR数据
  • SFT:合成代码编辑SFT数据 + LLama3代码SFT数据 + LLama3通用SFT数据

评测任务/数据

  • SWE-Bench-Verified。
  • 温度=1,每个问题生成500个patch
  • 使用top-30测试用例去测试排序,选择第1名的patch去报告 pass@1,其实是Best-of-N。

算法/策略

  • GRPO、混合SFT

Scaffolding

  • 基于Agentless开发的简化Agentless mini,专注于文件级定位

超参

  • 16k 上下文batch_size=32rollout=16,real_batch_size=512
  • 512 张H100,32小时。

关键结果(LLaMA-3-70B)

🍑关键结果

关键结果

模型效果

  • 未使用闭源LLM蒸馏技术纯开源数据
  • LLama3-SWE-RL-70B:SWE-Verified 41分,在100B模型下效果最好
  • SFT 达36.2分,效果也不错。

重要结论

  • 测试 Best-of-N N越大效果越好,后期逐渐收敛。20 -> 160 -> 500:33.6 -> 40 -> 41
  • DenseReward比Sparse 效果好一些,促进格式和修复。

未来方向

⛳ 未来方向

未来方向
  • 奖励太僵硬:奖励仅靠GT相似度会限制模型探索其他方案,没有真正的执行奖励。
  • 定位粗糙:Agentless Mini 缺乏复杂上下文信息。
  • 流程割裂:Agentless 固定Pipeline,但理想Agent应该是E2E的。
总访客数:   ·   总访问量:
PLM's Blog @ 2016 - 2026