【论文解读】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.mzph.cn/news/867431.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

进程的控制-ps和kill命令

ps 查看进程信息 部分参数: a : 显示现行终端机下的所有程序,包括其他用户的程序 u: 以用户为主的格式来显示程序状况 x: 显示所有程序,不以 终端机来区分 kill 向指定的进程发送信号 kill 可将指定的信息送至程序。预设的信息为 SIG…

OpenAI突然停止中国API使用,出海SaaS产品如何化挑战为机遇?

2023年是AI爆发的年代,人工智能带来的信息裂变刷新了整个SaaS行业。在这个AI引领的时代,我们不应该单纯依赖工具本身,而是要理解如何将这些AI功能与行业相结合。 然而,上周OpenAI宣布禁止对中国提供API服务,有一些用户…

六、数据可视化—flask框架入门(爬虫及数据可视化)

六、数据可视化—flask框架入门(爬虫及数据可视化) 1,数据可视化简介2,flask(1)创建flask项目(2)开启debug模式(3)通过访问路径传递参数(4&#x…

图的应用之最短路径

引入 应用 算法思想 Dijistra算法 用于解决单个顶点间的最短路径问题 将顶点看成两部分: 最短路径顶点集合A与尚未确定最短路径顶点集合B。 先将顶点按最短路径由小到大依次加入到A中,选择由源点到A中最短的顶点,并记录距离与顶点&#xf…

身体(body)的觉醒:如果你贪婪,给你整个宇宙都不够

佛,是一个梵文的汉语音译词,指觉醒者。 何谓觉醒?什么的觉醒?其实很简单,就是身体的觉醒。 佛的另一个名字,叫菩提,佛就是菩提,菩提老祖,就是佛祖。 一、body&#xff…

Lambda架构

1.Lambda架构对大数据处理系统的理解 Lambda架构由Storm的作者Nathan Marz提出,其设计目的在于提供一个能满足大数据系统关键特性的架构,包括高容错、低延迟、可扩展等。其整合离线计算与实时计算,融合不可变性、读写分离和复杂性隔离等原则&…

3.js - 裁剪平面(clipIntersection:交集、并集)

看图 代码 // ts-nocheck// 引入three.js import * as THREE from three// 导入轨道控制器 import { OrbitControls } from three/examples/jsm/controls/OrbitControls// 导入lil.gui import { GUI } from three/examples/jsm/libs/lil-gui.module.min.js// 导入tween import …

深度解析Ubuntu版本升级:LTS版本升级指南

深度解析Ubuntu版本升级:Ubuntu版本生命周期及LTS版本升级指南 Ubuntu是全球最受欢迎的Linux发行版之一,其版本升级与维护策略直接影响了无数用户的开发和生产环境。Canonical公司为Ubuntu制定了明确的生命周期和发布节奏,使得社区、企业和开…

Spring AOP源码篇三之 xml配置

简单代码示例, 了解Spring AOP基于xml的基本用法 xml配置&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-insta…

django之url路径

方式一&#xff1a;path 语法&#xff1a;<<转换器类型:自定义>> 作用&#xff1a;若转换器类型匹配到对应类型的数据&#xff0c;则将数据按照关键字传参的方式传递给视图函数 类型&#xff1a; str: 匹配除了”/“之外的非空字符串。 /test/zvxint: 匹配0或任何…

golang线程池ants-实现架构

1、总体架构 ants协程池&#xff0c;在使用上有多种方式(使用方式参考这篇文章&#xff1a;golang线程池ants-四种使用方法)&#xff0c;但是在实现的核心就一个&#xff0c;如下架构图&#xff1a; 总的来说&#xff0c;就是三个数据结构&#xff1a; Pool、WorkerStack、goW…

【前端实现】在父组件中调用公共子组件:注意事项逻辑示例 + 将后端数组数据格式转换为前端对象数组形式 + 增加和删除行

【前端】在父组件中调用公共子组件的实现方法 写在最前面一、调用公共子组件子组件CommonRow.vue父组件ParentComponent.vue 二、实现功能1. 将后端数组数据格式转换为前端对象数组形式2. 增加和删除row 三、小结 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2…

全景图三维3D模型VR全景上传展示H5开发

全景图三维3D模型VR全景上传展示H5开发 3D互动体验平台的核心功能概览 兼容广泛格式&#xff1a;支持OBJ、FBX、GLTF等主流及前沿3D模型格式的无缝上传与展示&#xff0c;确保创意无界。 动态交互探索&#xff1a;用户可自由旋转、缩放、平移模型&#xff0c;深度挖掘每一处…

STMF4 硬件IIC(天空星开发板)

前言&#xff1a;笔记参考立创开发文档&#xff0c;连接放在最后 #IIC概念介绍 #IIC介绍 IIC通信协议&#xff0c;一种常见的串行通信协议&#xff0c;英文全程是 Inter-Integrated Circuit 使用这种通信方式的模块&#xff0c;通常有SCL&#xff08;Serial Clock Line&…

pytest使用报错(以及解决pytest所谓的“抑制print输出”)

1. 测试类的类名问题 #codingutf-8import pytestclass TestClass1:def setup(self) -> None:print(setup)def test_01(self) -> None:print(test_01111111111111111111111)def test_02(self) -> None:print(test_02)以上述代码为例&#xff0c;如果类名是Test开头&am…

Chair Footrest Protective Cover

Chair Footrest Protective Cover 万能通用型椅子脚垫保护套凳子耐磨硅胶加厚垫桌椅脚垫防滑静音套

Docker逃逸CVE-2019-5736、procfs云安全漏洞复现,全文5k字,超详细解析!

Docker容器挂载procfs 逃逸 procfs是展示系统进程状态的虚拟文件系统&#xff0c;包含敏感信息。直接将其挂载到不受控的容器内&#xff0c;特别是容器默认拥有root权限且未启用用户隔离时&#xff0c;将极大地增加安全风险。因此&#xff0c;需谨慎处理&#xff0c;确保容器环…

我使用HarmonyOs Next开发了b站的首页

1.实现效果展示&#xff1a; 2.图标准备 我使用的是iconfont图标&#xff0c;下面为项目中所使用到的图标 3. 代码 &#xff08;1&#xff09;Index.ets&#xff1a; import {InfoTop} from ../component/InfoTop import {InfoCenter} from ../component/InfoCenter import…

Mxnet转Onnx 踩坑记录

0. 前言 使用将MXNET模型转换为ONNX的过程中有很多算子不兼容&#xff0c;在此对那些不兼容的算子替换。在此之前需要安装mxnet分支v1.x版本作为mx2onnx的工具&#xff0c;git地址如下&#xff1a; mxnet/python/mxnet/onnx at v1.x apache/mxnet GitHub 同时还参考了如下…

【postgresql】 基础知识学习

PostgreSQL是一个高度可扩展的开源对象关系型数据库管理系统&#xff08;ORDBMS&#xff09;&#xff0c;它以其强大的功能、灵活性和可靠性而闻名。 官网地址&#xff1a;https://www.postgresql.org/ 中文社区&#xff1a;文档目录/Document Index: 世界上功能最强大的开源…