再看SWE-Bench:论一个好的benchmark是如何推动2025 Agentic编程范式的发展

发布于 2025-9-24 07:02
浏览
0收藏

今天继续来看下经典的code benchmark之SWE-BENCH的细节,  其由普林斯顿大学和芝加哥大学联合发表于ICLR 2024,Title: SWE-bench: CAN LANGUAGE MODELS RESOLVE REAL-WORLD GITHUB ISSUES? (SWE-bench:语言模型能解决真实的GitHub问题吗?)。

这篇文章旨在解决当前语言模型(LMs)在代码生成领域评估基准过于简单、无法反映真实世界软件工程复杂性的问题。为此,作者们提出了一个全新的、极具挑战性的评估框架——SWE-bench。该框架包含从12个流行的Python项目中提取的2294个真实软件工程问题(GitHub Issues)。任务要求语言模型在给定一个完整代码库和问题描述的情况下,通过编辑代码来解决问题。

该方法的核心在于其高度的真实性和挑战性。解决SWE-bench中的问题通常需要模型:

1.理解和协调跨多个文件、类和函数的代码变更

2.与执行环境交互

3.处理超长上下文信息并进行复杂推理

评估结果显示,即便是最先进的专有模型(如Claude 2)和经过专门微调的开源模型(SWE-Llama),也只能解决极少数最简单的问题,最佳模型的解决率仅为1.96%。这表明,当前的语言模型距离成为能够自主解决实际软件工程问题的智能体还有很长的路要走。SWE-bench为评估和推动下一代更实用、更智能、更自主的语言模型指明了方向。

一、概述

Title:SWE-bench: CAN LANGUAGE MODELS RESOLVE REAL-WORLD GITHUB ISSUES?

URL:​ https://arxiv.org/abs/2310.06770​

Authors:Carlos E. Jimenez, John Yang, Alexander Wettig, Shunyu Yao, Kexin Pei, Ofir Press, Karthik Narasimhan

Institutions:普林斯顿大学 (Princeton University), 芝加哥大学 (University of Chicago)

Code:​ https://swebench.com​

1.Motivation

现有编程基准例如HumanEval也被刷饱和了:当前流行的代码生成基准(如HumanEval)大多包含自足的、可以通过几行代码解决的问题。这些基准已经饱和,无法有效地区分最先进模型的能力边界。

没有衡量真实软件工程开发的benchmark:真实的软件工程任务,如修复一个bug或添加一个新功能,远比生成一个独立函数复杂。它需要开发者在庞大的代码库中导航,理解不同模块间的依赖关系,并进行跨文件的修改。现有基准未能评估模型在这方面的能力。

代码编程领域需要更具挑战性的benchmark:为了推动语言模型在代码领域的发展,迫切需要一个能够准确反映其在真实世界应用中能力的挑战性基准,从而指导未来的研发方向。

2.Methods

论文的核心方法是构建了一个名为SWE-bench的基准测试集,并在此之上评估现有语言模型。构建过程分为三步:数据抓取属性筛选执行验证,以确保每个任务都是真实、高质量且可验证的。评估时,模型接收一个GitHub issue和完整的代码库作为输入,任务是生成一个Patch文件(patch)来解决该issue。如果生成的Patch能成功应用并通过所有相关单元测试,则认为任务解决成功。

再看SWE-Bench:论一个好的benchmark是如何推动2025 Agentic编程范式的发展-AI.x社区

详细方法和步骤:

1)基准构建 (Benchmark Construction): 论文提出了一个三阶段的流水线来从GitHub上大规模地筛选和构建高质量的任务实例。

再看SWE-Bench:论一个好的benchmark是如何推动2025 Agentic编程范式的发展-AI.x社区

image-20250916150618295

阶段一:仓库选择和数据抓取 (Repo selection and data scraping):从12个流行的开源Python仓库(如django, scikit-learn, matplotlib等)中收集了约9万个拉取请求(Pull Requests, PRs)。选择流行仓库是因为它们通常有更好的维护、更清晰的贡献指南和更全面的测试覆盖。

阶段二:基于属性的过滤 (Attribute-based filtering):从抓取的PRs中筛选出满足以下条件的候选任务:(1) PR是已合并(merged)状态,表明其解决方案被接受;(2) PR明确地解决了一个或多个GitHub issue;(3) PR对测试文件进行了修改,这通常意味着贡献者添加了新的测试来验证问题是否被修复。

阶段三:基于执行的过滤 (Execution-based filtering):对每个候选任务进行严格的执行验证。(1) 验证代码库可以成功安装;(2) 验证在应用PRPatch前后,至少有一个测试用例的状态从失败(fail)变为通过(pass)。这一步过滤掉了那些不重要或无法验证的解决方案,最终得到了2294个高质量的任务实例。

2)任务形式与评估 (Task Formulation and Evaluation):

模型输入:一个GitHub issue的文本描述和一个完整的代码库快照。

模型输出:一个标准的Patch文件(​​.patch​​格式),描述了为解决问题需要对代码库进行的修改。

评估指标:最终的衡量标准是解决率(Resolution Rate),即成功解决的任务实例所占的百分比。一个任务被视为“成功解决”需要满足两个条件:(1) 模型生成的Patch可以无误地应用到代码库中;(2) 应用Patch后,所有相关的单元测试都能通过。

