SWE-bench:语言模型解决真实GitHub问题基准
arXiv 2310.06770 公开PDF,服务智能体评测方向补强。
- 发布时间
- 2023-10
内容介绍
语言模型在代码生成上的进展,已经超出了现有评测工具能有效衡量的速度,这是这份资料要处理的第一个问题。它追问的是:当 HumanEval 这类题目大多能在几行代码内自足解决时,模型能否应付真实软件工程里的任务——在一个大型仓库中定位问题、跨文件修改、并让改动通过测试。SWE-bench 就是为回答这个问题而搭的评测框架,论文发表在 ICLR 2024。现在值得看,是因为它把「代码能力」的衡量标准从函数级推到了仓库级,而材料里的评测结果显示,当时最强的模型也几乎解不动。
这份资料的范围是一套任务集和一套评测方法。任务来自 12 个流行的 Python 开源仓库,先从 GitHub 抓取约 90,000 个 pull request,再用三段流水线筛选:先选定仓库并抓取数据;再按属性过滤,只保留那些解决了某个 GitHub issue、并且改动涉及测试文件的已合并 PR;最后做基于执行的过滤,要求仓库能成功安装、PR 能通过全部测试。最终得到 2,294 个软件工程问题,每个问题由 issue 文本、代码库快照和对应测试构成,模型要生成一个补丁,再由仓库自身的测试框架判定是否解决。除评测集外,作者还发布了训练集 SWE-bench-train,含来自 37 个仓库的 19,000 个非测试任务实例,并基于 CodeLlama 微调出 SWE-Llama 7b 与 13b 两个模型。
关键发现的第一层是任务本身的难度。材料指出,解决 SWE-bench 里的 issue 往往需要同时理解和协调多个函数、多个类甚至多个文件中的改动,要求模型与执行环境交互、处理极长的上下文并做复杂推理,这已远超传统代码生成任务的范畴。换句话说,它考的不是「写出一段正确代码」,而是「在一个不熟悉的仓库里找到该改哪里、并改对」。评测方式也随之变成执行式的:不看生成文本像不像,只看补丁跑不跑得过测试。
第二层是数字层面的结果。无论是最先进的商用模型还是作者微调的 SWE-Llama,都只能解决最简单的那部分 issue。表现最好的模型 Claude 2 在使用 BM25 检索器的设定下,仅能解决 1.96% 的问题。另一个值得一提的细节是上下文长度:材料称 SWE-Llama 13b 在某些设定下与 Claude 2 具有竞争力,并且能处理超过 100,000 token 的上下文。这意味着开源微调模型在这类任务上并非完全落后,但整体水位仍停留在个位数百分比以下——1.96% 这个数字本身就是对「现有基准已饱和」这一说法的反证。
这些结论的含义,我的解读是:代码生成的 benchmark 分数与真实工程能力之间存在明显断层,用 HumanEval 式的自足题目去推断模型能否维护仓库,会系统性高估。对实践者而言,SWE-bench 提供的价值不只是排名,而是一种可复用的评测范式——任务来自用户真实提交的 issue 与合并的 PR,判定交给仓库原有的单元测试,因而验证成本低且难以作弊;作者还强调这套框架能用极少人工持续加入新实例,不易像旧基准那样被刷满。同时,SWE-bench-train 这类训练数据的公开,说明这一方向的门槛之一其实在数据而非模型结构。
适合读这份资料的是做智能体、代码模型评测或想把模型接入真实工程流程的人。读完能拿走的是一套明确的任务定义、一条可复现的构建流水线、一组可对照的基线数字,以及「商用模型与微调模型在此任务上都还很弱」这一判断。边界也需要说清:任务只覆盖 12 个仓库、以 Python 为主,评测依赖测试是否存在且可靠,模型表现高度依赖检索设定(1.96% 是配 BM25 检索器的结果,换设定数字会变),而材料给出的也只是 2023 年至 2024 年初的模型水位,不能直接外推到今天的系统。
原文摘录
自动提取自 PDFPublished as a conference paper at ICLR 2024 SWE- BENCH : C AN LANGUAGE MODELS RESOLVE REAL -WORLD GITHUB ISSUES ? Carlos E. Jimenez* 1,2 John Yang* 1,2 Alexander Wettig1,2 Shunyu Yao1,2 Kexin Pei3 Ofir Press1,2 Karthik Narasimhan1,2 1Princeton University 2Princeton Language and Intelligence 3University of Chicago ABSTRACT Language models have outpaced our ability to evaluate them effectively, but for their future development it is essential to study the frontier of their capabilities. We find real-world software engineering to be a rich, sustainable, and challenging testbed for evaluating the next generation of language models. To this end, we in- troduce SWE-bench, an evaluation framework consisting of 2,294 software engi- neering problems drawn from real GitHub issues and corresponding pull requests across 12 popular Python repositories. Given a codebase along with a description