分享自:

揭秘基于大语言模型的软件工程代理

期刊:Proceedings of the ACM on Software EngineeringDOI:10.1145/3715754

关于《Demystifying LLM-based Software Engineering Agents》研究的学术报告

一、 研究作者、机构及发表信息

本研究的主要作者是来自University of Illinois Urbana-Champaign(伊利诺伊大学厄巴纳-香槟分校)的研究团队,包括Chunqiu Steven Xia(夏春秋)、Yinlin Deng(邓寅林)、Soren Dunn和Lingming Zhang(张令明)。该研究以题为“Demystifying LLM-based Software Engineering Agents”的论文形式,于2025年6月19日(在线发表日期)发表在ACM的期刊《Proceedings of the ACM on Software Engineering》(第2卷,FSE期)。该论文为开放获取(Open Access)文章,并由其所在机构支持发表。

二、 研究的学术背景与目标

本研究隶属于软件工程与人工智能的交叉领域,具体聚焦于利用大型语言模型(Large Language Models, LLMs)实现自动化软件开发任务。近年来,以GPT-4、Claude等为代表的LLMs在代码生成、程序修复等任务上展现出强大能力。随之而来,学术界和工业界涌现出大量基于LLM的“软件工程智能体”(Software Engineering Agents)。这些智能体被设计成能够自主使用工具(如文件编辑器、命令行)、观察环境反馈并规划后续行动,以完成端到端的软件开发任务,例如修复GitHub仓库中的真实问题。

然而,作者指出,这些智能体方法通常设计复杂,且受限于当前LLMs的能力,存在工具使用/设计复杂、决策规划缺乏控制、自我反思能力有限等固有缺陷。这引发了一个根本性的疑问:为了解决现实世界的软件开发问题,我们真的必须使用复杂的自主智能体吗?

为了回答这个问题,本研究旨在探索一种“无智能体”(Agentless)的替代方案。其核心目标是:验证一个简化、低成本、无需LLM自主决策和复杂工具交互的流程,是否能够在解决真实软件工程问题(以流行的SWE-bench基准测试为代表)上,达到甚至超越现有复杂智能体方法的性能。这项研究希望重新设定自动化软件开发的基线,为未来工作提供新的起点和方向。

三、 研究详细工作流程

本研究提出并实现了一个名为 Agentless 的系统。该系统摒弃了复杂的自主智能体架构,采用一个清晰、分阶段的三步流程:定位(Localization)、修复(Repair)和补丁验证(Patch Validation)。整个流程使用GPT-4o作为核心LLM,并辅以信息检索技术。以下详细阐述每个步骤:

1. 定位阶段: 此阶段的目标是从可能包含数百个文件、数千行代码的软件仓库中,精准定位到需要修改以解决问题的具体代码位置。Agentless采用了一种分层定位策略,由粗到细逐步缩小范围。 * 步骤1.1:定位到可疑文件。 首先,系统将整个代码仓库的结构(类似tree命令的输出)与问题描述一起输入LLM,提示LLM输出最可能需修改的Top-N个文件列表(N默认为3)。同时,为了互补,系统还采用基于嵌入(Embedding)的信息检索方法:先让LLM过滤掉明显无关的文件夹,然后使用OpenAI的text-embedding-3-small模型计算剩余文件中代码块与问题描述的语义相似度,检索出相关文件。最后,合并LLM提示和嵌入检索的结果,得到最终的可疑文件列表。实验表明,两种方法结合能将包含正确编辑文件的准确率提升至81.3%。 * 步骤1.2:定位到相关代码元素。 获得可疑文件列表后,并非需要整个文件内容。Agentless为每个文件生成一个骨架格式,仅包含类、函数、变量的声明头信息,而省略具体实现。将所有可疑文件的骨架格式一次性提供给LLM,让其分析并输出需要进一步检查的特定类或函数列表。这种方法比提供完整文件内容更高效且准确,能将平均处理代码行数从超过3000行减少到不足800行,同时定位到正确相关元素的比率更高(62.0% vs 56.7%)。 * 步骤1.3:定位到具体编辑位置。 基于上一步得到的相关类/函数列表,系统提取这些元素完整的代码内容,并提供给LLM,要求其最终确定具体的编辑位置(如精确的行号范围、函数或类)。为了最大化找到正确位置的机会,Agentless会对这一步进行多次采样(默认4次),得到4组可能不同的编辑位置集合,供后续修复阶段并行使用。