3)SWE-Llama 微调模型: 由于现有模型在处理长上下文和遵循复杂指令方面表现不佳,作者们还微调了CodeLlama模型。

训练数据:从另外37个Python仓库中收集了约19000个issue-PR对作为训练数据,这些仓库与评估集中的仓库没有交集,以避免数据污染。

微调方法:使用LoRA技术对CodeLlama-Python的7B和13B版本进行监督微调,使其学会根据issue和相关代码文件生成对应的“Gold Patch”(gold patch)。

3.Conclusion

现有LLM在解决真实世界开发任务能力严重不足:即使是目前最强大的语言模型(SOTA LMs),在处理真实世界的软件工程任务时也表现极差。表现最好的Claude 2模型,在使用BM25检索器提供相关文件的情况下,也仅能解决1.96%的问题

再看SWE-Bench:论一个好的benchmark是如何推动2025 Agentic编程范式的发展-AI.x社区

SWE-bench是一个有效的“试金石”:该基准成功地揭示了当前模型在复杂推理、长上下文理解和代码库级操作方面的巨大差距,为未来的研究设立了一个清晰且具有挑战性的目标。

真实世界任务的复杂性被低估:解决这些问题不仅需要代码生成,还需要代码定位、理解依赖关系和遵循现有代码风格等高级技能,这些都是当前模型所欠缺的

4.Limitation

目前只有python项目:目前SWE-bench中的所有任务都来自于Python项目。虽然收集流程可以扩展到其他语言,但这需要额外的工作。

评估只看单元测试,没看效率和规范等:评估完全依赖于已有的单元测试是否通过。这无法保证模型生成的代码是高效、可读或符合项目编码规范的,也可能存在无法被现有测试捕获的潜在问题。

baseline方法比较简单,没有agent方法来评估:论文中的实验主要采用了相对简单的检索方法(BM25和Oracle)来为模型提供上下文。未来可以探索更复杂的、基于智能体(agent-based)的交互式方法,但这超出了本文基线评估的范围。

二、详细内容

1.SWE-bench任务在不同仓库的分布

再看SWE-Bench:论一个好的benchmark是如何推动2025 Agentic编程范式的发展-AI.x社区

image-20250916150923806

总结:任务分布广泛,其中​​django​​​ (850个)、​​sympy​​​ (386个) 和​​scikit-learn​​ (229个) 贡献了最多的任务实例,体现了基准的多样性。

2.SWE-bench任务实例的统计特征

再看SWE-Bench:论一个好的benchmark是如何推动2025 Agentic编程范式的发展-AI.x社区

总结1:任务的上下文非常庞大(平均代码库有438K行代码,3010个文件)。

总结2:修改的代码量相对较小(平均编辑32.8行,1.7个文件),需要在真实软件开发过程 中进行“大海捞针”。

3.不同模型在各仓库上的解决率对比

再看SWE-Bench:论一个好的benchmark是如何推动2025 Agentic编程范式的发展-AI.x社区

image-20250916151010243

总结:所有模型在各个仓库上的表现趋势相似,解决率普遍很低。这表明任务的难度是普遍存在的,并非特定于某个仓库。有趣的是,不同模型解决的问题集合不完全重叠,说明它们的能力有所差异

4.Claude 2性能与上下文长度的关系

再看SWE-Bench:论一个好的benchmark是如何推动2025 Agentic编程范式的发展-AI.x社区

image-20250916151125521

总结:随着输入上下文(代码文件)的总长度增加,模型的性能显著下降。这印证了“大海捞针”问题,即在大量无关上下文中定位和修改代码对模型来说极其困难。

5.任务实例、模型预测与测试结果示例

再看SWE-Bench:论一个好的benchmark是如何推动2025 Agentic编程范式的发展-AI.x社区

image-20250916151216411

说明:给了一个包括模型输入(指令、issue、代码)、Gold Patch、模型生成的Patch以及最终的测试结果样例。

三、总结

总结1: 开创了coding评估的新范式(真实软件开发任务): SWE-bench成功地将代码模型的评估从“算法问题求解”提升到了 “真实世界软件工程问题解决”的层面 。它不再是简单的代码生成,而是包含了代码理解、定位、修改和验证的完整闭环,极大地提升了评估的真实性和挑战性。

总结2: 构建了可持续、抗饱和的基准: 其自动化的数据收集和验证流程,使得SWE-bench可以轻松地从任何git仓库中持续吸收新的问题补充进来,有效避免了像其他基准一样快速饱和或被模型训练数据污染的问题。

总结3: 清晰地揭示了当前AI coding能力的边界: 指出了当前最先进的语言模型在自主软件工程方面的严重不足,为社区提供了明确的研究方向,即如何提升模型在超长上下文处理、复杂逻辑推理和与工具交互方面的能力

产业应用价值:

推动Agentic AI在软件工程领域的发展:SWE-bench的复杂性天然适合作为AI Agent的试验场。解决这些问题需要模型规划步骤、使用工具(如搜索、测试框架)、并根据反馈进行迭代,这正是AI Agent的核心能力。现在从2025年9月回过头来看,GPT-5-Codex在SWE-bench都刷到72.8%了,该bench还是显著的推动了ai coding的发展,特别是推动了Agentic方法在编程任务上的进展。

本文转载自​NLP PaperWeekly​,作者:NLP PaperWeekly

已于2025-9-24 10:45:55修改
收藏
回复
举报
回复
相关推荐