ChatGPT 人工智能 GPT4 伦理 生成式 医疗 监管 安全 机器学习 深度学习 神经网络 计算机视觉 强化学习 模型 算法 应用 开发 研究 工具 平台 框架 数据集 训练 部署 安全 合规 培训 投资 LLM,llm AI,ai,Ai 大模型 大语言模型 制图 生图 绘图 文生图 文生视频 生成式AI AGI 世界模型 sora chatGPT,chatgpt,ChatGpt claude openai Llama deepseek midjourney 红熊猫模型 Red panda,panda Stable Diffusion,StableDiffusion,stable DALL- E 3 DALL E DALL Flux,flux 扩散模型 混元大模型 文心一言 通义千问 可灵 Pika PixelDance 豆包 月之暗面 零一万物 阶跃星辰 搜索增强 MiniMax Talkie Agent prompt fastai LangChain TTS 微调 提示词 知识库 智能体
# 热门搜索 #
搜索
微软AI程序员登场,10倍AI工程师真来了?996自主生成代码,性能超GPT-4 30%
3475点击    2024-03-17 18:04


全球首个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)的操作结果。


解析器


解析器解释代理生成的响应,以预定格式提取指令和参数。它能确保指令格式正确,验证参数的数量和准确性(例如,文件编辑指令需要文件路径参数)。


如果解析失败,就会在对话中注入错误信息,阻止对资源库的进一步操作。


通过强制执行特定的代理权限和进行额外的语义检查,成功解析的命令会被进一步分析。


它能确保建议的操作符合用户指定的细粒度权限。


如果命令通过审查,对话管理器就会调用工具库中的相应操作。


输出组织器


输出组织器模块主要负责处理从评估环境接收到的输出。


它选择关键信息(如状态或错误),有选择地总结相关内容,并将结构良好的信息添加到对话历史记录中。


这可确保用户对AutoDev的操作和结果有一个清晰、有条理的记录。


对话终止器


会话管理器决定何时结束会话。这可能发生在代理发出任务完成信号(停止命令)、对话达到用户定义的最大迭代次数/token、或在进程或评估环境中检测到问题时。


AutoDev的全面设计确保了人工智能驱动开发的系统性和可控性。



代理调度程序(Multi-Agents)


代理调度器负责协调人工智能代理,以实现用户定义的目标。


配置了特定角色和可用命令集的代理协同运行,执行各种任务。调度器采用各种协作算法,如循环、基于令牌或基于优先级的算法,来决定代理参与对话的顺序和方式。


具体来说,调度算法包括但不限于以下几种:


(i)循环协作,按顺序调用每个代理,让每个代理执行预定数量的操作;


(ii)基于令牌的协作,让一个代理执行多个操作,直到它发出一个令牌,表示完成了分配的任务;


(iii)基于优先级的协作,按照代理的优先级顺序启动代理。代理调度器通过当前对话调用特定代理。


代理


由OpenAI GPT-4等大型语言模型(LLM)和为代码生成而优化的小型语言模型(SLM)组成的代理通过文本自然语言进行交流。


这些代理从代理调度程序(Agent Scheduler)接收目标和对话历史,并根据规则和行动配置指定的行动做出响应。每个代理都有其独特的配置,有助于实现用户目标的整体进展。


工具库(Tools Library)

AutoDev中的工具库提供了一系列命令,使代理能够对资源库执行各种操作。


这些命令旨在将复杂的操作、工具和实用程序封装在简单直观的命令结构中。


例如,通过build和test <test_file>这样的简单命令,就能抽象出与构建和测试执行有关的复杂问题。


-文件编辑:该类别包含用于编辑文件(包括代码、配置和文档)的命令。


-该类别中的实用程序,如写入、编辑、插入和删除,提供了不同程度的精细度。


-代理可以执行从写入整个文件到修改文件中特定行的各种操作。例如,命令 write <filepath> <start_line>-<end_line> <content> 允许代理用新内容重写一系列行。


