夕小瑶科技说 原创
作者 | Axe_越
如果说Agent(智能体)为LLM(大模型)找到了一个落地的方向,那么可以想象,一种能够自动完成软件开发、数据分析、网页浏览等多类任务的Agent开发平台,将可预期地进一步为Agent的实现和应用插上更便捷的翅膀。在这种设计下,AI驱动的平台将开始像人类开发者一样,通过编写代码、使用命令行和浏览网络来与世界互动并完成相应任务。
说到这里,不知大家有没有注意到最近有个叫OpenDevin的项目,它正是基于这样的愿景而诞生的。目前OpenDevin平台已经在社区中收获了超过160名贡献者和1.3k贡献。关于它的细节,我们就在本篇由UIUC/CMU/Yale联合发布的技术报告中一探究竟吧。
论文标题:
OpenDevin: An Open Platform for AI Software Developers as Generalist Agents
论文链接:
https://arxiv.org/pdf/2407.16741
背景与动机
软件作为人类最强大的工具之一,极大地扩展了人类的能力,也使得熟练的程序员能够以复杂方式与世界互动。随着LLMs的快速发展,Agent的交互能力和对环境的影响力也得到了显著增强。这些Agent正在逐步实现如软件开发、网站浏览、家务执行乃至科学研究等复杂任务。
然而,随着Agent处理复杂问题的能力日益增强,它们的开发和评估也变得愈加具有挑战性。为了应对这一挑战,研究人员致力于创建开源框架以促进Agent的开发,这些框架通常包括Agent与世界交互的接口、Agent操作的环境以及人-Agent或Agent-Agent通信的交互机制。OpenDevin正是在这样的背景下应运而生,作为一个社区驱动的平台,它旨在开发能够通过软件接口与世界互动的通用和专业Agent。
OpenDevin框架
OpenDevin由3个主要组件组成:
(1)Agent抽象,社区可以将Agent的不同实现贡献到Agent中心;
(2)用于跟踪行动和观察历史的事件流;
(3)Agent运行时,将所有Agent操作执行到观察中
Agent定义与实现
Agent是能够感知环境状态(例如,先前的动作和观察结果),并在解决用户指定任务时产生执行动作的实体。在OpenDevin中,状态是一个封装了Agent执行所需的所有相关信息的数据结构。而状态的一个关键组成部分就是事件流,这是一个按时间顺序排列的过去动作和观察结果的集合,包括Agent自身的动作和用户交互(例如,指令、反馈)。当然,状态不仅包括事件流,它还整合了Agent操作的其他辅助信息,比如LLM调用的累积成本、跟踪多Agent委托的元数据以及与其他执行相关的参数。
OpenDevin用户界面(UI,D)允许用户查看文件,检查执行的bash命令/Python代码,观察Agent的浏览器活动,并直接与Agent交互。
OpenDevin通过一个简化的Agent抽象,允许用户轻松创建和定制用于各种任务的Agent。Agent抽象的核心在于step函数,该函数以当前状态为输入,并根据Agent的逻辑生成适当的动作。下图通过一个简化的示例代码展示了Agent抽象,这使用户可以专注于定义所需的Agent行为和逻辑上,而不必担心动作执行的底层细节。这种设计哲学简化了Agent的开发过程,而且提高了Agent的可定制性和灵活性,使得社区成员能够轻松地为各种任务贡献新的Agent实现。
Agent Runtime:动作的执行如何导致观察结果
Agent Runtime为Agent提供了一个配备与人类软件开发者相当动作空间的通用环境,从而使得OpenDevin Agent能够处理广泛的软件开发和基于网络的任务。具体来说,OpenDevin的每个任务会话都会启动一个安全隔离的Docker容器沙盒,Agent的所有bash命令都在这个沙盒中执行。平台通过SSH协议连接到沙盒,执行Agent的任意命令,并将执行结果作为观察结果返回给Agent。为了使Agent能够访问用户希望其操作的相关文件,会将一个可配置的工作空间目录挂载到沙盒中。
此外,Linux沙盒还支持运行交互式的Jupyter服务器,Agent可以使用它进行交互式Python代码执行和调试。OpenDevin实现了一个基于Playwright的Chromium浏览器,它使用BrowserGym定义的浏览器动作与Agent进行交互,例如导航、点击、输入、滚动等。执行这些动作后,浏览器提供了关于浏览器当前状态的丰富观察结果,包括HTML、DOM、可访问性树、屏幕截图、打开的标签页等。这些观察结果还可以通过可配置的属性进行增强,以允许Agent更好地理解网页观察结果,例如在屏幕截图上使用标记集合、可见元素标记、焦点元素标记、可交互元素标记、视窗内元素过滤等。
通过这种设计,OpenDevin提供了一个强大的Agent执行环境,并确保了动作执行的可靠性和观察结果的丰富性,从而为Agent提供了与人类开发者相似的交互和执行能力。这种环境的设计哲学使Agent能够以一种自然和直观的方式与软件和网络环境互动,进而提高了Agent完成任务的能力和效率。
AgentSkills:可扩展Agent计算机接口
OpenDevin构建了一个名为AgentSkills的库,这是一个旨在增强Agent能力的工具箱,提供了通过基本bash命令或Python代码不容易获得的实用功能。AgentSkills被设计为一个Python包,包含不同的实用函数(即工具),这些工具会自动导入到Jupyter IPython环境中。将Python函数定义为工具后的便利性降低了社区成员向技能库贡献新工具的门槛。Python包的通用性还允许不同的Agent可以通过核心动作IPythonRunCellAction轻松利用这些工具。通过这种方式,AgentSkills库极大地扩展了Agent的能力,使其能够更有效地处理各种任务。
AgentHub
AgentHub是一个社区贡献Agent的中心,它基于OpenDevin的Agent抽象概念,允许广泛用户选择不同的Agent实现,并作为不同Agent任务的基线。
- CodeAct Agent:OpenDevin中默认的通用Agent,基于CodeAct框架构建。它在每一步都能够进行自然语言交流,以向人类询问澄清或确认,或者通过执行代码来完成任务。CodeAct Agent的通用动作空间使其能够执行各种任务,包括编辑文件、浏览网页和运行程序等。
- Browsing Agent:为网页任务设计的通用网络Agent。该Agent与WebArena中的Agent类似,但通过零样本提示进行了改进。在每一步,Browsing Agent都会使用任务描述、浏览动作空间描述、浏览器的当前观察结果以及带有思维过程推理的动作预测示例来提示LLM。预期的LLM响应将包含思维过程推理和下一个动作预测。
- GPTSwarm Agent:采用了优化图来构建Agent系统,通过模块化统一了语言Agent框架。每个节点代表一个独特的操作,而边缘定义了协作和通信路径。这种设计允许自动优化节点和边缘,推动了多Agent系统的创建。
- Micro Agent(s):是OpenDevin专门针对特定任务支持创建的另一种Agent。Micro Agent复用了现有通用Agent(例如CodeAct Agent)的大部分实现,它旨在降低Agent开发的门槛,用户无需编程,只需提供Agent的名称、描述、输入和输出的模式,以及可选的专门提示(例如,展示如何执行特定任务的示例),即可创建Micro Agent。
通过AgentHub,OpenDevin为用户提供了一个丰富的Agent资源库,并鼓励和促进社区的协作和创新。社区成员可以贡献新的Agent实现,分享专业知识,并利用他人的工作来解决复杂的任务。这种开放和协作的方法有助于加速Agent技术的发展,并促进了Agent在各种实际应用中的使用。
评测
本文整合了15个已有的基准测试,覆盖了软件工程、网页浏览和杂项辅助等类别,以评估OpenDevin Agent的能力。这些基准测试包括但不限于SWE-Bench、WebArena、GAIA、GPQA、AgentBench、MINT、ProofWriter和Entity Deduction Arena等,每个基准测试都要求Agent具备特定的能力,如修复GitHub问题、浏览网页、使用工具、解决多步骤问题、进行逻辑推理等。下图展示了部分测评结果:
在软件工程领域,OpenDevin的CodeActAgent v1.8展示了与其他开源Agent相比更具竞争力的表现,尤其是在SWE-Bench Lite、HumanEvalFix、ML-Bench和BioCoder等基准测试中。CodeActAgent v1.8在不使用提示文本的情况下,成功解决了一定比例的实际GitHub问题,并在多次尝试中自我调试修复了错误。
在网页浏览方面,OpenDevin的BrowsingAgent在WebArena和MiniWoB++等基准测试中表现出色,能够完成多项任务,尽管在某些需要专门训练或增强学习的任务上,性能可能不如专门针对这些环境训练的Agent。
杂项辅助任务的评估结果显示,OpenDevin Agent在GAIA、GPQA、AgentBench、MINT、ProofWriter和Entity Deduction Arena等基准测试中均取得了卓越的成绩。特别是在GPQA基准测试中,OpenDevin Agent通过集成多种工具和网络搜索能力,显著提高了解决复杂多步骤问题的能力。
整体而言,OpenDevin Agent在多个基准测试中的表现证明了其通用性,即使在没有针对特定任务进行优化的情况下也能取得良好的成绩。这些评估结果展示了OpenDevin Agent的能力,也为未来的研究和应用提供了有价值的参考。
结论与展望
作为一个社区驱动的平台,OpenDevin为顺利开发和应用Agent提供了一个强大的工具和框架。通过提供灵活的交互机制、安全的沙盒环境、多Agent协作能力以及综合的评估框架,OpenDevin或将有效加速Agent系统的研究创新,并推动各类Agent在现实世界中的应用。
尽管在某些任务类别中并未达到顶尖性能,但OpenDevin设计的通用性使得同一Agent能够在软件开发、网页交互和多样化任务中展现出竞争力。这一点与传统的为特定任务类别设计和优化的基线Agent形成鲜明对比。此外,OpenDevin的AgentHub汇集了社区贡献的多样化Agent实现,为不同任务提供了丰富的选择和基准。
当然,正如本文作者所提到的那样,一方面,OpenDevin在开发安全、可靠性以及多模态支持方面都存在一定挑战,还有待更进一步的研究和改进。另一方面,作为一个活跃的社区项目,OpenDevin的发展和完善需要更多来自学术界和工业界的合作与贡献。我们也期待OpenDevin能够通过增强多模态支持、构建更强大的Agent、改进网页浏览能力、提高运行的稳定性以及实现自动工作流生成等方式实现持续进化。