OpenDevin自动化代码生成工具评述

发布于 2024-5-31 16:23
浏览
0收藏

1.概念

    OpenDevin整个系统分为前端和后端两个主要部分。前端负责处理用户交互和显示结果,而后端负责处理业务逻辑和执行 AI Agent。在计算机科学和人工智能领域,"智能体"(Agent)一词通常用来指代那些在特定环境中展示出自治性、反应性、社交性、主动性、推理性以及认知性等智能特性的软件或硬件实体。AI智能体是一个具备复杂推理、记忆和任务执行能力的高级系统。

2.OpenDevin核心组件

AgentHub

    OpenDevin是一个集成了多种智能体(Agent)实现的平台,包括monologue_agent、codeact_agent、planner_agent、SWE_agent、delegator_agent和dummy_agent等。用户可以根据自己的需求,自由选择使用其中任何一个智能体。每个智能体都被设计成一个循环流程,通过调用agent.step()方法,在每次迭代中接收当前状态(State)作为输入,并输出相应的动作(Actions)来执行操作或命令。执行动作后,智能体可能会接收到一些观察(Observations)结果。在实现智能体的过程中,每个智能体类都需要实现step和search_memory这两个方法。step方法用于执行指令,而search_memory方法则用于从智能体的记忆中查询信息。此外,OpenDevin还提供了一些辅助方法,如reset(重置智能体状态)、register(注册智能体)、get_cls(获取智能体类)、list_agents(列出所有智能体)等,这些方法可以帮助用户更好地管理和维护智能体的状态以及注册信息。

状态 (State)

状态对象是智能体执行任务时所依赖的重要信息的集合体。它主要包括以下三个方面的内容:

  1. 智能体采取的动作的历史记录以及这些动作产生的观察结果。这些观察结果可能包括文件的内容、命令的输出等信息。
  2. 自智能体执行最近一步动作以来,所发生的一系列动作和观察结果的轨迹。这些信息有助于智能体追踪和分析任务的执行过程。
  3. 一个计划(plan)对象,它包含了智能体的主要目标。智能体可以通过AddTaskAction和ModifyTaskAction这两个操作来添加和修改子任务,从而更好地实现其主要目标。

动作 (Actions)

Agent 有一系列可以执行的动作列表,其中一些包括:

  • CmdRunAction:在沙盒化的终端中运行命令。
  • FileReadAction:读取文件内容。
  • ModifyTaskAction:更改子任务的状态。
  • AgentThinkAction:允许 Agent 添加纯文本到历史记录中的无操作。
  • AgentFinishAction:停止控制循环,允许用户输入新任务。

观察 (Observations)

Agent 在执行动作后可能接收到的观察结果列表如下:

  • CmdOutputObservation:命令执行输出。
  • BrowserOutputObservation:浏览 URL 后的输出。
  • FileReadObservation:文件读取操作的输出。
  • AgentRecallObservation:Agent 回忆操作的输出。
  • AgentErrorObservation:Agent 执行操作时发生错误的输出。

前后端布局如下:

OpenDevin自动化代码生成工具评述-AI.x社区

OpenDevin自动化代码生成工具评述-AI.x社区

3.OpenDevin的能力

OpenDevin支持多种Agent智能体的选择。以CodeActAgent为例,它是一个开源的语言模型(LLM),它具有对文本操作进行显式优化的能力。它使用可执行的Python代码来将LLM代理的动作统一到一个统一的操作空间中,称为CodeAct。借助Python解释器,CodeAct可以执行代码操作,并通过多轮交互动态修改之前的操作或根据新的观察发出新的操作。CodeActAgent框架可以根据现有的若干Action-Observation对的轨迹预测下一步需要执行什么Action,遵循业界流行的ReAct反思框架。ReAct的提示模版一般包含这些内容的多次重复:

Thought: ...
Action: ...
Observation: ...
... (Repeat many times)

CodeAct的思想是: 由LLM生成的代码和用户发起的消息构成Action,在环境中运行代码就视为执行了这个 Action,扩大了 Agent 的 action space,用更少的交互次数完成更多的任务。在CodeAct的架构中,Agent接收来自User和Environment的消息,互相之间进行消息通信。同时使用CoT(Chain of Thoughts)思维树将任务进行切分,直接将执行结果转为自然语言总结。Agent会向 Environment 发出 Action,生成代码并执行;向 User 发送 Action 的生成自然语言回复。User会向Agent发送自然语言的请求或者反馈,同时接收 Agent 的 Action 的生成自然语言回复。而Environment会向 Agent 发送 Action 的执行结果,因为他可以通过bash 命令行或 Python 解释器执行 Action 生成的代码。以下是CodeAct框架的原理图:

OpenDevin自动化代码生成工具评述-AI.x社区

