摘要
软件是我们人类拥有的最强大的工具之一;它允许熟练的程序员以复杂而深刻的方式与世界交互。同时,由于大型语言模型 (LLM) 的改进,与周围环境交互并影响周围环境变化的 AI Agent也得到了快速发展。在本文中,我们介绍了 OpenDevin,这是一个用于开发强大而灵活的 AI Agent的平台,这些Agent以与人类开发人员类似的方式与世界互动:通过编写代码、与命令行交互和浏览网页。我们描述了该平台如何实现新的Agent、与沙盒环境安全交互以执行代码、多个Agent之间的协调以及纳入评估基准。基于我们目前纳入的基准,我们对 15 项具有挑战性的任务中的Agent进行了评估,其中包括软件工程(例如 SWE-BENCH)和网页浏览(例如 WEBARENA)等。 OpenDevin 在宽松的 MIT 许可下发布,是一个横跨学术界和工业界的社区项目,拥有来自 160 多名贡献者的 1.3K 多项贡献,并且将不断改进。
1.介绍

在大型语言模型 (LLM) 的支持下,面向用户的 AI 系统(例如 ChatGPT)越来越能够执行复杂的任务,例如准确响应用户问题、解决数学问题和生成代码。特别是,AI Agent(可以感知外部环境并对其采取行动的系统)最近受到了越来越多的研究关注。它们正朝着执行复杂任务的方向发展,例如开发软件、浏览现实世界的网站、做家务,甚至进行科学研究。
随着人工智能Agent能够解决复杂问题,它们的开发和评估也变得具有挑战性。最近,人们在创建开源框架以促进Agent的开发方面做出了许多努力。这些Agent框架通常包括:1) Agent与世界交互的接口(例如基于 JSON 的函数调用或代码执行),2) Agent运行的环境,以及 3) 人与Agent或Agent与Agent之间通信的交互机制。这些框架以各种方式简化了开发过程(表 1,§C)。
在设计 AI Agent时,我们还可以考虑人类是如何与世界交互的。人类目前与世界交互的最强大方式是通过软件——软件为我们生活的方方面面提供动力,支持从基本需求的物流到科学、技术和 AI 本身的进步。鉴于软件的强大功能以及围绕其高效开发、使用和部署的现有工具,它为 AI Agent以复杂的方式与世界交互提供了理想的界面。然而,构建能够有效开发软件的Agent有其独特的挑战。我们如何让Agent在复杂的软件系统中有效地创建和修改代码?我们如何为它们提供工具来即时收集信息以调试问题或收集任务所需的信息?我们如何确保开发是安全的并避免对用户系统产生负面影响?
在本文中,我们介绍了 OpenDevin,这是一个社区驱动的平台,旨在开发通过软件与世界交互的通用和专业 AI Agent。它的特点是:
- 一种交互机制,允许用户界面、Agent和环境通过强大而灵活的事件流架构进行交互(§2.1)。
- 一种由沙盒操作系统和 Web 浏览器组成的环境,Agent可以利用它来完成其任务(§2.2)。
- 一种允许Agent以类似于实际软件工程师的方式与环境交互的界面(§2.3)。我们为Agent提供以下功能:(a)创建复杂软件,(b)执行代码,以及(c)浏览网站以收集信息。
- Multi-agent delegation,允许多个专门Agent共同工作(§2.4)。
- Evaluation framework,促进对Agent在广泛任务中的评估(§4)。
重要的是,OpenDevin 不仅仅是一个概念框架,它还包括一个全面且可立即使用的Agent、环境和评估实现。截至撰写本文时,OpenDevin 包含一个Agetn中心,其中已实现 10 多个Agent(§3),包括一个基于 CodeAct 架构实现的强大的通用Agent,并增加了 Web 浏览和代码编辑功能。与用户的交互是通过基于聊天的用户界面实现的,该界面可视化Agent的当前操作并允许实时反馈(图 1,§D)。此外,评估框架目前支持 15 个基准,我们使用它们来评估我们的Agent(§4)。
OpenDevin 是根据允许商业使用的 MIT 许可证发布的,旨在支持学术界和工业界的各种研究和实际应用。OpenDevin 获得了巨大的关注,拥有 28000 个 GitHub 星标和来自 160 多名贡献者的 1300 多份贡献。我们设想 OpenDevin 将成为由广大从业者社区推动的未来研究创新和各种应用的催化剂。

2.OpenDevin Architecture

我们使用 OpenDevin 描述:(1) 如何定义和实现Agent (§2.1)、(2) 每个动作执行如何导致观察 (§2.2)、(3) 如何可靠地管理和扩展Agent常用的技能 (§2.3) 以及 (4) 如何将多个Agent组合在一起以解决任务 (§2.4)。图 3 提供了概述。
2.1 Agent Definition and Implementation

