OpenDevin:一个面向通用型agent AI软件开发者的开放平台
Code https://github.com/OpenDevin/OpenDevinBenchmark https://hf.co/spaces/OpenDevin/evaluationSlack https://bit.ly/OpenDevin-Slack论文标题:OpenDevin: An Open Platform for AI Software Developers as Generalist Agents论文链接:https://arxiv.org/pdf/2407.16741软件是论文人类拥有的最强大的工具之一;它使熟练的程序员能够以复杂而深刻的方式与世界互动。同时,得益于大型语言模型(LLMs)的改进,与周围环境互动并产生影响的AIagent 也得到了快速发展。论文介绍OpenDevin,这是一个社区驱动的平台,旨在开发通过软件与世界交互的通才及专才AI agent 。其特点包括: (1) 一种交互机制,允许用户界面、agent 和环境通过强大而灵活的事件流架构进行交互。
(2) 一个由沙盒操作系统和一个网页浏览器组成的环境,agent 可以利用这些环境来完成任务。
(3) 一个接口,允许agent 以类似于实际软件工程师的方式与环境交互。论文提供agent 以下能力:(a) 创建复杂的软件,(b) 执行代码,以及(c) 浏览网站以收集信息。
(4) 多agent 委托,允许多个专业agent 协同工作。
(5) 评估框架,便于对agent 在广泛任务上的表现进行评估。
重要的是,OpenDevin不仅是一个概念框架,还包括了agent 、环境和评估的全面且即用的实现。截至目前,OpenDevin包含一个拥有超过10个已实现agent 的agent 中心,其中包括一个基于CodeAct架构实现的强大通用agent,并增加了网页浏览[52]和代码编辑功能[2]。用户通过聊天界面与系统交互,该界面可视化agent 的当前动作并允许实时反馈。此外,评估框架目前支持15个基准测试,论文用这些基准来评估论文的agent。随着AIagent 逐渐能够解决复杂问题,其开发与评估也变得更具挑战性。近期,众多努力致力于创建开源框架以促进agent 的开发。这些agent 框架通常包含:(1) agent 与世界交互的接口(如基于JSON的函数调用或代码执行)
(2) agent 运作的环境
(3)人机或agent 间通信的交互机制。这些框架通过多种方式简化了开发流程(见表1,SC部分)。
在设计AIagent 时,论文还可考虑人类如何与世界互动。目前,人类与世界互动的最强方式是通过软件——软件驱动着论文生活的方方面面,从基本需求的物流支持到科学技术及AI本身的进步。鉴于软件的强大功能及其在高效开发、使用和部署方面的现有工具,它为AIagent 以复杂方式与世界交互提供了理想的接口。然而,构建能够有效开发软件的agent 也带来了独特的挑战。论文如何使agent 能够有效创建和修改复杂软件系统中的代码?论文如何为他们提供工具,以便实时收集信息进行问题调试或获取任务所需信息?论文如何确保开发过程的安全性,避免对用户系统产生负面影响? 论文使用OpenDevin描述了:(1) 如何定义和实现agent ,(2) 每个动作执行如何导致观察结果,(3) 如何可靠地管理和执行agent 仅使用的技能,以及(4) 如何将多个agent 组合在一起以解决任务。图3提供了概览。一个agent 能够感知环境状态(例如,先前的动作和观察结果),并在解决用户特定任务时产生执行动作。状态与事件流。在OpenDevin中,状态是一种数据结构,封装了agent 执行所需的所有相关信息。该状态的一个关键组成部分是事件流,它是一个按时间顺序排列的过去动作和观察结果的集合,包括agent 自身的动作和用户交互(例如,指令、反馈)。然而,状态不仅仅局限于事件流。 图1:OpenDevin 用户界面(UI,SD)允许用户查看文件、检查执行的bash命令/Python代码、观察agent 的浏览器活动,并直接与agent 交互。还包括agent 操作的辅助信息,例如LLM调用的累积成本、用于跟踪多agent 委托的元数据以及其他执行相关参数。行动。受 CodeAct [63] 启发,OpenDevin 通过一组核心通用行动将agent 与环境连接。IPythonRunCellAction 和 CmdRunAction 使agent 能在沙盒环境(如安全隔离的 Linux 操作系统)中执行任意 Python 代码和 bash 命令。BrowserInteractiveAction 允许使用 BrowserGym 引入的特定领域语言与网络浏览器交互。基于编程语言(PL)的行动空间既强大又灵活,可使用不同形式的工具(如 Python 函数、REST API 等)执行任何任务 ,同时保持可靠性和易维护性。这种设计也兼容需要预定义工具列表的现有工具调用agent。用户可以轻松使用 OpenDevin 原始行动支持的 PL 定义工具(如为计算器编写 Python 函数),并通过类 JSON 的函数调用体验 使这些工具可供agent 使用。此外,框架强大的基于 PL 的原语使agent 能在直接相关 API 不可用时自行创建工具(如生成 Python 函数 )。 观察。观察描述agent 观察到的环境变化。这可能由agent 的行动引起,也可能不是:它可以是 1) 用户指示agent 执行特定任务的自然语言消息,2) agent 先前行动的执行结果(如代码执行结果、可访问性树 、网页截图等)。实现新agent 。agent 抽象设计简单而强大,允许用户轻松创建和定制各种任务的agent 。agent 抽象的核心在于 step 函数,它以当前状态为输入,基于agent 逻辑生成适当的行动。图 2 展示了agent 抽象的简化示例代码。通过提供这种抽象,OpenDevin 允许用户专注于定义所需的agent 行为和逻辑,而无需关心行动执行的底层细节。图 3:OpenDevin 由三个主要组件组成:1) agent 抽象,社区可以在此贡献不同实现的agent (S2.1)到agent 中心(S3);2) 事件流,用于跟踪动作和观察的历史记录;3) agent 运行时,执行所有agent 动作并转化为观察结果(2.2)2.2.2 agent 运行时:动作执行如何产生观察结果agent 运行时提供了一个通用环境,使agent 具备与人类软件开发者相当的动作空间,使 OpenDevin agent 能够处理广泛的软件开发和基于网络的任务,包括复杂的软件开发工作流程、数据分析项目、网页浏览任务等。它允许agent 访问 bash 终端以运行代码和命令行工具,使用 Jupyter 笔记本进行即时编写和执行代码,并与网络浏览器交互以进行基于网络的任务(例如,信息搜索)。 Linux SSH 沙盒。对于每个任务会话,OpenDevin 会启动一个安全隔离的 Docker 容器沙盒,其中所有来自agent 的 bash 命令都在此执行。OpenDevin 通过 SSH 协议连接到沙盒,执行agent 发送的任意命令,并将执行结果作为观察结果返回给agent 。一个可配置的工作区目录,包含用户希望agent 处理的文件,会被挂载到这个安全沙盒中,供 OpenDevin agent 访问。Jupyter IPython。Linux 沙盒还支持运行一个交互式 Jupyter 服务器,agent 可以使用它进行交互式 Python 代码执行和调试。Web 浏览器。OpenDevin 实现了一个基于 Playwright 的 Chromium 浏览器。它通过 BrowserGym 定义的一组浏览器动作原语 与agent 进行交互,例如导航、点击、输入、滚动。执行这些动作后,浏览器运行时会提供关于浏览器当前状态的丰富观察结果,包括 HTML、DOM、可访问性树、截图、打开的标签页等。这些观察结果还可以通过可配置的属性进行增强,使agent 更好地理解网页观察结果,例如使用截图上的标记集、可见元素标记、焦点元素、可交互元素标记、视口内元素过滤 等。表1:不同AIagent 框架的比较。SwE指的是“软件工程”。标准化工具库:如果框架包含可重用的工具用于不同的agent 实现;内置沙盒与代码执行:如果支持沙盒执行任意agent 生成的代码;内置网页浏览器:如果为agent 提供完全功能的网页浏览器访问;人机协同:如果支持多轮人机协同(例如,人类可以在任务执行过程中中断agent ,和/或提供额外反馈和指令);AgentHub:如果托管多种agent 实现;评估框架:如果提供对实施agent 在挑战性基准上的系统评估;agent 质量控制(QC):如果框架集成测试(SE)以确保整体框架软件质量 2.2.3 agent技能:可扩展的agent-计算机接口SWE-Agent强调了精心设计的agent-计算机接口(ACI,即特定任务的专用工具)在成功解决复杂任务中的重要性。然而,创建、维护和分发大量工具可能是一个艰巨的工程挑战,尤其是在论文希望这些工具可供不同agent实现使用时。为了应对这些挑战,论文构建了AgentSkills库,这是一个旨在增强agent能力的工具箱,提供了通过基本bash命令或Python代码不易获得的实用程序。易于创建和扩展工具。AgentSkills设计为包含不同实用函数(即工具)的Python包,这些函数会自动导入到Jupyter IPython环境中(82.2)。将Python函数定义为工具的简易性降低了社区成员为技能库贡献新工具的门槛。Python包的通用性也使得不同的agent实现能够通过论文的核心动作IPythonRunCellAction轻松利用这些工具。严格测试和维护。论文遵循软件工程的最佳实践,为AgentSkills中的工具编写了广泛的单元测试,以确保其可靠性和可用性。纳入标准与理念。在AgentSkills库中,论文的目标并非包装所有可能的Python包并重新教授agent 其使用方法(例如,LLM已知晓能读取CSV文件的pandas库,因此论文无需再创建工具来教导agent 读取相同文件格式)。论文仅在以下情况添加新技能:(1)对于LLM而言,直接编写代码实现该功能并非易事(例如,编辑代码并替换特定行),和/或(2)涉及调用外部模型(例如,调用语音转文本模型,或代码编辑模型)。 当前支持的技能。AgentSkills库包含从SWE-Agent[72]改编的文件编辑工具,如edit file,允许从指定行修改现有文件;滚动功能scroll up和scroll down用于查看文件的不同部分。此外,它还包含支持阅读多模态文档的工具,如parse-image和parse-pdf,分别利用视觉-语言模型(例如,GPT-4V)从图像中提取信息和从PDF中读取文本。2.2.4 agent 委托:协作多agent 交互OpenDevin同样支持多个agent 之间的交互。为此,论文采用了一种特殊动作类型AgentDelegateAction,使一个agent 能够将特定子任务委托给另一个agent 。例如,具备有限网页浏览能力的通用型CodeActAgent,可以通过AgentDelegateAction将网页浏览任务委托给专门的BrowsingAgent,以执行更复杂的浏览活动(例如,导航网页、点击按钮、提交表单,等等)。2.3 AgentHub:社区贡献agent 的集线器基于论文的agent 抽象,OpenDevin支持广泛的社区贡献agent 实现,供终端用户选择,并作为不同agent 任务的基准。CodeAct Agent。CodeActAgent 是基于 CodeAct 框架 的默认通用型agent 。在每个步骤中,agent 可以(1)通过自然语言与人类交流,以请求澄清、确认等,或者(2)通过执行代码(即 CodeAct)来完成任务,包括执行 bash 命令、Python 代码或特定于浏览器的编程语言。这种通用动作空间使得agent (v1.5 及以上版本)能够执行多种任务,包括编辑文件、浏览网页、运行程序等。浏览agent 。论文实现了一个名为 Browsing Agent 的通用型网络agent ,作为网络agent 任务的简单而有效的基线。该agent 类似于 WebArena中的agent ,但具有改进的观察和动作,仅使用零样本提示。在每个步骤中,agent 通过任务描述、浏览动作空间描述、使用可访问性树的当前浏览器观察、先前动作以及带有链式思考推理的动作预测示例来提示大型语言模型(LLM)。LLM 的预期响应将包含链式思考推理以及预测的下一个动作,包括完成任务并向用户传达结果的选项。GPTSwarm agent 。GPTSwarm 开创性地使用可优化的图来构建agent 系统,通过模块化统一语言agent 框架。每个节点代表一个独特的操作,而边定义协作和通信路径。这种设计允许自动优化节点和边,推动多agent 系统的进步。 微型agent (Micro Agent)。此外,OpenDevin 支持创建微型agent ,这是一种针对特定任务的agent 。微型agent 复用了现有通用agent (例如,CodeAct Agent)的大部分实现。其设计旨在降低agent 开发的门槛,社区成员可以分享针对其特定用例表现良好的专用提示。无需编程,用户只需提供agent 的名称、描述、输入和输出的模式,以及可选的专用提示(例如,展示如何执行特定任务的示例演示),即可创建微型agent ,例如生成 git 提交消息的 CommitWriterAgent,以及用于纠正整个代码库拼写错误的 TypoFixerAgent。为了系统地跟踪构建通用数字agent 的进展,如表 2 所示,论文将 15 个已建立的基准集成到 OpenDevin 中。这些基准涵盖软件工程、网页浏览和杂项辅助任务。这里论文将 OpenDevin 与不基于基准内容进行手动提示工程的开源可复现基线进行比较。请注意,为了简洁起见,本节余下部分论文将 OpenDevin 简称为 OD。在 OpenDevin 中,论文的目标是开发能够通过软件接口与世界交互的通用数字agent。论文认识到,软件agent 不仅应在代码编辑方面表现出色,还应在网页浏览和各种辅助任务中表现优异,例如回答有关代码仓库的问题或进行在线研究。表 3:OpenDevin agent 的选定评估结果(84)。完整结果请参见表 4(软件)、表 5(网页)、表 6(杂项辅助)表3展示了一系列精选的评估结果。尽管OpenDevinagent 在每个类别中可能无法达到顶尖性能,但它们的设计考虑到了通用性。值得注意的是,同一个CodeActagent ,无需对其系统提示进行任何修改,就在三大任务类别(软件开发、网页交互和杂项任务)中展示了竞争性的表现。与通常为特定任务类别设计和优化的基准agent 相比,这一点尤为显著。 SWE-bench旨在评估agent 解决真实GitHub问题的能力,如错误报告或功能请求。agent 与仓库交互并通过文件编辑和代码执行尝试修复问题。agent 修改后的代码仓库会针对一个测试套件进行测试,该套件包含了从人类开发者对同一问题的修复中添加的新测试。每个测试实例都附带一段“提示文本”,包含自然语言建议,指导如何解决问题。在本文中,论文报告的所有结果均未使用提示文本。为了便于访问和高效测试,创建了一个规范子集,即SWE-bench Lite。出于成本节约考虑,论文默认使用此子集进行测试。结果。如表4所示,论文最新版本的 CodeActAgent v1.8 通用agent ,使用 claude-3.5-sonnet 模型,达到了 26% 的解决率,与其他专门用于软件开发的开源agent 相比具有竞争力。论文还使用 gpt-4o-mini 评估了 CodeActAgent v1.8。虽然它仅解决了 6.3% 的问题,但其成本不到其他模型的 1%。HumanEvalFix要求agent 在提供的测试用例帮助下修复给定函数中的bug。这些bug的设计确保了一个或多个测试用例会失败。论文专注于该基准测试的Python子集,允许模型通过多轮自我调试来解决bug,并结合测试执行的反馈。论文遵循Muennighoff等人 [37] 的设置,使用pass@k [8]。结果。如表4所示,OpenDevin CodeActAgent成功修复了Python分支中79.3%的bug。这显著优于所有非agent 方法,几乎是StarCoder2-15B [28, 32] 性能的两倍。虽然SWE-Agent达到了87.7%,但Yang等人 [72] 为模型提供了一个完整的示范,展示了成功修复测试数据集中一个bug的样本轨迹("1-shot"),而论文对OpenDevin的评估是0-shot(无示例)。由于HumanEvalFix是由人类创建的,所有bug都经过仔细验证,在这个基准测试中达到100%是完全可行的,这也是论文在OpenDevin未来迭代中希望实现的目标。 ML-Bench 评估agent 在18个GitHub仓库中解决机器学习任务的能力。该基准包含9,641个任务,涵盖169个多样化的ML问题,要求agent 根据用户指令生成bash脚本或Python代码。在沙盒环境中,agent 可以迭代执行命令并接收反馈,使其能够逐步理解仓库上下文并满足用户需求。按照原始论文的设置,论文对ML-Bench的四分之一子集进行agent 评估。结果。如表4所示,搭载GPT-4o的OpenDevinagent 在ML-Bench上取得了76.47%的最高成功率,超越了SWE-Agent (42.0470)。性能随着模型能力的降低而下降。这些结果展示了Devinagent 在复杂ML任务中的有效性。论文注意到,在ML-LLM-Bench设置下,与非agent 方法相比,agent 显示出减少幻觉和语法错误的潜力[57]。Gorilla APIBench评估agent 使用API的能力。它包含涉及TorchHub、TensorHub和HuggingFace的任务。在评估过程中,模型会收到一个与API使用相关的问题,例如“识别一个能够将录音中的口语转换为文本的API”。正确性评估基于模型的API调用是否在正确的领域内。结果。如表4所示,使用GPT-4o的OpenDevin以36.4%的成功率,优于未专门微调用于API调用的基线模型。尽管Gorilla在APIBench上表现更佳,但Patil等人特别针对API调用对这一模型进行了微调。ToolQA[81]评估agent 使用外部工具的能力。该基准包括涉及航班状态、咖啡价格、Yelp数据和Airbnb数据等主题的任务,需要使用各种工具,如文本工具、数据库工具、数学工具、图形工具、代码工具和系统工具。它分为两个难度级别:简单和困难。简单问题侧重于单一工具的使用,而困难问题则强调推理。在评估中,使用简单子集来评估工具使用能力。结果。与所有基线相比,使用GPT-4o的OpenDevin表现出最高性能。BioCode是一个仓库级代码生成基准,评估agent 在生物信息学相关任务上的表现,特别是检索和准确利用上下文的能力。原始提示包含相关代码的上下文;然而,论文已将其移除,以展示OpenDevin在多轮交互中进行上下文检索、自我调试和推理的能力。BioCoder包含157个Python函数和50个Java函数,每个函数针对生物信息学中的特定领域,如蛋白质组学、基因组学和其他专业领域。该基准通过在现有仓库中生成代码来针对实际代码,其中相关代码已被屏蔽。 结果。表4显示,使用GPT-4o的OpenDevin达到了44.0\%的成功率。这一成绩超越了所有基于提示的非agent 基线模型,其中单独使用GPT-4仅能达到较低水平。BioCoder被证明是对非agent 方法特别具有挑战性的基准,因为它们没有整合任何仓库级别的检索方法,使得这些模型缺乏访问关键的仓库级别信息,如全局变量和函数声明。BIRD 是一个针对文本到SQL任务(即,将自然语言翻译成可执行SQL)的基准,旨在现实且大规模的数据库环境中进行。论文从开发集中选取300个样本整合到OpenDevin中,并基于执行准确性进行评估。此外,论文扩展了设置,允许agent 进行多轮交互以得出最终的SQL查询,使其能够通过观察SQL执行结果来纠正历史结果。 结果。如表4所示,OpenDevin与GPT-4o在BIRD的一个子集上达到了47.3%的执行准确率,展示了OpenDevin作为SQLagent 的潜力。这一结果优于使用代码LLM进行提示的方法,例如CodeLlama-7B-Instruct(18.3%)和CodeQwen-7B-Chat(31.3%)。WebArena 是一个可自托管的、基于执行的网页agent 基准,允许agent 自由选择完成给定任务的路径。WebArena包含812个人工精选的任务指令,涵盖购物、论坛、开发者平台和内容管理系统等多个领域。每个任务都配有一个手写的测试用例,通过检查网页元素的状态或agent 返回的文本答案来验证agent 的成功。结果。从表5中可以看出,论文的BrowsingAgent在使用领域通用提示技术的LLMagent 中表现出了竞争力。一些agent (例如AutoWebGLM)需要针对WebArena任务域的手动调整。这展示了通用浏览agent 与领域定制专家agent 之间的性能权衡,论文选择更通用的浏览agent 作为OpenDevin中的构建模块。MiniWoBt+是一个交互式网页基准,内置奖励函数。任务在125个不同的极简网页界面上合成初始化。与WebArena不同,任务更简单,无需页面变化,步骤更少,并提供低级别的逐步任务指导。需要注意的是,它包含一部分需要视觉能力才能成功解决的环境,许多现有工作选择仅关注任务的一个子集。尽管如此,论文报告了全集的性能,并且只包括在全集上评估的基线。结果。从表5中论文可以看到,论文的通用型BrowsingAgent在不对环境进行任何适应的情况下,完成了近一半的任务。然而,由于MiniWoBtt的合成性质,那些专门为环境训练的先进agent ,通过强化学习或人类行为克隆的方式,几乎已经达到了性能的饱和。这表明在通用型和专家型agent 之间存在着比WebArena基准更大的权衡。杂项辅助基准的结果在表6中报告。特别是,论文报告了以下结果: GAIA 评估agent 的通用任务解决技能,涵盖不同的现实场景。它要求agent 具备多种能力,包括推理、多模态理解、网页浏览和编程。GAIA包含466个精选任务,分为三个级别。由于需要将多种工具与agent 集成,设置GAIA传统上具有挑战性,但OpenDevin的基础设施(例如,运行时\S2.2,今天2.3)显著简化了集成过程。结果。在论文的实验中,论文在GAIA(一级验证)上取得了32.1的分数,显著超过了原始的AutoGPT [14]。GAIA对多模态输入和网页导航技能的支持非常敏感,随着OpenDevin基础设施的改进,预计将进一步提高分数。GPQA 评估agent 在解决高难度研究生级别问题时协调工具使用的能力。它包含448个精选且难度较高的生物学、物理学和化学多选题。工具使用(例如,Python)和网络搜索通常有助于agent 回答这些问题,因为它们提供了LLM通常无法进行的精确计算,并提供了超出LLM参数知识库的信息访问。结果。结果展示在表6和表7中。论文观察到,OpenDevin集成支持多种工具使用(例如,用于计算的Python)以及网页搜索(用于搜索相关事实),使得生成的agent 能够更好地解决复杂的多步骤问题,在GPQA[50]的主要和钻石子集上分别超越了先前的最先进水平9.6%和12.3%。AgentBench评估agent 在多轮开放式生成环境中的推理和决策能力。论文选择了包含144个任务的代码基础操作系统(OS)子集。OpenDevin的agent 通过多轮方式使用bash命令直接与特定任务的OS交互,结合交互和推理来自动完成任务。结果。在论文的实验中(表6),OpenDevin CodeActAgent v1.5在使用gpt-4o的情况下在AgentBench上达到了57.6%的分数,超过了原论文中使用gpt-4的42.4%基线。有趣的是,当使用较弱的模型如gpt-3.5-turbo时,OpenDevinagent 通常表现不如原基线agent 。这一发现表明,像OpenDevin中实现的通用agent 需要一定的基础模型能力阈值——特别是遵循指令的能力——才能有效运作。MINT是一个基准测试,旨在评估agent 通过多轮交互使用工具和由GPT-4模拟的自然语言反馈解决挑战性任务的能力。论文使用Eurus[76]中使用的编码和数学子集进行评估。论文遵循与原论文相同的设置,允许agent 最多进行五次迭代,并给予两次提出解决方案的机会。 结果。如表6所示,OpenDevinagent 在原基准测试中与默认agent 表现相当,数学子集上有所改进。ProofWriter是一个合成数据集,旨在评估大型语言模型(LLMs)的演绎推理能力。与 Logic-LM [43] 一样,论文专注于最具挑战性的子集,其中包含 600 个需要 5 步推理的实例。为了最小化语义解析潜在错误的影响,论文使用 Logic-LM 提供的逻辑形式。 结果。如表 6 所示,OpenDevin agent 使用符号求解器来解决任务,达到了与最先进的神经符号模型(即 Logic-LM相当的性能。2.4.4.6 Entity Deduction Arena实体推理竞技场(Entity Deduction Arena,EDA)评估agent 通过战略性提问推断未知实体的能力,类似于"20个问题"游戏。这个基准测试考验agent 在多轮对话中的状态跟踪、战略规划和归纳推理能力。论文评估了两个数据集"Things"(物品)和"Celebrities"(名人),每个数据集包含100个实例,并报告这两个数据集的平均成功率。结果。表6显示,CodeActAgent与原论文 报告的结果相比,产生了可比的性能。