微软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,一经查实,立即删除!

相关文章

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

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

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

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

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

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

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

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

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

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

iOS - Runtime-API

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

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

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

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

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

Linux集群

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

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

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

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

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

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

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

灯哥驱动器端口讲解----foc电机驱动必看

CS:是电流采样的引脚,三项采样电流,现在只给了两路,另外一路算出来就行了 in:三项电流输入,驱动电机使用。 en:没有用 SDA,SCL:I2C的引脚用来读取编码器的计数值 tx,rx:引出来了一路串口,没有用…

西安 专业nft开发NFT寄售-NFT抢购-NFT盲盒-NFT空投

在数字化时代的今天,非同质化代币(NFT)正成为数字资产领域的新宠。作为区块链技术的一种应用,NFT 赋予数字资产独一无二的身份和价值,从而在艺术、游戏、音乐、收藏品等领域掀起了一股热潮。西安,这座千年古…

LeetCode-热题100:42. 接雨水

题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入: height [0,1,0,2,1,0,1,3,2,1,2,1] 输出: 6 解释: 上面是由数组 [0,1,0,2,1,…

2024社工考试报名详细流程来啦✅

2024社工考试报名详细流程来啦✅ ⏰社工报名时间:4月1日-4月18日 👇🏻2024年社工报名流程 1、打开人事考试网,点击左侧【网上报名】 2、没有用户名的点击新用户注册,有用户名的直接输入用户名密码登录即可。 3、注册好…

24计算机考研调剂 | 【官方】北京科技大学

北京科技大学 考研调剂招生信息 招生专业: 085404(计算机技术) 081200(计算机科学与技术) 调剂要求:(调剂基本分数) 我中心将在教育部“全国硕士生招生调剂服务系统”&#xff08…

It takes two (搜索)

本题链接:登录—专业IT笔试面试备考平台_牛客网 题目: 样例: 输入 3 4 AAAO AAAA AAAA 输出 NO 思路: 根据题目意思,如果存在的 A 联通不可以成为 矩形,输出 NO,否则输出 YES 这道题看数据范…

网络套接字补充——UDP网络编程

五、UDP网络编程 ​ 1.对于服务器使用智能指针维护生命周期;2.创建UDP套接字;3.绑定端口号,包括设置服务器端口号和IP地址,端口号一般是2字节使用uint16_t,而IP地址用户习惯使用点分十进制格式所以传入的是string类型…

中国国际通信大会2024|中国通信展览会|通信展览会

中国国际通信大会2024|中国通信展览会|通信展览会 中国国际信息通信展览会(ICT展)是亚太地区最具影响力的信息通信技术盛会之一。每年一度的ICT展汇聚了来自全球各行各业的专业人士,为各领域的科技公司、创新企业以及技术爱好者们提供一个难得…