Agent可以感知环境的状态(例如,之前的动作和观察)并在解决用户指定的任务时产生要执行的动作。
The State and Event Stream。在 OpenDevin 中,状态是一种数据结构,它封装了Agent执行的所有相关信息。状态的一个关键组成部分是事件流(event stream),它是按时间顺序排列的过去操作和观察的集合,包括Agent自己的操作和用户交互(例如,指令、反馈)。但是,状态不仅限于事件流。它还包含Agent操作的辅助信息,例如 LLM 调用的累计成本、用于跟踪多Agent委托的元数据(§2.4)以及其他与执行相关的参数。
Actions。OpenDevin 受到 CodeAct 的启发,通过一组核心的常规操作将Agent与环境连接起来。操作 IPythonRunCellAction 和 CmdRunAction 使Agent能够在沙盒环境(例如安全隔离的 Linux 操作系统)内执行任意 Python 代码和 bash 命令。BrowserInteractiveAction 支持与 Web 浏览器进行交互,该浏览器使用 BrowserGym 引入的领域特定语言进行浏览。基于编程语言 (PL) 的操作空间功能强大且足够灵活,可以使用不同形式的工具(例如 Python 函数、REST API 等)执行任何任务,同时可靠且易于维护。
这种设计还与需要预定义工具列表的现有工具调用Agent兼容。也就是说,用户可以使用 OpenDevin 原语操作中支持的 PL 轻松定义工具(例如,为计算器编写 Python 函数),并通过 JSON 样式的函数调用将这些工具提供给Agent。此外,当没有直接相关的 API 来完成任务时,框架强大的基于 PL 的原语进一步使Agent能够自己创建工具(例如,通过生成 Python 函数)。请参阅 §2.3 了解如何将这些基于 PL 的核心操作组合成一组多样化的工具。
Observations。观察描述了Agent观察到的环境变化。它可以由Agent的操作引起,也可以不是Agent的操作引起:它可以是 1) 来自用户提示Agent执行某些任务的自然语言消息,2) Agent先前操作的执行结果(例如,代码执行结果、可访问性树、网页的屏幕截图等)。
Implement a New Agent。Agent抽象的设计简单而强大,允许用户轻松创建和自定义用于各种任务的Agent。Agent抽象的核心在于步骤函数,它将当前状态作为输入并根据Agent的逻辑生成适当的操作。图 2 显示了Agent抽象的简化示例代码。通过提供此抽象,OpenDevin 允许用户专注于定义所需的Agent行为和逻辑,而无需担心如何执行操作的低级细节(§2.2)。
2.2 Agent Runtime: How Execution of Actions Results in Observations
Agent Runtime 提供了一个通用环境,为Agent提供了与人类软件开发人员相当的动作空间,使 OpenDevin Agent能够处理各种软件开发和基于 Web 的任务,包括复杂的软件开发工作流程、数据分析项目、Web 浏览任务等。它允许Agent访问 bash 终端来运行代码和命令行工具,利用 Jupyter notebook即时编写和执行代码,并与 Web 浏览器交互以执行基于 Web 的任务(例如,信息搜索)。
Linux SSH Sandbox。对于每个任务会话,OpenDevin 都会启动一个安全隔离的 docker 容器沙盒,Agent的所有 bash 命令都会在此执行。OpenDevin 通过 SSH 协议连接到沙盒,执行来自Agent的任意命令,并将执行结果作为观察结果返回给Agent。可配置的工作区目录包含用户希望Agent处理的文件,该目录被安装到该安全沙盒中,供 OpenDevin Agent访问。
Jupyter IPython。Linux 沙盒还支持运行交互式 Jupyter 服务器,Agent可以使用它来进行交互式 Python 代码执行和调试。
Web Browser。OpenDevin 基于 Playwright 实现了 Chromium 浏览器。它使用 BrowserGym 定义的一组浏览器操作原语与Agent交互,例如导航、单击、键入、滚动。完整的操作集在附录 §I 中有详细说明。执行这些操作后,浏览器运行时会提供一组有关浏览器当前状态的丰富观察结果,包括 HTML、DOM、可访问性树、屏幕截图、打开的选项卡等。这些观察结果还可以通过可配置属性进行增强,从而使Agent能够更好地理解网页观察结果,例如在屏幕截图上使用一组标记、可见元素标记、聚焦元素、可交互元素标记、视口内元素过滤等。
2.3 Agent Skills: The Extensible Agent-Computer Interface
SWE-Agent 强调了精心设计的Agent计算机接口 (ACI,即针对特定任务的专用工具) 在成功解决复杂任务方面的重要性。但是,创建、维护和分发各种工具可能是一项艰巨的工程挑战,尤其是当我们想让这些工具可用于不同的Agent实现时 (§3)。为了解决这些问题,我们构建了一个 AgentSkills 库,这是一个旨在增强Agent功能的工具箱,其提供了通过基本 bash 命令或 python 代码无法轻松获得的实用程序。
Easy to create and extend tools。AgentSkills 被设计为一个 Python 包,由不同的实用函数(即工具)组成,这些函数会自动导入 Jupyter IPython 环境(§2.2)。将 Python 函数定义为工具的便利性降低了社区成员向技能库贡献新工具的门槛。Python 包的通用性还允许不同的Agent实现通过我们的核心操作之一 IPythonRunCellAction(§2.1)轻松利用这些工具。
Rigorously tested and maintained。我们遵循软件工程的最佳实践,为 AgentSkills 中的工具编写大量单元测试,以确保其可靠性和可用性。
Inclusion criteria and philosophy。在 AgentSkills 库中,我们并不打算包装所有可能的 Python 包并重新教Agent它们的用法(例如,LLM 已经知道可以读取 CSV 文件的 pandas 库,因此我们不需要重新创建一个教Agent读取相同文件格式的工具)。我们仅在以下情况下添加新技能:(1) LLM 无法直接编写代码(例如,编辑代码并替换某些行),和/或 (2) 它涉及调用外部模型(例如,调用语音转文本模型或代码编辑模型)。
Currently supported skills。AgentSkills 库包含改编自 SWEAgent 的文件编辑实用程序,例如 edit_file,允许从指定行修改现有文件;滚动函数 scroll_up 和 scroll_down 用于查看文件的不同部分。它还包含支持读取多模态文档的工具,例如 parse_image 和 parse_pdf,分别用于使用视觉语言模型(例如 GPT-4V)从图像中提取信息以及从 PDF 中读取文本。支持的技能的完整列表可在附录 §H 中找到。
2.4 Agent Delegation: Cooperative Multi-agent Interaction
OpenDevin 还允许多个Agent之间的交互。为此,我们使用一种特殊的操作类型 AgentDelegateAction,它允许Agent将特定的子任务委托给另一个Agent。例如,通用的 CodeActAgent 对网页浏览的支持有限,可以使用 AgentDelegateAction 将网页浏览任务委托给专门的 BrowsingAgent 来执行更复杂的浏览活动(例如,浏览网页、单击按钮、提交表单等)。
3.AgentHub: A Hub of Community-Contributed Agents
基于我们的Agent抽象(§2.1),OpenDevin 支持广泛的社区贡献的Agent实现,供最终用户选择,并作为不同Agent任务的基线。
CodeAct Agent。CodeActAgent 是基于 CodeAct 框架的默认通用Agent。在每个步骤中,Agent可以 (1) 用自然语言与人类交谈以寻求澄清、确认等,或 (2) 通过执行代码(又名 CodeAct)执行任务,包括执行 bash 命令、Python 代码或特定于浏览器的编程语言(§2.2)。这个通用动作空间允许Agent(v1.5 及以上版本)执行各种任务,包括编辑文件、浏览网页、运行程序等。
Browsing Agent。我们实现了一个通用的 Web Agent,称为浏览Agent,作为 Web Agent任务的简单而有效的基线。该Agent与 WebArena 中的Agent类似,但改进了观察和操作,并且只有zero-shot提示。在每个步骤中,Agent都会向 LLM 提示任务描述、浏览操作空间描述、使用可访问性树的浏览器当前观察、先前的操作以及带有思维链推理的操作预测示例。LLM 的期望响应将包含思路链推理以及预测的下一步操作,包括完成任务并将结果传达给用户的选项。完整的提示在 §J 中。它可以扩展以创建更强大的 Web Agent,或通过委派(§2.4)由其他Agent调用以启用浏览功能。
GPTSwarm Agent。GPTSwarm 率先使用可优化的图形来构建Agent系统,通过模块化统一语言Agent框架。每个节点代表一个不同的操作,而边定义协作和通信路径。这种设计允许自动优化节点和边,推动创建多Agent系统的进步。
Micro Agent(s)。此外,OpenDevin 还支持创建微Agent,即专门用于特定任务的Agent。微Agent重用了现有通用Agent(例如 CodeAct Agent)的大多数实现。它旨在降低Agent开发的门槛,社区成员可以共享适合其特定用例的专用提示。无需编程,用户可以通过提供Agent的名称、描述、输入和输出的架构以及可选的专用提示(例如,展示如何执行特定任务的示例演示)来创建微Agent,从而使通用Agent适应特定任务,例如用于生成 git 提交消息的 CommitWriterAgent 和用于纠正整个代码存储库中的拼写错误的 TypoFixerAgent。
4.Evaluation

661

被折叠的 条评论
为什么被折叠?



