微软AI 程序员AutoDev,自主执行工程任务生成代码

全球首个 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之家

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/777231.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

银河麒麟 v10 sp2 aarch64架构制作openssh 9.7p1 rpm包(显示openssl版本信息)—— 筑梦之路

【国产化适配】银河麒麟v10 sp2 aarch64 制作openssh 9.6p1 rpm——筑梦之路_openssh 9.6ky10-CSDN博客 之前做过openssh 9.6 p1 rpm包,使用的是官方的spec文件,没有修改过,不过最新版9.7已经默认不使用openssl,因此制作出来的rp…

详解 WebWorker 的概念、使用场景、示例

前言 提到 WebWorker,可能有些小伙伴比较陌生,不知道是做什么的,甚至不知道使用场景,今天这篇文章就带大家一起简单了解一下什么是 webworker! 概念 WebWorker 实际上是运行在浏览器后台的一个单独的线程,因此可以执行一些耗时的操作而不会阻塞主线程。WebWorker 通过…

智慧光伏:企业无纸化办公

随着科技的快速发展,光伏技术不仅成为推动绿色能源革命的重要力量,更在企业办公环境中扮演起引领无纸化办公的重要角色。智慧光伏不仅为企业提供了清洁、可持续的能源,更通过智能化的管理方式,推动企业向无纸化办公转型&#xff0…

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月 后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月    后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? There is no nutrition in the bl…

Linux小程序: 手写自己的shell

注意&#xff1a; 本文章只是为了理解shell内部的工作原理&#xff0c; 所以并没有完成shell的所有工作&#xff0c; 只是完成了shell里的一小部分工作 #include <stdio.h> #include <unistd.h> #include <string.h> #include <stdlib.h> #include &l…

滑动窗口_水果成篮_C++

题目&#xff1a; 题目解析&#xff1a; fruits[i]表示第i棵树&#xff0c;这个fruits[i]所表示的数字是果树的种类例如示例1中的[1,2,1]&#xff0c;表示第一棵树 的种类是 1&#xff0c;第二个树的种类是2 第三个树的种类是1随后每一个篮子只能装一种类型的水果&#xff0c;我…

SQL Server事务复制操作出现的错误 进程无法在“xxx”上执行sp_replcmds

SQL Server事务复制操作出现的错误 进程无法在“xxx”上执行“sp_replcmds” 无法作为数据库主体执行&#xff0c;因为主体 "dbo" 不存在、无法模拟这种类型的主体&#xff0c;或您没有所需的权限

术语技巧:如何格式化网页中的术语

术语是语言服务中的核心语言资产。快速处理英汉对照的术语是我们在翻译技术学习过程中需要掌握的必备技能。 通常&#xff0c;我们需要把在权威网站上收集到的术语放到word当中&#xff0c;调整正左右对齐的样式&#xff0c;便于打印学习或者转化为Excel表。 如何快速实现这一…

加密流量分类torch实践5:TrafficClassificationPandemonium项目更新3

加密流量分类torch实践5&#xff1a;TrafficClassificationPandemonium项目更新3 更新日志 代码已经推送开源至露露云的github&#xff0c;如果能帮助你&#xff0c;就给鼠鼠点一个star吧&#xff01;&#xff01;&#xff01; 我的CSDN博客 我的Github Page博客 3/23日更新…

设计模式学习笔记 - 设计模式与范式 -结构型:7.享元模式(上):享元模式原理和应用

概述 在《设计模式与范式 -结构型&#xff1a;6.组合模式》&#xff0c;讲了组合模式。组合模式并不常用&#xff0c;主要用在数据能表示成树形结构、能通过遍历算法来解决问题的场景中。本章再学习一个不那么常用的模式&#xff0c;享元模式&#xff08;Flyweight Design Pat…

iOS - Runtime-API

文章目录 iOS - Runtime-API1. Runtime应用1.1 字典转模型1.2 替换方法实现1.3 利用关联对象给分类添加属性1.4 利用消息转发机制&#xff0c;解决方法找不到的异常问题 2. Runtime-API2.1 Runtime API01 – 类2.1.1 动态创建一个类&#xff08;参数&#xff1a;父类&#xff0…

【Pt】马灯贴图绘制过程 02-制作锈迹

目录 一、边缘磨损效果 二、刮痕效果 三、边缘磨损与刮痕的混合 四、锈迹效果 本篇效果&#xff1a; 一、边缘磨损效果 将智能材质“Iron Forge Old” 拖入图层 打开“Iron Forge Old” 文件夹&#xff0c;选中“Sharpen”&#xff08;锐化&#xff09;&#xff0c;增大“…

2010-2021年银行网点及员工信息数据

2010-2021年银行网点及员工信息数据 1、时间&#xff1a;2010-2021年 2、来源&#xff1a;整理自csmar 3、指标&#xff1a;银行代码、股票代码、银行中文简称、统计截止日期、分行数量、机构网点数量、其中&#xff1a;境内网点数量、其中&#xff1a;境外网点数量、在职员…

Linux集群

目录 一、什么是集群&#xff1f; 二、 搭建(tomcatnginxkeepalived)集群 一、JDK安装 二、Tomcat安装 三、Nginx 3.1、什么是Nginx&#xff1f; 3.2、下载Nginx 3.3、安装 四、搭建NginxTomcat的实现集群 配置nginx.comf文件 五&#xff1a;Nginx搭建图片服务器 …

组件上使用 v-for

我们可以直接在组件上使用 v-for&#xff0c;和在一般的元素上使用没有区别 (别忘记提供一个 key)&#xff1a; <MyComponent v-for"item in items" :key"item.id" /> 但是&#xff0c;这不会自动将任何数据传递给组件&#xff0c;因为组件有自己独…

openGauss CM

CM 可获得性 本特性自openGauss 3.0.0版本开始引入。 特性简介 CM&#xff08;Cluster Manager&#xff09;是一款数据库管理软件&#xff0c;由cm_server和cm_agent组成。 cm_agent是部署在数据库每个主机上&#xff0c;用来启停和监控各个数据库实例进程的数据库管理组件…

【Java程序设计】【C00392】基于(JavaWeb)Springboot的校园生活服务平台(有论文)

基于&#xff08;JavaWeb&#xff09;Springboot的校园生活服务平台&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过…

C#面:程序集的主版本号和次版本号

C# 程序集的版本号和次版本号是程序集的一部分&#xff0c;用于标识程序集的不同版本。版本号通常由四个部分组成&#xff1a;主版本号、次版本号、生成号和修订号。其中&#xff0c;主版本号和次版本号是最常用的两个部分。 主版本号&#xff08;Major Version&#xff09;&a…

VUE 实现文件夹上传(保留目录结构)

代码&#xff1a;https://gitee.com/xproer/up6-vue-cli 1.引入up6组件 2.配置接口地址 接口地址分别对应&#xff1a;文件初始化&#xff0c;文件数据上传&#xff0c;文件进度&#xff0c;文件上传完毕&#xff0c;文件删除&#xff0c;文件夹初始化&#xff0c;文件夹删除&…

2024年做视频号小店是不是明智之举?这篇文章告诉你答案

大家好&#xff0c;我是电商糖果 视频号自从去年电商的知名度打开之后&#xff0c;不少朋友都盯上这块肥肉。 要知道现在可是短视频电商的时代&#xff0c;抖音&#xff0c;快手靠做电商赚了不少钱。 视频号又怎么会放过这次的风口呢&#xff1f; 也有不少想做电商的朋友问…