查看原文
科技

震惊码农!微软发表AutoDev AI工程师,007永不停歇敲代码,性能超越GPT-4 30%

灵度智能 灵度智能 2024-03-20

AutoDev: Automated AI-Driven Development


近日,Cognition AI推出全球首个AI程序员,掌握全栈技能、自学新技术、构建和部署应用程序、自主查找并修复Bug、训练和微调自己的AI模型等多项能力,震动码农届。


同期,微软也推出了自己的AI程序员AutoDev。AutoDev可以自主规划和执行复杂的软件工程任务,可以执行多种操作,包括文件编辑、检索、构建、执行、测试和git操作。在HumanEval测试中,AutoDev在代码生成和测试任务分别取得了91.5%和87.8% Pass@1的优秀成绩。



论文地址:https://arxiv.org/pdf/2403.08299.pdf


摘要


AutoDev是一个全自动的AI驱动软件开发框架,可以自主规划和执行复杂的软件工程任务。它可以执行多种操作,包括文件编辑、检索、构建、执行、测试和git操作。AutoDev还确保了用户隐私和文件安全,并在Docker容器中限制了所有操作。在HumanEval数据集上的测试结果表明,AutoDev在自动化软件工程任务方面非常有效。



简介


AI编码助手已经进一步发展成为集成开发环境(IDE)中的一部分,如GitHub Copilot,它们在聊天界面和文件中直接提供代码建议。然而,这些AI编码助手的功能有限,缺乏上下文意识。


AutoDev通过在存储库中直接执行文件编辑、检索、构建、测试和命令行操作等操作,实现了自动完成复杂任务的能力。AutoDev具有跟踪和管理用户和AI助手对话的能力、自定义工具库、通过代理调度程序协同工作的能力以及通过评估环境执行代码和运行测试的能力。AutoDev的工作流程示例是用户定义一个目标,AI助手在安全的评估环境中编写测试并执行测试命令,然后将测试执行的输出合并到对话中。AI助手分析输出,触发检索命令,通过编辑文件将检索到的信息合并进来,然后重新执行测试。最后,环境提供关于测试执行成功和用户目标完成的反馈。


整个过程由AutoDev自动完成,除了设置初始目标外,不需要开发者的干预。与集成到IDE中的现有AI编码助手相比,开发者需要手动执行测试、将失败日志提供给AI聊天界面、可能需要识别其他上下文信息并在AI生成修订代码后重复验证操作以确保测试成功。


AutoDev借鉴了以前在自动AI助手领域的工作,如AutoGen和Auto-GPT。AutoDev在自动化软件工程任务的同时保持了安全性和可控性。通过使用HumanEval数据集对AutoDev的能力进行评估,结果显示AutoDev在代码生成和测试生成任务上取得了令人满意的性能。


AutoDev设计


AutoDev的设计概述展示了其架构,包括四个能力:Conversation Manager、Tools library、Agents Scheduler和Evaluation Environment。Conversation Manager跟踪和管理用户和代理之间的对话;Tools library提供各种代码和IDE相关的工具;Agents Scheduler调度各种代理;Evaluation Environment实现执行操作。



规则、动作和目标配置


用户通过配置规则和操作的YAML文件来初始化AutoDev的目标和过程。这些文件定义了AI代理可以执行的可用命令(操作)。用户可以使用默认设置或通过启用/禁用特定命令来进行细粒度的权限配置,以满足其特定需求。这个配置步骤允许对AI代理的能力进行精确控制。在这个阶段,用户可以定义AI代理的数量和行为,分配特定的责任、权限和可用的操作。例如,用户可以定义一个“开发者”代理和一个“审查者”代理,它们共同协作完成错误查找工作。在配置规则和操作之后,用户指定AutoDev要完成的软件工程任务或过程。例如,用户可以要求生成测试用例,并确保它们在语法上正确、通过测试并且不包含错误(这涉及到编辑文件、运行测试套件、执行语法检查等)。


Conversation Manager


Conversation Manager负责管理对话历史记录,Parser解释代理生成的响应,Output Organizer处理来自评估环境的输出,Conversation Manager确定何时结束对话。AutoDev的设计确保了系统化和可控的AI驱动开发。


Agent Scheduler 


Agent Scheduler负责协调AI代理以实现用户定义的目标。代理根据特定的角色和可用命令集进行配置,协同工作以执行各种任务。调度程序使用各种协作算法,如轮流、基于令牌或基于优先级的算法,确定代理按照何种顺序和方式参与对话。具体的调度算法包括但不限于:

  • i)轮流协作,按顺序调用每个代理,允许每个代理执行预定数量的操作;

  • ii)基于令牌的协作,使代理可以执行多个操作,直到发出表示完成分配任务的令牌;

  • iii)基于优先级的协作,按照优先级顺序启动代理。代理调度程序调用特定的代理,并传递当前对话。