OpenDevin自动化代码生成工具评述-AI.x社区

 SWE-Agent是另一种有效的代码生成智能体。它不仅支持简单的代码生成任务,还支持软件维护(例如错误修复)和软件演化(如功能添加)等更为复杂的程序改进任务。其精心定制的 ACI(Agent-Computer Interface) 极大地增强了 Agent 创建和编辑代码文件、浏览完整代码库以及执行程序的能力。SWE-agent的核心功能包括:搜索与导航、文件查看器、文件编辑器以及上下文管理。

 SWE-agent 通过搜索与导航,能够简洁地列出所有包含搜索字符串的文件名,减少混淆。导航代码库需要找到适合当前任务的文件和内容。常见策略是查找可能有用的术语,如问题中提到的文件、函数或类定义。SWE-agent 引入了特殊命令 find file、search file 和 search dir,当搜索文件名或文件/目录中的字符串时,这些命令会输出搜索结果的摘要

 当搜索到想查看的文件后,可以通过调用 open 命令打开路径来使用交互式文件查看器。文件查看器一次最多显示文件的 100 行窗口,Agent 可以使用 scroll down 和 scroll up 命令移动窗口,也可以使用 goto 命令跳至特定行。为了方便文件内导航和代码定位,SWE-agent 显示打开文件的完整路径、文件的总行数、当前窗口前后的省略行数以及每行的行号(在可见行前添加)。

OpenDevin自动化代码生成工具评述-AI.x社区

  在进行文件编辑的阶段,SWE-agent不仅支持基本的文件浏览,还提供了高效的滚动和搜索功能。限制每次显示的代码行数为 100 行,旨在提高浏览效率且减少信息过载。

OpenDevin自动化代码生成工具评述-AI.x社区

为了保持 Agent 上下文的简洁性和充分性,SWE-agent 构建了一系列详细且复杂的提示词模板。在每个步骤中都会接收到关于正确使用 bash 和 ACI 命令的指令、文档和演示。若执行代码错误,SWE-agent 会要求重试,直到收到正确生成的响应。一旦收到有效响应,过去的错误信息将被省略,仅保留最初的。又或者,当命令执行成功但无输出时,系统会提供明确的反馈,增强交互明确性。

SWE-agent的工作流程如下图,整体上仍然使用了ReAct框架,通过反复采取行动和获得反馈来与环境进行工作。

OpenDevin自动化代码生成工具评述-AI.x社区

在初始化阶段,agent会创建一个实例,提供模拟的开发环境,并且将整个交互过程中所有的轨迹存储到特定的工作目录中。同时,每个实例都会被审查,以确定是否有任何实例不符合条件应该被跳过。对选定的实例进行环境重置,将其恢复到该实例的初始状态,并获取初始信息。

执行阶段,首先为 Agent 配置适当的参数并初始化其内部模型,以准备迎接下游任务。在一个交互循环中,Agent首先会根据当前的文件状态state和观察结果observation,生成对应的思考thought和行动action。在这个过程中,实例会根据 Agent 提出的行动执行相应的命令,结果将被更新到观察结果中。每次交互后, Agent 的行动、观察结果和响应的行为轨迹都会被保存。当 Agent 的行动中包含“submit”命令时,意味着问题已解决,同时保存补丁patch并标记该问题为已完成done = True,交互循环随之结束。

    保存阶段,Agent 在整个交互过程中生成的预测结果以及行动轨迹都会被记录。

3.OpenDevin的体验

    OpenDevin可以在Windows、Linux等操作系统进行部署,同时提供前端UI页面。详细的前后端部署流程请见 OpenDevin。使用Ollama部署大语言模型,并在如下的初始化页面中选择已经部署好的各项服务。

    用户可以根据自己的偏好和需求,选择不同的智能体Agent。不同Agent可以执行的任务以及流程会有些不同。以下是分别使用SWE-agent和CoderAgent对同一个问题进行回答的结果,两者都使用codeqwen1.5-7B作为基座模型。可以看到SWE-agent将用户输入的任务拆解成编写代码、分不同语言实现以及写入3个主要步骤,能完成一系列的任务而非只是对话问答。

OpenDevin自动化代码生成工具评述-AI.x社区

OpenDevin自动化代码生成工具评述-AI.x社区

使用SWE-agent作为agent,配合GPT4对问题的理解和生成文本能力,可以让大语言模型完成项目级代码的生成。下图显示了通过指令让OpenDevin访问github代码库,复制到本地并新建分支,完成文件的修改并且push到远程的一系列流程,大语言模型先后完成了任务拆解,规划执行并且调用各项工具的工作流程,展示了其能够进行自主生成代码并提交的能力。

OpenDevin自动化代码生成工具评述-AI.x社区

OpenDevin自动化代码生成工具评述-AI.x社区

OpenDevin自动化代码生成工具评述-AI.x社区

参考文献

1. Devin: https://www.cognition-labs.com/introducing-devin

2. SWE-agent: https://github.com/princeton-nlp/SWE-agent

3. CodeAct-agent: [2402.01030] Executable Code Actions Elicit Better LLM Agents (arxiv.org)

4. OpenDevin/SWE-bench: Enhanced fork of SWE-bench, tailored for OpenDevin's ecosystem. (github.com)

5. Qwen/Qwen1.5-14B-Chat · Hugging Face

6. 2404.10225 (arxiv.org)

7. 2405.15793 (arxiv.org)

本文转载自​​ AI遇见云​​,作者:魏至强

收藏
回复
举报
回复
相关推荐