【论文解读】AGENTLESS:揭开基于LLM的软件工程代理的神秘面纱,重塑软件工程自动化新基线

📜 文献卡

英文题目: 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能够帮助重置基准线、起点和视野,激发未来的研究方向。

1
2

3

💡 创新点

  1. 简化流程:与传统的代理系统不同,AGENTLESS采用了一个两阶段的直接流程——首先定位问题,然后进行修复。这种简化的设计避免了让LLM做出未来决策或操作复杂工具的需求,从而减少了不必要的复杂性和开销。

  2. 高性价比表现:在SWE-bench Lite基准测试中,AGENTLESS实现了最高27.33%的性能水平,同时成本仅为每项$0.34,这显著优于所有现有的开源软件代理。这一成就表明,即使没有复杂的代理机制,也能达到甚至超越其他高级解决方案的效果。

  3. 问题分类与优化:研究团队人工分类了SWE-bench Lite中的问题,识别出包含确切修补程序或描述不足/误导性的问题。通过创建SWE-bench Lite-S版本,排除这些有争议的问题,他们提供了一个更严格和精准的评价基准,进一步提升了评估的准确性。

  4. 无需自主工具使用与规划:AGENTLESS明确禁止LLM自主使用工具或规划,这意味着它不需要建模复杂的环境行为或反馈,从而避免了传统代理系统中常见的额外负担。这种方法简化了开发过程,同时也降低了运行成本。

综上所述,AGENTLESS的核心创新在于其简约而高效的策略,通过去除不必要的复杂性,它能够在保持高性能的同时大幅降低成本,为自动化的软件开发提供了一种全新的视角和方法。

🧩 不足

  1. 问题描述质量参差不齐:部分问题描述缺乏足够的信息,导致任务执行时可能会遇到困难。例如,有些任务要求实现具体名称的函数或添加特定字符串的错误消息,如果这些细节没有在问题描述中给出,即使功能实现正确,测试也会失败。另外,有些问题可能存在多种理解方式,其中只有部分解法能够满足测试标准,这也增加了解决问题的难度。

  2. 描述中提供的解决方案影响:在问题描述中有时会给出解决方案或步骤,这可能导致模型在解决实际问题时受到误导。特别是当描述中提供的解决方案与实际情况不符时,模型可能会遵循错误的指导,从而影响修复效果。

  3. 基准测试的局限性:SWE-bench Lite和SWE-bench Lite-S这两个基准测试集中存在一些不合理或描述不清的问题,这可能扭曲了模型的真实能力评估。例如,有些问题已经提供了确切的修复代码,或者问题描述含糊不清,这些问题的存在影响了基准测试的公正性和准确性。

  4. 对特定类型问题的处理能力有限:在对SWE-bench Lite进行分类分析时发现,对于那些需要精确匹配函数名称或错误消息字符串的问题,AGENTLESS和其他模型可能因描述信息不足而难以找到正确的解决方案。此外,对于描述中包含误导性解决方案建议的问题,模型也可能受其影响而无法通过测试。

  5. 模型能力受限:尽管AGENTLESS方法在特定问题集上表现出色,但其成功依赖于问题描述的质量和清晰度。对于那些描述模糊或缺乏关键信息的问题,其解决能力可能会受到限制,这表明当前的LLM模型在理解和处理复杂、非结构化信息方面仍有待提高。

为了克服这些局限性,研究者建议进一步优化和筛选SWE-bench Lite问题集,以确保问题描述完整、清晰,并且避免包含误导性信息。此外,开发更强大的LLM模型,使其能够更好地理解和处理复杂多变的自然语言描述,也是未来研究的重要方向。

🔁 实验卡

💧 数据

研究使用了流行的SWE-bench Lite基准数据集,该数据集包含了300个软件工程问题。为了更严格地评估和比较,研究人员手动分类了这些问题,并排除了描述不准确或具有误导性的问题,构建了SWE-bench Lite-S。

👩🏻‍💻 方法

