当前位置:首页|资讯|微软|编程|人工智能|ChatGPT|GitHub

微软发布全自动软件开发框架AutoDev:开启新时代的代码生成与测试

作者:AI论文解读发布时间:2024-03-18



引言:AI在软件开发中的新角色

随着人工智能(AI)技术的不断进步,AI在软件开发中的角色也在发生着翻天覆地的变化。开发者们越来越多地采用AI助手,如ChatGPT,以提高开发效率。这些AI编码助手已经进一步融入到集成开发环境(IDE)中,如GitHub Copilot,它们不仅在聊天界面中提供代码建议,还能直接在文件中进行操作。然而,尽管这些AI编码助手已经集成到IDE中,它们的功能仍然有限,缺乏上下文意识。它们通常不会利用所有IDE的功能,如调用linters、编译器或执行命令行操作,因此开发者仍需手动验证AI生成代码的语法正确性,执行代码库,并检查错误日志。

为了填补这一空白,我们提出了AutoDev,这是一个全自动的AI驱动软件开发框架,专为自主规划和执行复杂的软件工程任务而设计。AutoDev允许用户定义复杂的软件工程目标,这些目标被分配给AutoDev的自主AI代理来实现。这些AI代理可以在代码库上执行多种操作,包括文件编辑、检索、构建过程、执行、测试和git操作。它们还可以访问文件、编译器输出、构建和测试日志、静态分析工具等。这使得AI代理能够在全自动的方式下执行任务,同时全面理解所需的上下文信息。此外,AutoDev通过将所有操作限制在Docker容器中,建立了一个安全的开发环境。该框架包含了保护用户隐私和文件安全的防护措施,允许用户在AutoDev中定义特定的允许或限制命令和操作。

在我们的评估中,我们在HumanEval数据集上测试了AutoDev,取得了91.5%和87.8%的Pass@1成绩,分别用于代码生成和测试生成,证明了其在自动化软件工程任务的有效性,同时保持了一个安全和用户控制的开发环境。

论文标题:AutoDev: Automated AI-Driven Development

论文链接:https://arxiv.org/pdf/2403.08299.pdf

公众号【AI论文解读】后台回复“论文解读” 获取论文PDF!

AutoDev框架介绍:自动化软件开发的新时代

1. 框架概述与关键特性

AutoDev是一个全自动的AI驱动软件开发框架,旨在自主规划和执行复杂的软件工程任务。用户可以定义复杂的软件工程目标,由AutoDev的自主AI代理完成。这些AI代理能够在代码库上执行多种操作,包括文件编辑、检索、构建过程、执行、测试和git操作。它们还可以访问文件、编译器输出、构建和测试日志、静态分析工具等,使AI代理能够全面理解执行任务所需的上下文信息。此外,AutoDev通过将所有操作限制在Docker容器中,建立了一个安全的开发环境。该框架包含安全防护措施,以确保用户隐私和文件安全,允许用户在AutoDev中定义特定的允许或限制命令和操作。

2. AI代理的角色与功能

AI代理由大型语言模型(如OpenAI GPT-4)和专为代码生成优化的小型语言模型组成,它们通过自然语言文本进行交流。这些代理从代理调度器接收目标和对话历史,响应由规则和操作配置指定的动作。每个代理都有其独特的配置,为实现用户目标的整体进展做出贡献。


3. 安全性与用户控制的开发环境

AutoDev通过在Docker容器内限制操作,确立了一个安全的开发环境。用户可以通过yaml文件配置规则和操作,定义AI代理可以执行的命令。用户可以利用默认设置或通过启用/禁用特定命令来进行细粒度的权限设置,从而根据自己的具体需求定制AutoDev。

AutoDev的核心组件详解

1. 对话管理器:沟通的桥梁

对话管理器负责初始化对话历史,监控持续对话的高级管理。它决定何时中断过程,并确保用户、AI代理和整个系统之间的无缝沟通。它维护一个包含AI代理消息和来自评估环境的动作结果的对话对象。

2. 工具库:多样化的操作命令