2. 修复阶段: 此阶段的目标是在已定位的代码位置上生成解决问题的候选补丁。 * 上下文构建: 对于每一组编辑位置,系统会提取该位置周围一定范围(默认±10行)的代码作为上下文窗口,以提供足够的背景信息。如果有多处编辑位置,则将这些上下文片段拼接起来。 * 补丁生成: Agentless并不要求LLM重新生成整个代码文件,而是采用一种搜索/替换编辑格式。系统提示LLM生成一个简单的差异(diff)格式补丁,其中包含“搜索”部分(待替换的原始代码)和“替换”部分(新代码)。这种格式专注于生成小范围的编辑,成本更低,且减少了LLM产生幻觉(hallucination)的可能性。对于每一组编辑位置,Agentless会生成多个候选补丁(默认每组生成10个,其中1个为贪婪解码,9个为采样解码)。因此,每个问题总共会生成多达40个候选补丁。

3. 补丁验证与选择阶段: 此阶段的目标是从大量候选补丁中筛选出最终提交的正确补丁。 * 步骤3.1:生成复现测试。 由于SWE-bench基准测试中的问题仅提供问题描述和回归测试套件,没有提供能够触发该问题的测试(即复现测试)。Agentless利用LLM,根据问题描述合成一个或多个Python测试文件。这些测试旨在:a) 在原始代码上运行时能“复现问题”;b) 在问题被正确修复后输出“问题已解决”。系统会生成多个候选复现测试(默认40个),并首先在原始代码库上执行它们,筛选出那些确实能输出“问题已复现”的测试。然后,通过应用基准测试提供的“地面真值补丁”来验证这些测试的可靠性,但此验证仅用于评估测试质量,不用于实际补丁选择。 * 步骤3.2:补丁选择与排序。 系统执行一个两阶段的过滤和排序流程: * 回归测试过滤: 首先,运行代码仓库中现有的全部测试,得到在原始代码上通过的测试集合。然后,让LLM识别其中哪些测试可能因为修复问题而被合法修改(即非回归测试),将其排除,得到最终的回归测试集。接着,对所有40个候选补丁运行这个回归测试集,保留导致回归测试失败最少的补丁。 * 复现测试过滤: 对上一步保留的补丁,运行之前生成的、已验证能复现问题的复现测试。只保留那些能使复现测试输出“问题已解决”的补丁。 * 多数投票排序: 如果经过上述过滤后仍有多个补丁,Agentless会对补丁进行规范化(去除表面差异,如空格、注释),然后采用多数投票机制,选择出现次数最多的补丁作为最终提交的补丁。如果没有任何补丁能通过复现测试,则系统回退到仅使用回归测试结果进行选择。

四、 研究主要结果

研究在广泛使用的SWE-bench Lite基准测试(包含300个真实世界的软件问题)上对Agentless进行了全面评估,并与26种现有的开源及闭源智能体方法进行了对比。

1. 整体性能与成本: Agentless成功解决了300个问题中的96个,解决率为32.00%。关键发现是:在所有开源的解决方案中,Agentless取得了最高的性能。同时,其平均成本仅为0.70美元,远低于许多复杂的智能体方法(例如,SWE-Agent使用Claude 3.5 Sonnet的成本为1.62美元)。与另一个简单的无智能体基线方法RAG相比,Agentless性能有数量级的提升(32.00% vs 4.33%),证明了其流程设计的有效性。

2. 消融实验验证各组件贡献: 通过系统的消融研究,论文详细论证了每个设计选择的重要性: * 定位阶段: 结合LLM提示和嵌入检索的文件定位方法优于任一单独方法;使用骨架格式进行代码元素定位比使用完整文件内容更优;分层定位(文件->元素->行)比直接从文件定位到行更有效;对编辑位置进行多次采样并分别修复,比合并采样结果或使用单次贪婪解码能修复更多问题(96个 vs 88个)。 * 修复阶段: 增加候选补丁的采样数量能提升性能,但在约40个样本后趋于平缓。研究表明,如果考虑所有生成的补丁(而非只选一个提交),Agentless理论上能解决126个问题(42.0%),表明其补丁生成能力的上限很高。 * 验证阶段: 补丁选择策略至关重要。仅使用多数投票可修复77个问题;增加回归测试过滤后提升至81个;进一步加入复现测试过滤后,性能显著提升至96个。这证明了生成并使用复现测试进行验证是Agentless高性能的关键因素之一。