定位阶段
  1. 项目结构转换:AGENTLESS首先将整个项目代码库转换成树状结构,这样可以直观地展示出每个文件在项目中的相对位置。

  2. 文件级定位:在得到项目的目录结构后,利用大型语言模型(LLM),根据问题描述和此结构图,确定最可疑的前N个文件,这些文件可能是问题所在的地方。

  3. 类与函数级定位:对于选定的文件,进一步细化到具体的类和函数。通过向LLM提供文件的声明头(即类和函数的列表),模型可以输出需要重点检查的类和函数列表。

  4. 代码行级定位:最后,将前一阶段选出的类和函数的完整代码内容呈现给LLM,以便进一步缩小需要修改的位置,可以是特定的类、函数,甚至是具体代码行。

修复阶段
  1. 生成候选补丁:在确定了需要修改的代码位置之后,将这些位置的代码片段以及问题描述一起输入给LLM,请求生成多个用于解决问题的候选补丁。

  2. 语法与测试过滤:接下来,AGENTLESS会对生成的补丁进行初步的过滤,移除任何存在语法错误或不能通过先前测试的补丁。

  3. 补丁重排与选择:在过滤掉不合格的补丁后,剩余的补丁会根据某种多数投票机制进行重新排序,最终选择排名第一的补丁作为最终提交的修复方案。

AGENTLESS方法的关键优势在于其简洁性、效率和成本效益。通过避免使用复杂的工具和避免让LLM自主决定未来的行动,AGENTLESS在SWE-bench Lite基准测试中实现了最高的性能和最低的总体成本。这种方法的另一个亮点是它能够处理那些具有确切修复代码或问题描述不足的情况,通过构建更严谨的SWE-bench Lite-S基准,排除有问题的任务,以更准确地评估软件开发问题的解决能力。总的来说,AGENTLESS代表了自主软件开发领域中一种被忽视的潜力,为未来研究设定了新的起点和目标。

🔬 实验

本文主要介绍了使用基于大模型的自动软件工程(AGENTLESS)工具在SWE-bench数据集上的表现,并与现有的商业和开源工具进行了比较。实验包括两个部分:首先,作者对AGENTLESS和其他13个工具进行了比较,评估了它们在修复问题方面的性能;其次,作者还分析了这些问题的分类以及它们对修复性能的影响。

在第一个实验中,作者将AGENTLESS与其他13个工具进行了比较,这些工具代表了当前最先进的软件工程自动化技术。作者采用了四个评估指标来衡量这些工具的表现:解决率、平均成本、平均输入输出标记数和正确位置百分比。结果表明,AGENTLESS虽然没有其他工具表现得那么好,但它非常简单且易于实现,而且相对于其他开源工具,它的性能更好。

在第二个实验中,作者对SWE-bench数据集中的问题进行了分类,并分析了每种类型的修复性能。作者发现,有些问题提供了确切的解决方案或步骤,而有些则没有提供足够的信息。此外,有些问题提供了正确的文件、函数或行级别的位置信息,而有些则没有提供任何线索。通过这个实验,作者认为有必要进一步改进SWE-bench数据集中的一些问题,以提高工具的性能。

总的来说,本文展示了AGENTLESS在软件工程自动化方面具有潜力,并为未来的改进提供了方向。

📜 结论

5
4

在SWE-bench Lite上的测试结果显示,AGENTLESS能有效解决82个问题,占比27.33%,并且平均每项解决问题的成本仅为$0.34,这是所有开源代理中表现最佳的结果。此外,研究还对SWE-bench Lite中的问题进行了详细的分类,发现了一些带有精确修复代码或问题描述不充分的情况,因此构建了SWE-bench Lite-S数据集,排除这些问题后进行更严格的评估比较。这一系列实验不仅展示了AGENTLESS的高效性和经济性,也揭示了在自主软件开发领域中简单、可解释的技术的潜力。

🤔 总结卡