检索:在这一类别中,检索工具包括grep、find和ls等基本CLI工具,以及更复杂的基于嵌入的技术。


这些技术能让代理查找类似的代码片段,从而提高他们从代码库中检索相关信息的能力。


例如,retrieve <content> 命令允许代理执行与所提供内容类似的基于嵌入的片段检索。


-构建与执行:这类命令允许代理使用简单直观的命令毫不费力地编译、构建和执行代码库。底层构建命令的复杂性已被抽象化,从而简化了评估环境基础架构中的流程。这类命令的示例包括:构建、运行 <文件>。


-测试与验证:这些命令使代理能够通过执行单个测试用例、特定测试文件或整个测试套件来测试代码库。代理可以执行这些操作,而无需依赖特定测试框架的底层命令。


这类工具还包括校验工具,如筛选器和错误查找工具。这类命令的例子包括:检查语法正确性的 syntax <file> 和运行整个测试套件的 test。


-Git:用户可以为Git操作配置细粒度权限。包括提交、推送和合并等操作。例如,可以授予代理只执行本地提交的权限,或者在必要时将更改推送到源代码库。


-通信:代理可以调用一系列旨在促进与其他代理和/或用户交流的命令。值得注意的是,talk命令可以发送自然语言信息(不解释为版本库操作命令),ask命令用于请求用户反馈,而stop命令可以中断进程,表示目标已实现或代理无法继续。


因此,AutoDev中的工具库为人工智能代理提供了一套多功能且易于使用的工具,使其能够与代码库进行交互,并在协作开发环境中进行有效交流。


评估环境(Eval Environment)

评估环境在Docker容器中运行,可以安全地执行文件编辑、检索、构建、执行和测试命令。


它抽象了底层命令的复杂性,为代理提供了一个简化的界面。评估环境会将标准输出/错误返回给输出组织器模块。


整合

用户通过指定目标和相关设置启动对话。


对话管理器初始化一个对话对象,整合来自人工智能代理和评估环境的信息。随后,对话管理器将对话分派给负责协调人工智能代理行动的代理调度器。


作为人工智能代理,语言模型(大型或小型 LM)通过文本互动提出指令建议。


命令界面包含多种功能,包括文件编辑、检索、构建和执行、测试以及 Git 操作。对话管理器会对这些建议的命令进行解析,然后将其引导至评估环境,以便在代码库中执行。


这些命令在评估环境的安全范围内执行,并封装在 Docker 容器中。


执行后,产生的操作将无缝集成到对话历史中,为后续迭代做出贡献。


这种迭代过程一直持续到代理认为任务完成、用户干预发生或达到最大迭代限制为止。


AutoDev 的设计确保了系统、安全地协调人工智能代理,以自主和用户控制的方式完成复杂的软件工程任务。


实证评估设计

在研究人员的实证评估中,评估了AutoDev在软件工程任务中的能力和有效性,研究它是否能够提升人工智能模型的性能,而不仅仅是简单的推理。


此外,研究人员还评估了AutoDev在步骤数、推理调用和token方面的成本。


主要是确定了三个实验研究问题:


-???? ???? 1 : AutoDev 在代码生成任务中的效果如何?


-???? ???? 2 : AutoDev 在测试生成任务中的效果如何?


-???? ???? 3 : AutoDev 完成任务的效率如何?


???? 1 : AutoDev在代码生成任务中的效率如何?

研究人员使用Pass@k指标来衡量AutoDev的有效性,其中????表示尝试的次数。


成功解决的问题是指AutoDev生成的方法主体代码满足所有人工编写的测试。一次尝试相当于一次完整的AutoDev对话,其中涉及多个推理调用和步骤。


这与其他方法(如直接调用 GPT-4)形成鲜明对比,后者通常只涉及一次推理调用。有关多次推理调用和步骤的细节将在???? ???? 3 中进一步探讨。在本次评估中,研究人员设置???? = 1,从而计算Pass@1,只考虑第一次尝试的成功率。


