全球首个 AI 程序员 Devin 的横空出世,可能成为软件和 AI 发展史上一个重要的节点。它掌握了全栈的技能,不仅可以写代码 debug,训模型,还可以去美国最大求职网站 Upwork 上抢单。 Devin 诞生之后,让码农纷纷恐慌。最近,微软同时也整出了一个 AI 程序员 ——AutoDev,能够自主生成、执行代码等任务。
与 Devin 这种极致追求效率和产出结果的方向有所不同。AutoDev 专为自主规划、执行复杂的软件工程任务而设计,还能维护 Docker 环境中的隐私和安全。
在此之前,微软已有主打产品 GitHub Copilot,帮助开发人员完成软件开发。
然而,包括 GitHub Copilot 在内的一些 AI 工具,并没有充分利用 IDE 中所有的潜在功能,比如构建、测试、执行代码、git 操作等。
基于聊天界面的要求,它们主要侧重于建议代码片段,以及文件操作。AutoDev 的诞生,就是为了填补这一空白。
论文地址:AutoDev: Automated AI-Driven Development
用户可以定义复杂的软件工程目标,AutoDev 会将这些目标分配给自主 AI 智能体来实现。
然后,这些 AI 智能体可以对代码库执行各种操作,包括文件编辑、检索、构建过程、执行、测试和 git 操作。
甚至,它们还能访问文件、编译器输出、构建和测试日志、静态分析工具等。
AutoDev 从以前许多在 AI 智能体领域的研究中汲取了灵感,比如 AutoGen—— 编排语言模型工作流并推进多个智能体之间的对话。
AutoDev 的能力超越了对话管理,使智能体能够直接与代码存储库交互,自动执行命令和操作,从而扩展了 AutoGen。
同样,AutoDev 的研究也借鉴了 Auto-GPT。这是一种用于自主任务执行的开源 AI 智能体,通过提供代码和 IDE 特定功能来支持执行复杂的软件工程任务。
下面,我们将介绍AutoDev的设计理念、实证评估结果。
一、引言
在传统的软件开发过程中,开发者需要手动执行测试、调试代码、提交代码等一系列繁琐的工作。随着人工智能技术的发展,诸如GitHub Copilot这样的AI编程助手应运而生,为开发者提供代码建议和自动化辅助。然而,现有的AI编程助手仍存在功能有限、缺乏上下文感知等局限。为了填补这一空白,一群来自微软的研究者提出了AutoDev框架。
AutoDev框架让AI代理能够自主地与代码仓库进行交互,执行诸如文件编辑、构建、测试等复杂任务。通过这种方式,开发者可以将更多精力投入到更高层次的规划和设计,而让AI代理负责执行具体的开发任务。这将大大提高开发效率,开启AI自主开发的新时代。
二、AutoDev设计
AutoDev框架的设计主要包括以下几个部分:
2.1. 配置规则、动作和目标(Rules, Actions, and Objective Configuration):
用户首先通过yaml文件配置规则和动作,定义AI代理可执行的操作,包括启用或禁用特定命令,以精确控制AI代理的功能。在此阶段,用户还可以定义AI代理的数量、行为和责任,分配特定的权限和动作。例如,用户可以定义一个"开发者"代理和一个"审核者"代理,让他们协作完成目标。
2.2. 对话管理器(Conversation Manager):
对话管理器负责初始化对话历史,管理用户与AI代理之间的对话,包括解析代理的响应,调用工具库中的动作,处理评估环境的输出,并确定何时结束对话。对话管理器包括解析器、输出组织和对话结束模块。
2.3. 代理调度器( Agent Scheduler):
代理调度器负责调度AI代理协作完成用户定义的目标。代理被配置为具有特定人格和可用命令集,通过协作执行各种任务。调度器使用不同的协作算法,如轮询、基于令牌或基于优先级,来决定代理的执行顺序。代理调度器会调用一个特定的代理,传递当前的对话。
2.4. 工具库( Tools Library ):
提供各种代码和IDE相关的工具,如文件编辑、检索、构建、执行和测试等。工具库封装了底层命令的复杂性,为代理提供了简单易用的接口。具体包括:
- 文件编辑(File Editing):包括用于编辑代码、配置和文档的命令。具体命令有write、edit、insert和delete等。代理可以使用这些命令执行写入整个文件或修改文件中的特定行等操作。
- 检索(Retrieval):提供基本CLI工具(如grep、find、ls)和基于嵌入的技术。嵌入技术使代理能够检索代码库中类似的代码片段。检索命令retrieve允许代理执行基于嵌入的检索。
- 构建与执行(Build & Execution):包括编译、构建和执行代码库的命令。命令如build、run 等。抽象了底层构建命令的复杂性,简化了代理的执行过程。
- 测试与验证(Testing & Validation):提供执行单个测试用例、特定测试文件或整个测试套件的命令。代理可以执行这些操作,而无需依赖特定测试框架的低级命令。还包括验证工具,如linters和bug检测工具。
- Git:允许配置Git操作的细粒度权限,如提交、推送和合并。例如,代理可以被授予仅本地提交的权限,或者如果需要,可以推送更改到源仓库。
- 通信(Communication):提供一组旨在促进代理之间或代理与用户之间沟通的命令。命令如talk、ask和stop。talk命令允许发送自然语言消息,ask命令用于请求用户反馈,stop命令用于中断流程。
2.5. 评估环境(Evaluation Environment):
评估环境在Docker容器中运行,允许安全地执行代理发起的文件编辑、检索、构建、执行和测试命令,并将结果返回给对话管理器。它抽象了底层命令的复杂性,为代理提供了一个简化的接口。
三、实证评估(Empirical Design & Empirical Results)
为了验证AutoDev框架的效果,论文作者在HumanEval数据集上进行了实证评估。HumanEval是一个包含164个Python编程问题的数据集,每个问题都包括函数签名、文档字符串、函数体和单元测试。
1. RQ1:AutoDev在代码生成任务中的有效性
论文作者在HumanEval数据集上评估了AutoDev在代码生成任务中的性能。结果显示,AutoDev Pass@1达到91.5%,位列HumanEval排行榜第二,而且不需要额外训练数据。这表明AutoDev能够显著提高LLM在完成软件工程任务中的性能。
2. RQ2:AutoDev在测试生成任务中的有效性
论文作者还修改了HumanEval数据集,以评估AutoDev在测试生成任务中的表现。结果显示,AutoDev Pass@1达到87.8%,相较于基线GPT-4提高了17%。而且,AutoDev生成的测试用例覆盖率达到了99.3%,与人类编写的测试用例覆盖率相当。
3. RQ3:AutoDev完成任务的高效性
论文作者还分析了AutoDev完成任务所需的步骤数量、命令分布和token数量。结果表明,虽然AutoDev使用了更多步骤和token,但完成了测试和验证等额外任务。这也意味着AutoDev可以替代开发者执行一些常规的验证工作。
四、讨论
4.1 应用AutoDev(AutoDev in Action)
AutoDev在实际操作中展示了其生成测试用例的能力,包括根据问题描述编写测试文件,执行测试,分析测试结果,发现错误,并修改测试代码以修正错误。这展示了AutoDev自我评估生成代码和解决自身输出中错误的能力,同时也展示了AutoDev如何让代理在任务中进行交流,提供解释和洞察力。
4.2 多代理协作(Multi-Agent Collaboration)
AutoDev支持多代理协作完成任务,由代理调度器进行协调。在评估中,由于HumanEval数据集相对简单,作者只使用了一个GPT-4代理。然而,初步结果显示,在更复杂的任务中,多代理协作可以显著提高AutoDev的性能。例如,开发代理和审核代理在修复复杂bug时的合作显示出有趣的交互作用。:AutoDev支持多代理协作完成任务,例如开发代理和审核代理。这种协作方式可以显著提高处理复杂任务的效果。
4.3. 人的作用(Human in the Loop)
AutoDev允许代理使用talk和ask命令与用户交流任务进展或请求用户反馈。这些命令在开发人员使用AutoDev时提供了帮助,使他们能够了解代理的意图并获得洞察力。ask命令的添加直接回应了开发人员的需求,他们希望在代理对下一步行动不确定时提供反馈。AutoDev允许代理与用户进行沟通,请求用户反馈。这种设计可以让用户更好地理解代理的意图,并在必要时提供指导。
4.4. AutoDev集成(AutoDev Integrations)
在试点研究中,开发人员使用AutoDev作为一个CLI命令工具,并在VSCode IDE中观察对话。未来的目标是将AutoDev集成到IDE中,创建一个聊天机器人进行测试,并将其集成到CI/CD流程和PR审查平台中。作者设想开发人员将任务和问题分配给AutoDev,在PR系统中审查结果,并进一步简化软件开发工作流程。
五、相关工作
AutoDev框架借鉴了先前在自主AI代理领域的工作,如AutoGen和Auto-GPT。同时,它还受到语言模型在软件工程领域应用的影响,如CodeXGLUE和HumanEval数据集。
六、结论
AutoDev框架通过让AI代理自主地与代码仓库交互,执行复杂的软件工程任务,从而显著提高了开发效率。开发者可以从繁琐的验证工作中解放出来,将更多精力投入到更高层次的规划和设计。实证评估结果也表明,AutoDev在代码生成和测试生成任务中表现良好。展望未来,AutoDev有望成为开发者的重要助手,推动软件开发进入一个全新的时代。
在这个快速发展的时代,AutoDev的出现无疑为软件开发领域带来了新的活力。它不仅可以帮助开发者提高工作效率,还可以让他们将更多精力投入到创新和优化上。随着AutoDev的不断完善和扩展,我们有理由相信,它将在未来的软件开发中发挥更大的作用。BUT,没有看到代码链接,希望作者能尽快开源代码,让大家可以进行验证。“Show Me The Code!!!”
微软 AI 程序员 AutoDev 登场:996 自主生成代码,性能超 GPT-4 30% - IT之家