📜 文献卡
英文题目: Agentless: Demystifying LLM-based Software Engineering Agents; |
---|
作者: Chunqiu Steven Xia; Yinlin Deng; Soren Dunn; Lingming Zhang |
DOI: 10.48550/arXiv.2407.01489 |
摘要翻译: 大型语言模型(LLM)的最新进展显著推进了软件开发任务的自动化,包括代码合成、程序修复和测试生成。最近,研究人员和行业从业者开发了各种自主LLM代理来执行端到端软件开发任务。这些代理配备了使用工具、运行命令、观察来自环境的反馈以及规划未来行动的能力。然而,这些基于代理的方法的复杂性,加上当前LLM的有限能力,引发了以下问题:我们真的必须使用复杂的自主软件代理吗?为了试图回答这个问题,我们构建了无代理——一种自动解决软件开发问题的无代理方法。与基于代理的方法的冗长和复杂的设置相比,Agentless采用了简单的本地化两阶段过程,然后进行修复,而不让LLM决定未来的行动或使用复杂的工具进行操作。我们在流行的SWE-bench Lite基准测试上的结果表明,令人惊讶的是,与所有现有的开源软件代理相比,简单的Agentless能够实现最高性能(27.33%)和最低成本(0.34美元)!此外,我们手动分类了SWE-bench Lite中的问题,并发现了精确的地面实况补丁或不足/误导性问题描述的问题。因此,我们通过排除此类有问题的问题来构建SWE-bench Lite-S,以执行更严格的评估和比较。我们的工作突出了当前在自主软件开发中被忽视的一种简单、可解释的技术的潜力。我们希望Agentless将有助于重置自治软件代理的基线、起点和视野,并激发未来朝着这一关键方向开展工作。 |
GitHub: https://github.com/OpenAutoCoder/Agentless |
⚙️ 内容
这篇论文探讨了大型语言模型(LLM)在软件开发中的应用,并提出了一个名为AGENTLESS的简单解决方案。随着LLM技术的发展,研究人员和行业从业者已经开发出了各种自主的LLM代理程序,用于执行端到端的软件开发任务。然而,这些基于代理的方法复杂且难以理解,而当前的LLM能力有限,因此作者提出了AGENTLESS这个简单的两阶段过程:首先定位问题,然后进行修复,而不让LLM决定未来的操作或使用复杂的工具。实验结果表明,AGENTLESS能够以最高性能(27.33%)和最低成本($0.34)击败所有现有的开源软件代理!此外,作者还对SWE-bench Lite进行了手动分类,排除了一些有问题的问题,以进行更严格的评估和比较。这项工作突显了简单、可解释的技术在自主软件开发中的潜力,希望AGENTLESS能够帮助重置基准线、起点和视野,激发未来的研究方向。
💡 创新点
-
简化流程:与传统的代理系统不同,AGENTLESS采用了一个两阶段的直接流程——首先定位问题,然后进行修复。这种简化的设计避免了让LLM做出未来决策或操作复杂工具的需求,从而减少了不必要的复杂性和开销。
-
高性价比表现:在SWE-bench Lite基准测试中,AGENTLESS实现了最高27.33%的性能水平,同时成本仅为每项$0.34,这显著优于所有现有的开源软件代理。这一成就表明,即使没有复杂的代理机制,也能达到甚至超越其他高级解决方案的效果。
-
问题分类与优化:研究团队人工分类了SWE-bench Lite中的问题,识别出包含确切修补程序或描述不足/误导性的问题。通过创建SWE-bench Lite-S版本,排除这些有争议的问题,他们提供了一个更严格和精准的评价基准,进一步提升了评估的准确性。
-
无需自主工具使用与规划:AGENTLESS明确禁止LLM自主使用工具或规划,这意味着它不需要建模复杂的环境行为或反馈,从而避免了传统代理系统中常见的额外负担。这种方法简化了开发过程,同时也降低了运行成本。
综上所述,AGENTLESS的核心创新在于其简约而高效的策略,通过去除不必要的复杂性,它能够在保持高性能的同时大幅降低成本,为自动化的软件开发提供了一种全新的视角和方法。
🧩 不足
-
问题描述质量参差不齐:部分问题描述缺乏足够的信息,导致任务执行时可能会遇到困难。例如,有些任务要求实现具体名称的函数或添加特定字符串的错误消息,如果这些细节没有在问题描述中给出,即使功能实现正确,测试也会失败。另外,有些问题可能存在多种理解方式,其中只有部分解法能够满足测试标准,这也增加了解决问题的难度。
-
描述中提供的解决方案影响:在问题描述中有时会给出解决方案或步骤,这可能导致模型在解决实际问题时受到误导。特别是当描述中提供的解决方案与实际情况不符时,模型可能会遵循错误的指导,从而影响修复效果。
-
基准测试的局限性:SWE-bench Lite和SWE-bench Lite-S这两个基准测试集中存在一些不合理或描述不清的问题,这可能扭曲了模型的真实能力评估。例如,有些问题已经提供了确切的修复代码,或者问题描述含糊不清,这些问题的存在影响了基准测试的公正性和准确性。
-
对特定类型问题的处理能力有限:在对SWE-bench Lite进行分类分析时发现,对于那些需要精确匹配函数名称或错误消息字符串的问题,AGENTLESS和其他模型可能因描述信息不足而难以找到正确的解决方案。此外,对于描述中包含误导性解决方案建议的问题,模型也可能受其影响而无法通过测试。
-
模型能力受限:尽管AGENTLESS方法在特定问题集上表现出色,但其成功依赖于问题描述的质量和清晰度。对于那些描述模糊或缺乏关键信息的问题,其解决能力可能会受到限制,这表明当前的LLM模型在理解和处理复杂、非结构化信息方面仍有待提高。
为了克服这些局限性,研究者建议进一步优化和筛选SWE-bench Lite问题集,以确保问题描述完整、清晰,并且避免包含误导性信息。此外,开发更强大的LLM模型,使其能够更好地理解和处理复杂多变的自然语言描述,也是未来研究的重要方向。
🔁 实验卡
💧 数据
研究使用了流行的SWE-bench Lite基准数据集,该数据集包含了300个软件工程问题。为了更严格地评估和比较,研究人员手动分类了这些问题,并排除了描述不准确或具有误导性的问题,构建了SWE-bench Lite-S。
👩🏻💻 方法
定位阶段
-
项目结构转换:AGENTLESS首先将整个项目代码库转换成树状结构,这样可以直观地展示出每个文件在项目中的相对位置。
-
文件级定位:在得到项目的目录结构后,利用大型语言模型(LLM),根据问题描述和此结构图,确定最可疑的前N个文件,这些文件可能是问题所在的地方。
-
类与函数级定位:对于选定的文件,进一步细化到具体的类和函数。通过向LLM提供文件的声明头(即类和函数的列表),模型可以输出需要重点检查的类和函数列表。
-
代码行级定位:最后,将前一阶段选出的类和函数的完整代码内容呈现给LLM,以便进一步缩小需要修改的位置,可以是特定的类、函数,甚至是具体代码行。
修复阶段
-
生成候选补丁:在确定了需要修改的代码位置之后,将这些位置的代码片段以及问题描述一起输入给LLM,请求生成多个用于解决问题的候选补丁。
-
语法与测试过滤:接下来,AGENTLESS会对生成的补丁进行初步的过滤,移除任何存在语法错误或不能通过先前测试的补丁。
-
补丁重排与选择:在过滤掉不合格的补丁后,剩余的补丁会根据某种多数投票机制进行重新排序,最终选择排名第一的补丁作为最终提交的修复方案。
AGENTLESS方法的关键优势在于其简洁性、效率和成本效益。通过避免使用复杂的工具和避免让LLM自主决定未来的行动,AGENTLESS在SWE-bench Lite基准测试中实现了最高的性能和最低的总体成本。这种方法的另一个亮点是它能够处理那些具有确切修复代码或问题描述不足的情况,通过构建更严谨的SWE-bench Lite-S基准,排除有问题的任务,以更准确地评估软件开发问题的解决能力。总的来说,AGENTLESS代表了自主软件开发领域中一种被忽视的潜力,为未来研究设定了新的起点和目标。
🔬 实验
本文主要介绍了使用基于大模型的自动软件工程(AGENTLESS)工具在SWE-bench数据集上的表现,并与现有的商业和开源工具进行了比较。实验包括两个部分:首先,作者对AGENTLESS和其他13个工具进行了比较,评估了它们在修复问题方面的性能;其次,作者还分析了这些问题的分类以及它们对修复性能的影响。
在第一个实验中,作者将AGENTLESS与其他13个工具进行了比较,这些工具代表了当前最先进的软件工程自动化技术。作者采用了四个评估指标来衡量这些工具的表现:解决率、平均成本、平均输入输出标记数和正确位置百分比。结果表明,AGENTLESS虽然没有其他工具表现得那么好,但它非常简单且易于实现,而且相对于其他开源工具,它的性能更好。
在第二个实验中,作者对SWE-bench数据集中的问题进行了分类,并分析了每种类型的修复性能。作者发现,有些问题提供了确切的解决方案或步骤,而有些则没有提供足够的信息。此外,有些问题提供了正确的文件、函数或行级别的位置信息,而有些则没有提供任何线索。通过这个实验,作者认为有必要进一步改进SWE-bench数据集中的一些问题,以提高工具的性能。
总的来说,本文展示了AGENTLESS在软件工程自动化方面具有潜力,并为未来的改进提供了方向。
📜 结论
在SWE-bench Lite上的测试结果显示,AGENTLESS能有效解决82个问题,占比27.33%,并且平均每项解决问题的成本仅为$0.34,这是所有开源代理中表现最佳的结果。此外,研究还对SWE-bench Lite中的问题进行了详细的分类,发现了一些带有精确修复代码或问题描述不充分的情况,因此构建了SWE-bench Lite-S数据集,排除这些问题后进行更严格的评估比较。这一系列实验不仅展示了AGENTLESS的高效性和经济性,也揭示了在自主软件开发领域中简单、可解释的技术的潜力。
🤔 总结卡
文章优点
- 提出了一个简单而有效的解决方案来解决软件开发问题。
- 与传统的基于代理的方法相比,该方法不需要复杂的工具设计或自主决策规划,从而避免了相关限制和缺陷。
- 在SWE-bench Lite基准测试中,这种方法实现了最高的性能,并且成本更低。
- 对SWE-bench Lite进行了详细的分类研究,为构建更严格的基准提供了新的见解。
方法创新点
- 通过两个阶段的过程(定位和修复)来解决问题,而不是使用复杂的自主决策规划。
- 使用递归过程来定位错误,以便更好地理解代码库中的依赖关系。
- 生成多个候选补丁并对其进行简单的过滤以提高效率。
未来展望
- 这种方法的成功表明,对于某些任务,简单和可解释的技术可能比复杂和高度自动化的技术更具优势。
- 可能需要进一步研究如何将这种简单方法扩展到更广泛的问题领域。
- 可能还需要探索其他类型的工具和技术,以解决更复杂的软件开发问题。