???? 2:AutoDev在测试生成任务中的效果如何?

对于这个研究问题,研究人员修改了HumanEval数据集,来评估AutoDev在生成测试方面的能力。


研究人员考虑人工编写的解决方案,并放弃所提供的人工编写的测试。


他们指示AutoDev为重点方法生成测试用例,并根据测试成功率、重点方法的调用和测试覆盖率对其进行评估。


研究人员报告Pass@1,如果测试通过并调用了焦点方法,则认为测试成功。


此外,研究人员还将AutoDev测试的覆盖率与人工编写的测试覆盖率进行了比较。


???? ???? 3:AutoDev 完成任务的效率如何?

在本研究问题中,研究人员将调查AutoDev完成SE任务的效率。


研究人员分析了所需步骤或推理调用的数量、所使用命令的分布(如写入、测试)以及对话中使用的token总数。


AutoDev设置

在本次评估中,AutoDev基于GPT-4模型(gpt-4-1106-preview)与一个代理保持一致的设置。


启用的操作包括文件编辑、检索和测试。


唯一可用的通信命令是表示任务完成的stop命令。


其他命令,如询问,都是禁用的,这就要求 AutoDev 在初始目标设定之外,在没有人类反馈或干预的情况下自主运行。


实验结果


- AutoDev在代码生成任务中的效率如何?


表1显示了,将AutoDev与两种替代方法和零样本基线进行了比较。


研究人员将AutoDev与语言代理树搜索(LATS)和Reflexion 进行了比较,这两种方法是截至2024年3月HumanEval 排行榜上的两种领先方法。


零样本基线(GPT-4)的结果取自OpenAI GPT-4技术报告。


AutoDev Pass@1率为91.5%,在HumanEval排行榜上稳居第二。


值得注意的是,这个结果是在没有额外训练数据的情况下获得的,这将AutoDev与LATS区分开来,后者达到了94.4%。


此外,AutoDev框架将GPT-4性能从67%提升至91.5%,相对提升了30%。


这些结果体现出,AutoDev有能力显著提升大模型完成软件工程任务方面的表现。




- AutoDev在测试生成任务中的效果如何?


AutoDev在针对测试生成任务修改的HumanEval数据集上,获得了87.8% Pass@1分数,与使用相同GPT-4模型的基线相比,相对提高了17%。


AutoDev生成的正确测试(包含在Pass@1中)实现了99.3%的鲁棒覆盖率,与人工编写的测试的99.4%覆盖率相当。



- AutoDev完成任务的效率如何?


图3显示了,AutoDev在代码生成和测试生成任务中使用的命令累积数,其中考虑到问题1和问题2中每个HumanEval问题的平均评估命令数量。


对于代码生成,AutoDev平均执行5.5条命令,其中包括1.8条写入操作、1.7条测试操作、0.92条停止操作(表示任务完成)、0.25条错误命令,以及最少的检索(grep、find、cat)、语法检查操作和通话通信命令。


在「测试生成」任务中,命令的平均数量与「代码生成」任务一致。


不过,「测试生成」任务涉及的检索操作更多,错误操作的发生率也更高,因此每次运行的平均命令总数为6.5条。



- AutoDev完成任务的效率如何?


图3显示了,AutoDev在代码生成和测试生成任务中使用的命令累积数,其中考虑到问题1和问题2中每个HumanEval问题的平均评估命令数量。


对于代码生成,AutoDev平均执行5.5条命令,其中包括1.8条写入操作、1.7条测试操作、0.92条停止操作(表示任务完成)、0.25条错误命令,以及最少的检索(grep、find、cat)、语法检查操作和通话通信命令。


在「测试生成」任务中,命令的平均数量与「代码生成」任务一致。


