微软发布 AutoDev AI 程序员,自主完成软件工程任务性能提升 30%
全球首个 AI 程序员 Devin 的横空出世,可能成为软件和 AI 发展史上一个重要的节点。它掌握了全栈的技能,不仅可以写代码 debug、训练模型,还可以去美国最大求职网站 Upwork 上抢单。
一时间,网友们惊呼「程序员不存在了」?甚至连刚开始攻读计算机学位的人也恐慌,「10 倍 AI 工程师」对未来的工作影响。
除了 Cognition AI 这种明星初创公司,美国的各个大厂也早就在想办法用 AI 智能体降本增效了。就在 3 月 14 日同一天,微软团队也发布了一个「微软 AI 程序员」——AutoDev。
论文地址:https://arxiv.org/pdf/2403.08299.pdf
与 Devin 这种极致追求效率和产出结果的方向有所不同。AutoDev 专为自主规划、执行复杂的软件工程任务而设计,还能维护 Docker 环境中的隐私和安全。
在此之前,微软已有主打产品 GitHub Copilot,帮助开发人员完成软件开发。然而,包括 GitHub Copilot 在内的一些 AI 工具,并没有充分利用 IDE 中所有的潜在功能,比如构建、测试、执行代码、git 操作等。基于聊天界面的要求,它们主要侧重于建议代码片段,以及文件操作。
AutoDev 的诞生,就是为了填补这一空白。
用户可以定义复杂的软件工程目标,AutoDev 会将这些目标分配给自主 AI 智能体来实现。然后,这些 AI 智能体可以对代码库执行各种操作,包括文件编辑、检索、构建过程、执行、测试和 git 操作。甚至,它们还能访问文件、编译器输出、构建和测试日志、静态分析工具等。
在 HumanEval 测试中,AutoDev 分别在代码生成和测试生成方面,分别取得了 91.5% 和 87.8% Pass@1 的优秀结果。网友表示,AI 编码发展太快了,2021 年 GitHub Copilot 能解决 28.8% 的 HumanEval 问题,到了 2024 年,AutoDev 直接解决了 91.5% 的问题。
不用人类插手,AutoDev 自主完成任务
AutoDev 工作流程如下:用户定义一个目标,比如「测试特定方法」。AI 智能体将测试写入一个新文件,并启动测试执行命令,以上都在安全的评估环境中进行。然后,测试执行的输出(包括失败日志)将合并到对话中。AI 智能体分析这些输出,触发检索命令,通过编辑文件合并检索到的信息,然后重新启动测试执行。最后,Eval 环境提供有关测试执行是否成功,以及用户目标完成情况的反馈。
整个过程由 AutoDev 自主协调,除了设定初始目标之外,无需要开发人员干预。相比之下,如果现有的 AI 编码助手集成到 IDE 中,开发人员必须手动执行测试(比如运行 pytest)、向 AI 聊天界面提供失败日志、可能需要识别要合并的其他上下文信息,并重复验证操作确保 AI 生成修改后的代码后测试成功。
值得一提的是,AutoDev 从以前许多在 AI 智能体领域的研究中汲取了灵感,比如 AutoGen——编排语言模型工作流并推进多个智能体之间的对话。AutoDev 的能力超越了对话管理,使智能体能够直接与代码存储库交互,自动执行命令和操作,从而扩展了 AutoGen。同样,AutoDev 的研究也借鉴了 Auto-GPT。这是一种用于自主任务执行的开源 AI 智能体,通过提供代码和 IDE 特定功能来支持执行复杂的软件工程任务。
AutoDev 架构
上图是 AutoDev 架构的简单示意图。AutoDev 主要由 4 个功能模块组成:
- 用于跟踪和管理用户与代理对话的对话管理器(Conversation Manager);
- 为代理提供各种代码和集成开发环境相关工具的工具库(Tools library);
- 用于调度各种代理的代理调度器(Agents Scheduler);
- 以及用于执行操作的评估环境(Evaluation Environment)。
规则、行动和目标配置
用户通过 yaml 文件配置规则和操作来启动流程。这些文件定义了 AI 代理可以执行的可用命令(操作)。用户可以通过启用/禁用特定命令来利用默认设置或细粒度权限,从而根据自己的特定需求量身定制 AutoDev。配置步骤目的是实现对 AI 代理能力的精确控制。
在这一阶段,用户可以定义人工智能代理的数量和行为,分配特定的责任、权限和可用操作。例如,用户可以定义一个「开发者」代理和一个「审核者」代理,让它们协同工作以实现目标。根据规则和操作配置,用户可以指定 AutoDev 要完成的软件工程任务或流程。例如,用户可以要求生成测试用例,并确保其语法正确、不包含错误(这涉及编辑文件、运行测试套件、执行语法检查和错误查找工具)。
对话管理器(Conversation Manager)
会话管理器负责初始化会话历史,在对正在进行的会话进行高级管理方面发挥着关键作用。它负责决定何时中断对话进程,并确保用户、人工智能代理和整个系统之间的无缝交流。它维护和管理的对话对象,主要包括来自代理的信息和来自评估环境(eval environment)的操作结果。