工具库为AI代理提供了一系列命令,使其能够在代码库上执行多样化的操作。这些命令旨在将复杂的动作、工具和实用程序封装在一个直观的命令结构后面。例如,构建和测试执行的复杂性通过简单的命令如build和test来抽象化。

3. 代理调度器:多代理协作的指挥中心

代理调度器负责协调AI代理以实现用户定义的目标。配置有特定角色和可用命令集的代理,协同工作以执行多样化的任务。调度器使用各种协作算法,如循环轮询、基于令牌的或基于优先级的,来确定代理如何贡献于对话。


4. 评估环境:安全的执行空间

评估环境在Docker容器内运行,允许安全执行文件编辑、检索、构建、执行和测试命令。它抽象了低级命令的复杂性,为代理提供了一个简化的接口。评估环境将标准输出/错误返回给输出组织器模块。

实验设计与评估指标

1. 代码生成与测试生成的有效性

在AutoDev的实验设计中,我们关注的是其在代码生成和测试生成任务中的有效性。为了评估这一点,我们使用了HumanEval数据集,该数据集包含了用于Python编程问题求解的164个手写程序问题,每个问题都包含一个函数签名、文档字符串、函数体和平均7.7个单元测试。在代码生成任务中,AutoDev被提供了一个包含函数签名和文档字符串的部分文件,目标是实现该方法。而在测试生成任务中,我们修改了HumanEval数据集,要求AutoDev为给定的方法生成测试用例,并基于测试成功、调用焦点方法和测试覆盖率来评估其性能。

2. AutoDev完成任务的效率

为了评估AutoDev在完成任务方面的效率,我们考察了完成软件工程任务所需的步骤数、推理调用次数和令牌数。我们定义了三个实验研究问题,即RQ1、RQ2和RQ3,分别关注代码生成的有效性、测试生成的有效性以及AutoDev完成任务的效率。

实验结果与分析

1. AutoDev在代码生成任务中的表现

AutoDev在代码生成任务中的表现是通过Pass@k指标来衡量的,其中k代表尝试的次数。AutoDev在第一次尝试中就成功生成了满足所有人工编写测试的方法体代码,取得了91.5%的Pass@1成绩,这一成绩在没有额外训练数据的情况下,在排行榜上位列第二,并且是最好的成绩。

2. AutoDev在测试生成任务中的表现

在测试生成任务中,AutoDev在修改后的HumanEval数据集上取得了87.8%的Pass@1分数,相比于使用相同GPT-4模型的基线方法,显示出了17%的相对改进。通过AutoDev生成的正确测试(包含在Pass@1中)实现了99.3%的覆盖率,与人工编写测试的覆盖率99.4%相当。


3. AutoDev的命令使用与会话分析

在对AutoDev的命令使用和会话进行分析时,我们发现在代码生成任务中,AutoDev平均执行了5.5个命令,包括1.8次写操作、1.7次测试操作、0.92次停止操作(指示任务完成),以及少量的检索(grep、find、cat)、语法检查操作和通信命令。在测试生成任务中,平均命令数与代码生成任务相似,但涉及更多的检索操作和更高的错误操作频率,平均每次运行总共使用了6.5个命令。

AutoDev对每个HumanEval问题的平均会话长度分别为1656和1863个令牌,这包括用户的目标、AI代理的消息和评估环境的响应。相比之下,零次射击GPT-4(基线)平均每个任务使用200个令牌进行代码生成,以及平均每个任务373个令牌进行测试生成。尽管AutoDev使用了更多的令牌,但它花费了大量的令牌进行测试、验证和解释自己生成的代码,这超出了基线方法所提供的范围。

讨论:AutoDev的实际应用案例

1. 测试生成任务中的AutoDev动作

AutoDev的实际应用案例之一是在测试生成任务中的应用。在这种情境下,AutoDev的AI代理(Agents)能够执行多种操作,包括文件编辑、检索、构建过程、执行测试以及git操作。例如,用户可以定义一个目标,要求生成测试用例,并确保它们在语法上正确、能够通过测试且不包含错误。这涉及到编辑文件、运行测试套件、执行语法检查和查找工具等操作。在评估中,AutoDev在HumanEval数据集上的测试生成任务中表现出色,Pass@1的得分为87.8%,表明其在自动化软件工程任务方面的有效性。