文章优点

  • 提出了一个简单而有效的解决方案来解决软件开发问题。
  • 与传统的基于代理的方法相比,该方法不需要复杂的工具设计或自主决策规划,从而避免了相关限制和缺陷。
  • 在SWE-bench Lite基准测试中,这种方法实现了最高的性能,并且成本更低。
  • 对SWE-bench Lite进行了详细的分类研究,为构建更严格的基准提供了新的见解。

方法创新点

  • 通过两个阶段的过程(定位和修复)来解决问题,而不是使用复杂的自主决策规划。
  • 使用递归过程来定位错误,以便更好地理解代码库中的依赖关系。
  • 生成多个候选补丁并对其进行简单的过滤以提高效率。

未来展望

  • 这种方法的成功表明,对于某些任务,简单和可解释的技术可能比复杂和高度自动化的技术更具优势。
  • 可能需要进一步研究如何将这种简单方法扩展到更广泛的问题领域。
  • 可能还需要探索其他类型的工具和技术,以解决更复杂的软件开发问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1473845.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Python + OpenCV 开启图片、写入储存图片

这篇教学会介绍OpenCV 里imread()、imshow()、waitKey() 方法,透过这些方法,在电脑中使用不同的色彩模式开启图片并显示图片。 imread() 开启图片 使用imread() 方法,可以开启图片,imread() 有两个参数,第一个参数为档…

基于顺序表的通讯录实现

一、前言 基于已经学过的顺序表,可以实现一个简单的通讯录。 二、通讯录相关头文件 //Contact.h #pragma once#define NAME_MAX 20 #define TEL_MAX 20 #define ADDR_MAX 20 #define GENDER_MAX 20typedef struct PersonInfo {char name[NAME_MAX];char gender[G…

Hugging face Transformers(2)—— Pipeline

Hugging Face 是一家在 NLP 和 AI 领域具有重要影响力的科技公司,他们的开源工具和社区建设为NLP研究和开发提供了强大的支持。它们拥有当前最活跃、最受关注、影响力最大的 NLP 社区,最新最强的 NLP 模型大多在这里发布和开源。该社区也提供了丰富的教程…

C++友元函数和友元类的使用

1.友元介绍 在C++中,友元(friend)是一种机制,允许某个类或函数访问其他类的私有成员。通过友元,可以授予其他类或函数对该类的私有成员的访问权限。友元关系在一些特定的情况下很有用,例如在类之间共享数据或实现特定的功能。 友元可以分为两种类型:类友元和函数友元。…

高级计算机体系结构--期末教材复习

Chap2 性能评测和并行编程性能评测并行编程为什么需要三次 barrier改进方法 Chap3 互连网络交换和路由二维网格中 XY 路由 死锁、活锁及饿死死锁避免的方法:虚通道、转弯模型二维网格中最小 西向优先、北向最后和负向优先算法转弯模型:超立方体的部分自适…

前端面试题19(vue性能优化)

Vue.js应用的性能优化是一个多方面的过程,涉及初始化加载、运行时渲染以及用户交互等多个环节。以下是一些关键的Vue性能优化策略,包括详细的说明和示例代码: 1. 懒加载组件 对于大型应用,可以使用懒加载来减少初始加载时间。Vu…

JavaWeb----JSPJSTL

目录 JSP显隐注释在JSP中写java程序JSP的指令标签JSP中的四大域对象简易版用户登录EL表达式 JSTL条件动作标签if标签 choose\when\otherwise标签迭代标签格式化动作标签 用户登录实例查看是否安装了mysql用户登录界面后台实现 JSP JSP全名是Java Server Pages,它是建…

电机控制杂谈——增量式的预测电流控制的优势在哪?

1.前言 前几天看到这么个问题。“模型预测控制如何消除静态误差” 评论说用增量式的预测控制。 这个回答让我想起来我大四下看的这篇论文。现在都一百多被引用了。 但是苦于当时能力有限,没办法复现这个文章。 所以现在想重新验证一下。 2.静态误差和电机磁链有…

[CP_AUTOSAR]_分层软件架构_内容详解

