【论文解读】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.mfbz.cn/a/778299.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

nginx(三)—从Nginx配置熟悉Nginx功能

一、 Nginx配置文件结构 ... #全局块events { #events块... }http #http块 {... #http全局块server #server块{ ... #server全局块location [PATTERN] #location块{...}location [PATTERN] {...}}server{...}... #http全局块 …

智慧矿山建设规划方案(121页Word)

智慧矿山建设项目方案摘要 一、项目背景及现状分析 项目背景 随着信息技术的迅猛发展,智慧化、数字化已成为矿山行业转型升级的必然趋势。智慧矿山建设项目旨在通过集成先进的信息技术手段,实现对矿山生产、管理、安全等全过程的智能化监控与管理&…

Python统计实战:时间序列分析之一元线性回归预测和指数曲线预测

为了解决特定问题而进行的学习是提高效率的最佳途径。这种方法能够使我们专注于最相关的知识和技能,从而更快地掌握解决问题所需的能力。 (以下练习题来源于《统计学—基于Python》。请在Q群455547227下载原始数据。) 练习题 下表是某只股票…

大数的排列组合公式C代码

我们知道,计算排列A(n,m)和组合C(n,m)可以用先求阶乘的方式实现,但是当数很大时求阶乘很容易溢出,所以这里给出非阶乘的方式求排列组合 求排列 分母和分子可以抵消,最后代码如下 unsigned long long A(int n, int m) {unsigned…

代码随想录-Day49

300. 最长递增子序列 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的 …

进程控制-fork函数

一个进程,包括代码、数据和分配给进程的资源。 fork ()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同…

第十六章 Qt的文件处理操作详解

目录 一、基本文件操作 二、二进制文件读写 三、文本文件读写 四、操作例子 1、QTextStream的流操作符 一、基本文件操作 文件操作是应用程序必不可少的部分。Qt 作为一个通用开发库,提供了跨平台的文件操作能力。在所有的 I/O 设备中,文件 I/O 是最重要的部分之…

InfluxDB时序数据库基本使用介绍

1、概要介绍 1.1、时序数据库使用场景 所谓时序数据库就是按照一定规则的时间序列进行数据读写操作的数据库。它们常被用于以下业务场景: 物联网IOT场景:可用于IOT设备的指标、状态监控数据存取。IT建设场景:可用于服务器、虚拟机、容器的…

linux下的网络编程

网络编程 1. 网络基础编程知识1.1网络字节序问题1.2 常用socket编程接口1.2.1 sockaddr1.2.2 ip地址转换函数1.2.4 socket()1.2.3 bind()1.2.4 listen()1.2.5 accept()1.2.6 connect() 1.3 以udp为基础的客户端连接服务器的demo1.4 以udp为基础的的服务器聊天室功能demo1.5 基于…

解决vscode配置C++编译带有中文名称报错问题

在新电脑上安装vscode运行带有中文路径和中文名称的C代码时遇到报错 根据别人的教程将laugh.json文件中"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",改成了"program": "${fileDirname}\\output\\test.exe",&#x…

聊天广场(Vue+WebSocket+SpringBoot)

由于心血来潮想要做个聊天室项目 ,但是仔细找了一下相关教程,却发现这么多的WebSocket教程里面,很多都没有介绍详细,代码都有所残缺,所以这次带来一个比较完整得使用WebSocket的项目。 目录 一、效果展示 二、准备工…

大数据中的常见数据问题:独断脏

想象你刚刚入职一家声称正在进行"数字化转型"的大型企业,担任大数据开发工程师。在入职的第一周,你满怀热情,迫不及待地想要大展拳脚,用你的技能来推动公司的数据驱动决策。 目录 大数据中的常见数据问题1. 独 - 数据孤岛2. 断 - 数据价值链断层3. 缺 - 标准、治理…

并口、串口和GPIO口区别

并口 并行接口,简称并口。并口采用的是25针D形接头。所谓“并行”,是指8位数据同时通过并行线进行传送,这样数据传送速度大大提高,但并行传送的线路长度受到限制,因为长度增加,干扰就会增加,数据也就容易出错,目前,并行接口主要作为打印机端口等。 并口的工作模式 …

ctfshow web 36d 练手赛

不知所措.jpg 没啥用然后测试了网站可以使用php伪达到目的 ?filephp://filter/convert.base64-encode/resourcetest/../index.<?php error_reporting(0); $file$_GET[file]; $file$file.php; echo $file."<br />"; if(preg_match(/test/is,$file)){inclu…

安全测试之使用Docker搭建SQL注入安全测试平台sqli-labs

1 搜索镜像 docker search sqli-labs 2 拉取镜像 docker pull acgpiano/sqli-labs 3 创建docker容器 docker run -d --name sqli-labs -p 10012:80 acgpiano/sqli-labs 4 访问测试平台网站 若直接使用虚拟机&#xff0c;则直接通过ip端口号访问若通过配置域名&#xff0…

【论文笔记】UniST:通用预训练城市时空预测模型

目录 写在前面1. 通用时空模型的挑战与能力特性2. 构建通用时空模型UniST2.1 大规模时空预训练2.2 时空知识规则引导提示学习 3. UniST的实验与分析3.1 模型预测效果3.2其他实验分析 写在前面 文章标题&#xff1a;UniST: A Prompt-Empowered Universal Model for Urban Spati…

基于SpringBoot+Vue的招生管理系统(带1w+文档)

基于SpringBootVue的招生管理系统(带1w文档&#xff09; 通过招生管理系统的研究可以更好地理解系统开发的意义&#xff0c;而且也有利于发展更多的智能系统&#xff0c;解决了人才的供给和需求的平衡问题&#xff0c;招生管理系统的开发建设&#xff0c;由于其开发周期短&…

linux centos 安装niginx并且添加ssl(https)模块

文章目录 前言一、nginx安装教程1.流程步骤 总结 前言 一、nginx安装教程 1.流程步骤 代码如下&#xff08;示例&#xff09;&#xff1a; 1.先下载linux安装包 2.解压安装命令 sudo tar -zxvf nginx-1.20.1.tar.gz3.进入解压后的目录 sudo cd nginx-1.20.14.安装 sudo y…

AntDesign上传组件upload二次封装+全局上传hook使用

文章目录 前言a-upload组件二次封装1. 功能分析2. 代码详细注释3. 使用到的全局上传hook代码4. 使用方式5. 效果展示 总结 前言 在项目中&#xff0c;ant-design是我们常用的UI库之一&#xff0c;今天就来二次封装常用的组件a-upload批量上传组件,让它用起来更方便。 a-uploa…

C++ | Leetcode C++题解之第213题打家劫舍II

题目&#xff1a; 题解&#xff1a; class Solution { public:int robRange(vector<int>& nums, int start, int end) {int first nums[start], second max(nums[start], nums[start 1]);for (int i start 2; i < end; i) {int temp second;second max(fi…