3. 对基准测试的分析与新基准构建: 作者对SWE-bench Lite中的问题进行了细致的人工分类,发现该基准测试存在一些可能影响公平评估的问题,例如:4.3%的问题描述中直接包含了精确的“地面真值补丁”;5.0%的问题描述包含了误导性的解决方案;10.0%的问题描述信息不足,难以解决。为此,研究者构建了一个经过筛选的、更严谨的数据集 SWE-bench Lite-𝑆(包含249个问题)。在该数据集上重新评估,各方法排名总体稳定,但Agentless等方法的性能评估更为准确。这项分析工作后来也得到了OpenAI的独立确认,并推动了类似过滤基准SWE-bench Verified的发布。

4. 实际影响与采用: 尽管发布不久,Agentless的理念和框架已产生显著影响: * 被业界领先公司采用: OpenAI已将Agentless作为评估其GPT-4o和o1系列模型在SWE-bench Verified上真实编码性能的默认方法。Deepseek在发布其V3和R1模型时,也采用Agentless来展示性能。 * 启发了后续工作: 一些开源工具(如Repograph)和闭源产品(如Isoform)直接基于Agentless早期版本构建;其他如Bytedance Marscode等工具也部分受到了Agentless的启发。

五、 研究结论与价值

本研究得出的核心结论是:在自动化软件开发任务中,一个设计精巧、无需复杂自主智能体的简化流程,能够达到与当前最先进智能体方法相媲美甚至更优的性能,同时保持更低的成本和更高的可解释性。 这挑战了“必须使用智能体才能解决复杂软件工程问题”的普遍假设。

其科学价值在于: 1. 提供了新的技术范式: 证明了分阶段、管道式(pipeline)的LLM应用模式在复杂任务上的巨大潜力,为LLM在软件工程领域的应用开辟了一条不同于主流“智能体”范式的新路径。 2. 设立了新的性能基线: Agentless以其出色的性能成本比,为未来的自动化软件开发研究设定了一个更高的起点和更现实的比较基线。 3. 增强了可解释性与可控性: 由于流程清晰、阶段分明,开发者更容易理解、调试和改进系统的每个部分,这与“黑盒”式自主智能体形成鲜明对比。

其应用价值在于: 1. 降低了应用门槛: 简化的设计使其更容易被研究人员和工程师理解、复现和部署。 2. 节约了计算成本: 较低的成本使得大规模、频繁的自动化代码修复与生成变得更为经济可行。

六、 研究亮点

  1. 核心观点的颠覆性: 研究直指当前AI软件工程领域的热点(智能体),并通过对一个简化无智能体方案的成功实践,对其必要性提出了有力质疑,具有重要的启发和反思价值。
  2. 方法设计的新颖性与简洁性: 提出的三层级定位策略、骨架格式、搜索/替换补丁生成以及基于测试的补丁选择与多数投票机制,虽然单个技术并非全新,但其巧妙的组合形成了一个高效、鲁棒且易于理解的完整工作流。
  3. 评估的深度与严谨性: 不仅进行了全面的性能对比和消融实验,还深入分析了基准测试本身可能存在的偏差,并构建了更干净的评估子集,体现了研究的严谨性。
  4. 显著的现实影响力: 研究成果迅速被顶级AI公司(OpenAI, Deepseek)采纳作为标准评估工具,并直接催生了新的改进型工具和基准测试,体现了其突出的实用价值和影响力。

七、 其他有价值内容

论文还对不同类别问题的解决率进行了深入分析,发现: * 对于包含可复现代码示例的问题,Agentless表现尤为出色,凸显了其测试生成阶段的有效性。 * 当问题描述中完全不包含位置线索时,一些闭源智能体工具表现优于Agentless,这揭示了复杂代码搜索工具在极端情况下的优势,也为Agentless未来的改进指明了方向(例如,增强其在无位置信息下的检索能力)。

上述解读依据用户上传的学术文献,如有不准确或可能侵权之处请联系本站站长:admin@fmread.com