代理由包括OpenAI GPT-4等大型语言模型(LLMs)和针对代码生成进行优化的小型语言模型(SLMs)组成,通过文本自然语言进行通信。这些代理从代理调度程序接收目标和对话历史,并根据规则和操作配置响应。每个代理根据其独特的配置对实现用户目标的整体进展做出贡献。


Tools Library 


AutoDev的开发工具库通过简单的命令结构为AI Agents提供了执行各种操作的能力。这些命令包括文件编辑、检索、构建和执行、测试和验证、Git操作以及通信等功能。通过这些命令,Agents可以轻松地编辑文件、检索相关代码片段、构建和执行代码、进行测试和验证,并与其他Agents和用户进行有效的沟通。这个工具库提供了一个多功能且易于使用的环境,使得Agents能够高效地与代码库进行交互。


评估环境


Evaluation Environment是在Docker容器中运行的,可以安全地执行文件编辑、检索、构建、执行和测试命令。它为代理提供了简化的接口,抽象了低级命令的复杂性。Evaluation Environment将标准输出/错误返回给Output Organizer模块。


整合所有组件


AutoDev是一个自动化软件工程平台,它通过协调AI代理来实现复杂的软件工程任务。用户通过指定目标和相关设置来启动对话,对话管理器初始化对话对象,协调AI代理的行动。语言模型建议执行接口代码库上的命令,这些命令包括文件编辑、检索、构建和执行、测试和Git操作。这些建议的命令由对话管理器解析并发送到评估环境中执行。执行命令发生在安全的评估环境中,执行结果无缝集成到对话历史中,直到任务完成或达到最大迭代次数。AutoDev的设计确保了AI代理的系统和安全的协调,以实现自主和用户控制的复杂软件工程任务。


实验设计


本文旨在评估AutoDev在软件工程任务中的能力和有效性,以及其在步骤数、推理调用和令牌方面的成本。研究将检查AutoDev是否能够提高AI模型的性能,超越简单的推理。研究将进行三个实验。


研究问题


AutoDev在代码生成任务中的有效性如何?


使用Pass@k指标评估AutoDev在Python代码生成任务中的性能。使用HumanEval问题解决数据集,该数据集包含164个手写编程问题,每个问题包含函数签名、文档字符串、主体和平均7.7个单元测试。评估中,AutoDev提供了一个包含函数签名和文档字符串的部分文件,目标是生成方法体的代码,满足所有人类编写的测试。评估中使用Pass@1指标,考虑在第一次尝试中实现的成功率。评估中还介绍了AutoDev对话的多个推理调用和步骤。


AutoDev在测试生成任务中的有效性如何?


使用HumanEval数据集评估AutoDev在测试生成方面的能力。研究中使用人类编写的解决方案,但舍弃了提供的人类编写的测试。AutoDev被指示为焦点方法生成测试用例,并根据测试成功率、调用焦点方法和测试覆盖率进行评估。研究报告了Pass@1,如果测试通过并调用焦点方法,则认为测试成功。此外,还比较了AutoDev测试的覆盖率与人类编写的测试。


AutoDev完成任务的效率如何?


探究AutoDev在完成SE任务时的效率。我们分析了所需步骤或推理调用的数量、使用的命令分布(例如写入、测试)以及对话中使用的总令牌数。


AutoDev设置


AutoDev基于GPT-4模型的代理程序,具有一致的设置。它可以进行文件编辑、检索和测试等操作。唯一可用的通信命令是停止命令,表示任务完成。其他命令如询问被禁用,要求AutoDev在设定初始目标后自主运行,无需人工反馈或干预。


实验结果


AutoDev在代码生成任务中的有效性如何?


AutoDev在HumanEval排行榜上获得了第二名的成绩,Pass@1率为91.5%,而LATS需要额外的训练数据才能达到94.4%的成绩。AutoDev框架将GPT-4的性能从67%提高到了91.5%。需要注意的是,AutoDev的有效性可能需要多次推理调用和步骤。



AutoDev在测试生成任务中的有效性如何?


AutoDev在测试生成任务中表现出色,相比于使用相同GPT-4模型的基准测试,其Pass@1得分提高了17%。AutoDev生成的正确测试覆盖率达到99.3%,与人工编写的测试的覆盖率相当。此外,AutoDev在整个数据集上实现了88.8%的覆盖率。这些结果证明了AutoDev在解决不同软件工程任务方面的能力。



AutoDev完成任务的效率如何?