2. 多代理协作的潜力与未来展望

AutoDev的设计支持多AI代理协作,通过代理调度器(Agent Scheduler)实现。这些代理可以配置具有特定角色和可用命令集的个性化设置,并协作完成多样化的任务。例如,可以配置一个“开发者”代理和一个“审查者”代理,它们协同工作以实现共同的目标。初步结果表明,多代理协作对于更复杂的任务具有积极的影响。在未来,AutoDev计划扩展评估,以包括更复杂的场景,其中多代理协作可以显著提高AutoDev的性能。

3. 人在循环中的作用与AutoDev的集成计划

AutoDev允许AI代理使用talk和ask命令与用户沟通任务进展或请求反馈。在未来的工作中,AutoDev计划更深入地将人类集成到循环中,允许用户中断代理并提供即时反馈。此外,AutoDev的集成计划包括将其作为聊天机器人体验集成到IDE中,以及将其纳入CI/CD管道和PR审查平台。开发者可以分配任务和问题给AutoDev,并在PR系统中审查结果,进一步简化软件开发工作流程。

相关工作:AI在软件工程中的应用与评估

1. AI在软件工程中的进展

AI,特别是大型语言模型(LLMs),在软件工程中的集成已经取得了显著的进展。例如GPT-3、InstructGPT和GPT-4等模型已经能够理解和生成自然语言以及源代码。这些模型在IDE中作为智能编程助手的潜力已经得到了显著的关注。AutoDev在这些工作的基础上进一步发展,提供了一个多功能的工具库,使AI代理能够自主执行复杂的任务,如代码编辑、测试和集成。

2. LLM在软件工程任务中的评估挑战

评估LLMs在软件工程任务中的应用带来了独特的挑战。传统的基于语言的度量标准,如BLEU,通常无法捕捉到编程中的关键方面,如语法正确性和基于执行的度量标准。CodeXGLUE等平台通过提供全面的评估平台来解决这些限制,它提供了一个多样化的基准数据集以及基线模型,如CodeBERT和CodeGPT。AutoDev的当前评估依赖于HumanEval来评估代码和测试生成任务的有效性,未来的工作旨在将这种评估扩展到更具挑战性和实际的数据集。

3. AI与软件工程交互的研究

尽管先前的工作已经探索了AI与软件工程的交集,但很少有研究深入到IDE交互中的AI引导编程。AutoDev从现有文献中汲取灵感,同时增强了它们的贡献。例如,Auto-GPT、LATS(Language Agent Tree Search)和Reflexion等都提出了AI驱动任务的独特方法。AutoDev专门针对软件工程领域,提供了一个灵活的框架,允许AI代理完全自主地完成复杂的SE任务。AutoDev旨在弥合传统软件工程实践与AI驱动自动化之间的差距,促进开发者与AI代理之间的协作努力。

结论与未来工作:AutoDev的贡献与展望

在本文中,我们介绍了AutoDev——一个全自动的AI驱动软件开发框架,旨在自主规划和执行复杂的软件工程任务。AutoDev允许用户定义复杂的软件工程目标,并由自主的AI代理来实现这些目标。这些AI代理能够在代码库上执行多种操作,包括文件编辑、检索、构建过程、执行、测试和git操作。它们还可以访问文件、编译器输出、构建和测试日志、静态分析工具等,这使得AI代理能够在全自动的模式下执行任务,并全面理解所需的上下文信息。此外,AutoDev通过将所有操作限制在Docker容器中,建立了一个安全的开发环境。该框架包含了保障用户隐私和文件安全的护栏,允许用户在AutoDev内定义特定的允许或限制的命令和操作。

在我们的评估中,我们在HumanEval数据集上测试了AutoDev,取得了91.5%和87.8%的Pass@1成绩,分别用于代码生成和测试生成,证明了其在自动化软件工程任务的有效性,同时保持了一个安全和用户可控的开发环境。



Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1