目录 1、软件分层内容1.1、Microcontroller Abstraction Layer1.2、ECU Abstraction Layer1.2.1、I/O HW Abstraction1.2.2、Communication Hardware Abstraction1.2.3、Memory Hardware Abstraction1.2.4、Onboard Device Abstraction1.2.5、Crypto Hardware Abstraction 1.3、…

Apache Seata分布式事务启用Nacos做配置中心

本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 Seata分布式事务启用Nacos做配置中心 Seata分布式事务启用Nacos做配置中心 项目地址 本文作…

便携式气象站:探索自然的智慧伙伴

在探索自然奥秘、追求科学真理的道路上,气象数据始终是我们不可或缺的指引。然而,传统的气象站往往庞大而笨重,难以在偏远地区或移动环境中灵活部署。 便携式气象站,顾名思义,是一种小巧轻便、易于携带和安装的气象观测…

VitePress美化

参考资料: https://blog.csdn.net/weixin_44803753/article/details/130903396 https://blog.csdn.net/qq_30678861/category_12467776.html 站点信息修改 首页部分的修改基本都在.vitepress/config.mts,这个文件内修改。 title 站点名称 description 描述 top…

Vben:表格的表头和表格的内容对不齐,以及解决方法

文章目录 一、问题描述二、解决方法 一、问题描述 基于Vue-Vbne-admin框架进行前端开发的时候,调用表格useTable函数实现表格之后,发现表格的表头和表格的内容对不齐。如下图所示。针对这种情况,本文记录了解决方法。 调用的模块如下&#x…

【力扣 - 每日一题】3099. 哈沙德数 | 模拟 (Go/C++)

题目内容 如果一个整数能够被其各个数位上的数字之和整除,则称之为 哈沙德数(Harshad number)。给你一个整数 x 。如果 x 是 哈沙德数 ,则返回 x 各个数位上的数字之和,否则,返回 -1 。 示例 1&#xff1…

使用 ESP32-WROOM + DHT11 做个无屏温湿度计

最近梅雨天,有个房间湿度很大,而我需要远程查看温湿度,所以无所谓有没有显示屏,某宝上的温湿度计都是带屏的,如果连WIFI查看温湿度操作也比较麻烦,还需要换电池,实在不能满足我的需求&#xff0…

SpringBoot新手快速入门系列教程四:创建第一个SringBoot的API

首先我们用IDEA新建一个项目,请将这些关键位置按照我的设置设置一下 接下来我将要带着你一步一步创建一个Get请求和Post请求,通过客户端请求的参数,以json格式返回该参数{“message”:"Hello"} 1,先在IDE左上角把这里改为文件模式…

笔记:SpringBoot+Vue全栈开发

笔记:SpringBootVue全栈开发 1. 开发环境热部署2. SpringBoot RestController的使用3. SpringBoot实现文件上传4. 配置拦截器5. Restful服务Swagger6. 使用MyBatis-Plus进行数据库操作7. 多表查询、条件查询及分页查询 1. 开发环境热部署 使用spring-boot-devtools…

泛微开发修炼之旅--31海康威视综合安防管理系统组织机构同步代码方案及源码

31海康威视综合安防管理系统组织机构同步代码方案及源码 一、使用场景 我们在一个项目中有一个和海康威视综合安防管理系统进行组织机构同步接口,接下来我们看下实现的源码 31海康威视综合安防管理系统组织机构同步代码方案及源码

【qt】如何获取本机的IP地址?

需要用到这个类QHostInfo和pro里面添加network模块 用这个类的静态函数forName()来获取该主机名的信息 返回的就是这个类 这个QHostInfo类就包括主机的IP地址信息 用静态函数addresses()来获取 返回的是一个QHostAddress的容器 QList<QHostAddress>addrList hostIn…

【车载开发系列】GIT安装详细教程

【车载开发系列】GIT安装详细教程 【车载开发系列】GIT安装详细教程 【车载开发系列】GIT安装详细教程一. GIT软件概念二. GIT安装步骤三. GIT安装确认三. GIT功能使用1&#xff09;Git Bash2&#xff09;Git CMD3&#xff09;Git FAQs4&#xff09;Git GUI 一. GIT软件概念 G…