SWE-Prime:轨迹更少,性能更优
SWE-Prime: Fewer Trajectories, Better Performance
论文信息
标题: SWE-Prime: Fewer Trajectories, Better Performance
作者: Dewu Zheng, Ruizhe Ye, Yanlin Wang, et al.
发布日期: 2026-08-27
arXiv ID: 2608.27449v1
PDF 链接: 下载 PDF
3 分钟速览
- 研究问题:如何从成功的软件问题修复轨迹中筛选出真正高质量的监督数据,而不是把所有 “最终成功的轨迹” 直接用于编码智能体的监督微调(SFT)。
- 核心方法:提出 SWE-Prime,一个多粒度、两阶段的数据选择框架:第一阶段在轨迹层面按过程质量、结果质量和数据代表性筛选;第二阶段在语义段层面评估每个行为片段的价值,训练时保留全部上下文但只让选中片段参与损失计算。
- 关键结果:在 SWE-Bench Pro 和 SWE-Bench Verified 上,用 SWE-Prime 选中 10% 的轨迹训练,相比用全部已解决轨迹训练,相对性能提升最高分别达到 12.2% 和 24.2%(见表 1)。
- 主要局限:论文未单独列出局限性章节;从方法设计看,结果质量评估依赖参考补丁,实际 SFT 数据未必总有参考补丁;语义段评分依赖 LLM,可能引入额外成本与评分偏差;超参数只在一个模型和一个基准上确定,其泛化边界未充分验证。
- 适合读者:从事 LLM 编码智能体、监督微调、轨迹数据选择、软件工程智能方向的研究者和工程师。
论文背景和研究动机
软件问题解决任务要求编码智能体理解仓库级上下文,并通过定位代码、修改和验证来生成补丁。近年来,许多工作通过构建大规模轨迹数据集并进行 SFT 来提升模型能力,例如 SWE-Gym、SWE-smith 和 R2E-Gym。这些方法通常基于执行结果保留 “成功轨迹”,即只要最终测试通过,整条轨迹就被当作监督信号。
但论文指出,任务成功并不等于监督质量高。成功轨迹中可能包含无效、冗余甚至具有风险的行为。论文通过图 1 从三个视角说明这个问题:Outcome View 只看最终结果,会同时保留轨迹 A 和 B;Trajectory View 显示轨迹 B 存在未观察就修改代码、工具调用失败率高、连续重复、Git 作弊和过度修改等问题;Segment View 进一步显示,即使轨迹整体质量较高,其中某个片段也可能对最终修复没有贡献,不应作为学习目标。
因此,作者提出核心假设:高质量 SFT 数据应当紧凑、低噪声,并提供模型能够可靠学习的演示。这构成了 SWE-Prime 的设计动机。
核心方法和技术细节
SWE-Prime 是一个两阶段方法。输入是已通过执行验证的成功轨迹集合,输出是用于选择性 SFT 的训练样本和损失掩码。
Stage 1:轨迹级选择。 该阶段从三个维度联合筛选轨迹。
过程质量评估包含四个信号:observe-edit-verify 模式,即轨迹是否在首次编辑前检查仓库、最终编辑后通过测试或检查验证补丁;工具调用成功率,以轨迹在池中的百分位排名作为可靠性分数;连续冗余控制,若相邻工具调用具有相同名称和参数,则判定为冗余;Git 作弊检测,若在修改代码前从 Git 历史中泄露了参考补丁内容,则判定为不合法。
结果质量评估用参考补丁估计合理的修改范围。定义 和 分别为模型补丁与参考补丁修改的文件数, 和 为修改行数。文件级和行级范围分数分别为 ,,结果分数为 。这鼓励补丁在文件数和行数上都保持聚焦。
轨迹综合分数为:
数据代表性评估使用 Qwen3-Embedding-8B 对 issue 描述编码,再用 HDBSCAN 聚类,在簇内按 排名,在预算内选择候选轨迹。
Stage 2:段级选择。 对 Stage 1 保留的轨迹进行语义段切分。由于单步太窄,无法判断行为意图,论文将连续共享同一意图的步骤合并为语义段。为处理超长轨迹,采用边界感知滑动窗口:每次处理一个窗口,只确定除最后一段外的所有段,将可能不完整的最后一段带入下一窗口重新评估,同时传入任务目标、已确认事实和已识别风险的摘要,以保证跨窗口切分一致。
段评分由 LLM 根据三个标准给出 0–10 分:对最终修复的贡献、局部可学习性、行为风险。分数不低于阈值 的段被选中。
训练时,所有段都保留在上下文中,只有选中段的助手响应 token 参与损失:
其中 为段级掩码, 为选中段中助手响应 token 的总数。这样既保留了完整上下文,又避免低价值行为监督模型。
创新点和贡献
论文的主要创新在于突破了 “成功即高质量” 的单一视角。其贡献可从两个层面理解。
首先,论文引入了语义段作为长周期轨迹中的行为评估单元,而不是孤立步骤。这解决了单步缺乏足够上下文、难以判断意图和贡献的问题。SWE-Prime 在段级进行选择性监督,而不是简单丢弃整条轨迹或失败步骤。
其次,边界感知的段切分机制解决了固定窗口切分可能截断语义行为的问题。通过携带未完成段到下一窗口并配合上下文摘要,段边界更加一致,提高了后续评分的可靠性。
第三,论文提出了两阶段渐进过滤框架:先在轨迹级保证整体质量和多样性,再在段级挖掘高价值行为。这种多粒度设计与训练时的损失掩码机制结合,使模型能在保留完整上下文的条件下,只从高质量行为中学习。
实验结果分析
在 RQ1 中,论文在三个基础模型(GLM-4.7-Flash、Qwen3-30B-A3B-Instruct-2507、Qwen3-Coder-30B-A3B-Instruct)和两个基准(SWE-Bench Verified、SWE-Bench Pro)上评估。表 1 显示,SWE-Prime 在所有六个设置中均取得最高 Resolved Rate。相对 raw model 的提升在 SWE-Bench Verified 上为 18.8%–57.1%,在 SWE-Bench Pro 上为 17.6%–140.2%(见表 1)。相比 Resolved-Trajectory SFT,SWE-Prime 只用 10% 轨迹,相对提升最高为 24.2%(Verified)和 12.2%(Pro)。与 Random-10% 相比,优势更明显,说明不是单纯数据量减少带来的效果。
消融实验对比了 “仅 Stage 1” 变体(w/o Stage 2),结果显示段级选择在所有设置上均带来额外提升,说明轨迹级过滤不能完全解决轨迹内部低价值片段的问题。此外,SWE-Prime 在 Python、JavaScript、TypeScript 和 Go 子集上均取得最佳结果,论文将这种跨语言一致性归于基于聚类的代表性选择。
RQ2 超参分析中,基础模型 Qwen3-Coder-30B-A3B-Instruct 在 SWE-Bench Verified 上显示,轨迹保留率 10% 达到峰值,段分阈值 7 达到峰值(见图 4)。该配置随后固定用于所有 RQ1 实验。论文未说明该配置在其他更大或更小数据池上的敏感性。
RQ3 行为分析表明,与 Resolved-Trajectory SFT 相比,SWE-Prime 减少了连续冗余、提高了观察后编辑比率和工具调用成功率,并减少了平均交互轮数 4.1 到 12.7 轮(见图 5)。作者将这种效率提升归因于段级选择阻止了低价值行为参与损失计算。
实践建议
对于从事编码智能体 SFT 或轨迹数据工程的团队,这篇论文给出了一些可操作的思路。
若已有大量执行验证后的成功轨迹,不应默认全部直接训练。可以先按过程质量和补丁聚焦程度进行轨迹级打分,再结合语义聚类做代表性采样,以减少冗余、保持问题类型覆盖。论文中使用的四个过程信号(observe-edit-verify、工具成功率、连续冗余、Git 作弊检测)都可以从交互日志中自动提取,不需要额外人工标注。
在轨迹级筛选之后,还可以引入段级评估。具体实现上,可以用 LLM 对语义段打分,并采用 “保留全部上下文、只对高分段计算损失” 的训练策略,这比直接丢弃整段轨迹更温和,也更适合长周期推理任务。语义段切分时建议采用边界感知的滑动窗口,避免固定窗口截断正在执行的局部行为。
一个需要注意的限制是,SWE-Prime 的结果质量分数依赖参考补丁来界定修改范围。如果实际训练数据没有参考补丁,可以尝试用补丁的回归风险代理指标替代,但论文未提供这类替代方案的效果证据。段级评分依赖 LLM 生成 0–10 分,超参阈值需要在自有数据上验证,不能直接照搬论文中的 7。论文也未说明在远大于 32,161 条轨迹的数据池上,HDBSCAN 聚类和段级 LLM 评分的成本与可扩展性。因此,将 SWE-Prime 落地时,建议先在小规模已验证子集上复现其关键选择机制,观察行为指标变化,再决定是否扩展。