对于代码生成和测试生成任务,AutoDev平均使用5.5和6.5个命令,其中包括写操作、测试操作、停止操作和检索操作。AutoDev的对话长度比基线方法长,但它执行了更多的测试、验证和解释操作,超越了基线方法。AutoDev的执行成本包括管理对话、执行命令和在Docker环境中执行操作。



讨论


AutoDev实战


AutoDev可以自我评估并修复代码中的错误。在测试生成任务中,AutoDev代理通过写入命令生成pytest测试用例,并在其安全的Docker环境中运行测试。如果测试失败,AutoDev代理会识别出pytest输出中的错误,并修复测试用例中的错误。AutoDev还可以与用户进行交互,让用户了解代理的操作。




多Agents协作


AutoDev支持多Agents协作完成任务,由Agent Scheduler进行编排。实验结果表明,多Agents协作对于更复杂的任务有积极影响。未来计划将评估扩展到更复杂的场景,以显著提高AutoDev的性能。在AI开发人员和AI评审员之间进行协作,可以在代码验证操作执行之前预先识别AI开发人员的错误。


人类反馈


AutoDev允许AI代理使用talk和ask命令来与开发人员交流任务进展或请求反馈。这些命令对于开发人员理解代理意图和获得代理计划的洞察力非常有帮助。未来计划包括更深入地将人类整合到AutoDev中,允许用户打断代理并提供反馈。


AutoDev集成


AutoDev是一个CLI命令,可以在IDE中使用,我们的目标是将其整合到IDE中,创建一个聊天机器人体验,并将其纳入CI/CD管道和PR审查平台中。我们希望开发人员将任务和问题分配给AutoDev,在PR系统中查看结果,并进一步简化工作流程。


相关工作


AI在软件工程中的应用


AI技术在软件工程中的应用已经取得了显著进展,特别是在大型语言模型(LLMs)的应用方面,如GPT-3、InstructGPT和GPT4等模型,它们可以理解和生成自然语言和源代码。LLMs在集成开发环境(IDEs)中的应用已经引起了广泛关注,它们可以作为智能编程助手,提高开发者的生产力。AutoDev是一个全面的框架,可以在安全的开发环境中自主执行复杂的软件工程任务,包括代码编辑、测试和集成等。它还支持不同参数大小和架构的多种AI模型协同工作。


LLMs在软件工程中的评估


传统的基于语言的度量标准难以评估LLMs在软件工程任务中的表现,需要考虑语法正确性和执行度量标准。CodeXGLUE提供了一个全面的评估平台,包括基准数据集和基线模型。HumanEval关注LLMs的功能正确性,提供了一个手写Python编程问题的基准数据集。Copilot Evaluation Harness扩展了软件工程任务的范围和评估度量标准,未来的工作将扩展到更具挑战性和真实的数据集。


AI集成在软件工程中


AutoDev是一个AI驱动的软件工程框架,它结合了Auto-GPT、LATS和Reflexion等现有工作的优点。AutoDev利用GPT-3.5和GPT-4与伴侣机器人配对,使用户能够指导这些语言模型实现特定的目标。它还采用了LATS的思想,将LLMs作为代理、价值函数和优化器,提高决策能力。此外,AutoDev还引入了Reflexion的框架,通过语言反馈来加强语言代理的能力。AutoDev专注于软件工程领域,提供了一个灵活的框架,使AI代理能够自主完成复杂的软件工程任务。它为开发人员和AI代理之间的协作提供了便利,是AI辅助开发的一个重要进展。


总结

AutoDev是一个框架,使AI代理能够自主与存储库交互,执行操作并解决复杂的软件工程任务。它将提取相关上下文和验证AI生成的代码的责任从用户转移到AI代理本身。开发人员的角色转变为监督多个代理在任务上的协作,并可以提供反馈。AutoDev在代码生成和测试生成方面取得了令人印象深刻的结果,并计划将其整合到IDE、CI/CD流水线和PR审查平台中。
▌关于我们

灵度智能,我们致力于提供优质的AI服务,涵盖人工智能、数据分析、机器学习、深度学习、强化学习、计算机视觉、自然语言处理、语音处理等领域。提供AI课程、AI算法代做、论文复现、远程调试等服务。如有相关需求,请私信与我们联系。


我们的愿景通过创新创意和智能技术为客户提供卓越的解决方案,助力产业升级和数字化转型。我们的产品和服务将引领行业标准,创造卓越的用户体验。我们的团队致力于创造更智能、更便捷和更高效的生活方式,推动社会进步,致力于创造更美好的未来。

淘宝店铺:公众号后台回复“淘宝”获取店铺地址
商务合作:请加微信 LingDuTech163

关注【灵度智能】公众号,获取更多AI资讯。


继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存