不过,「测试生成」任务涉及的检索操作更多,错误操作的发生率也更高,因此每次运行的平均命令总数为6.5条。


在前两个问题中,为解决每个HumanEval问题而进行的AutoDev对话的平均长度分别为1656和1863个token。


这包括用户的目标、来自AI智能体的信息和来自评估环境的响应。


相比之下,GPT-4(基线)的零样本在每个任务中平均使用200个token(估计值)生成代码,使用373个token生成测试。


虽然AutoDev使用了更多的token,但大量token用于测试、验证和解释自己生成的代码,超出了基线方法的范围。


最后,AutoDev会产生与协调人工智能智能体、管理对话以及在Docker环境中执行命令相关的执行成本。


接下来,一起看一下AutoDev如何执行测试生成任务。


开发者给到任务:设定生成遵循特定格式的pytest测试。


AutoDev智能体启动write-new命令,提供测试文件的文件路径和内容。


随后,AutoDev智能体触发测试操作,AutoDev在其安全的Docker环境中运行测试,并给出测试执行报告JSON。



然后,AutoDev开始自主执行:



AutoDev智能体在pytest输出中发现了一个错误,认识到需要进行修复,以使测试与函数的预期行为保持一致。


继续如图5所示,AutoDev智能体发出写入命令,指定文件路径和行号范围 (5-5),以重写错误的断言语句。


随后,AutoDev智能体继续执行测试,并测试成功。



从上面例子中看得出,AutoDev能够自我评估生成的代码,并解决自身输出中的错误。


此外,AutoDev可以帮助用户深入了解智能体的操作,并允许智能体在任务期间进行交流。


随着Devin、AutoDev等AI工程师的诞生,程序员们的工作可能会一大部分实现自动化。



参考资料:

https://www.reddit.com/r/singularity/comments/1bfolbj/autodev_automated_aidriven_development_microsoft/



文章来自微信公众号 “新智元”,作者 桃子润




关键词: AI , Devin , AI程序员 , AI编程
AITNT资源拓展
根据文章内容,系统为您匹配了更有价值的资源信息。内容由AI生成,仅供参考
1
AI工作流

【开源免费】n8n是一个可以自定义工作流的AI项目,它提供了200个工作节点来帮助用户实现工作流的编排。

项目地址:https://github.com/n8n-io/n8n

在线使用:https://n8n.io/(付费)


【开源免费】DB-GPT是一个AI原生数据应用开发框架,它提供开发多模型管理(SMMF)、Text2SQL效果优化、RAG框架以及优化、Multi-Agents框架协作、AWEL(智能体工作流编排)等多种技术能力,让围绕数据库构建大模型应用更简单、更方便。

项目地址:https://github.com/eosphoros-ai/DB-GPT?tab=readme-ov-file



【开源免费】VectorVein是一个不需要任何编程基础,任何人都能用的AI工作流编辑工具。你可以将复杂的工作分解成多个步骤,并通过VectorVein固定并让AI依次完成。VectorVein是字节coze的平替产品。

项目地址:https://github.com/AndersonBY/vector-vein?tab=readme-ov-file

在线使用:https://vectorvein.ai/(付费)

2
智能体

【开源免费】AutoGPT是一个允许用户创建和运行智能体的(AI Agents)项目。用户创建的智能体能够自动执行各种任务,从而让AI有步骤的去解决实际问题。

项目地址:https://github.com/Significant-Gravitas/AutoGPT


【开源免费】MetaGPT是一个“软件开发公司”的智能体项目,只需要输入一句话的老板需求,MetaGPT即可输出用户故事 / 竞品分析 / 需求 / 数据结构 / APIs / 文件等软件开发的相关内容。MetaGPT内置了各种AI角色,包括产品经理 / 架构师 / 项目经理 / 工程师,MetaGPT提供了一个精心调配的软件公司研发全过程的SOP。

项目地址:https://github.com/geekan/MetaGPT/blob/main/docs/README_CN.md