北大用ChatGPT打造开发团队,无需人类干预,AI自主完成软件开发

简介: 北大用ChatGPT打造开发团队,无需人类干预,AI自主完成软件开发

人类可以通过合作的方式解决复杂问题,这种模式同样适用于 AI 领域。

「一个人的能力有限,一支团队的力量无限」,这一句话在现实世界的软件开发中体现的淋漓尽致。对于复杂的任务,人们通过团队合作策略来解决。但在 AI 世界中,这样的模式是否也适用呢?


北京大学李戈教授团队提出了一种全新的 self-collaboration(自合作)模式。它允许多个大模型模型扮演不同的角色,组成了一个无需人类参与的软件开发团队,通过大模型间的合作和交互,自主完成整个软件开发流程,甚至包括一些复杂的代码生成任务。


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

尽管大型语言模型 (简称为:大模型) 在代码生成方面已经展示出了惊人的能力,但是在处理复杂任务上仍然存在挑战。在现实中的软件开发过程中,人们通常通过协同团队工作的策略来解决复杂的任务,这种策略能够显著地控制开发的复杂性并提高软件的质量。

受此启发,研究者提出了一个使用大模型进行代码生成的 self-collaboration 框架。具体来说,通过角色指令,1) 多个大型语言模型扮演不同的 "专家" 角色,每个模型负责处理复杂任务中的特定子任务;2) 规定合作和交互的方式,使不同的角色形成一个虚拟团队,帮助彼此完成工作,最终无需人为干预就能共同完成代码生成任务。

为了有效地组织和管理这个虚拟团队,研究者巧妙地将软件开发方法论中的瀑布模型融入到了框架中,组建了一个由三个 ChatGPT 角色(即分析师、程序员和测试员)组成的基础团队,实施软件开发过程中的分析、编码和测试阶段。

实验结果表明,与直接利用大模型代码生成相比,self-collaboration 代码生成的性能大幅提升,甚至让 GPT-3.5 超越了 GPT-4。此外,研究者还展示了 self-collaboration 能使大模型有效地处理更复杂的实际代码项目,而这些项目往往是直接代码生成难以解决的。

图1:用于代码生成的 Self-collaboration 框架及其实例。

此项研究开创了一种新的使用人工智能语言模型进行软件开发的路径,将人工智能与软件开发过程的各个阶段紧密结合,既提高了开发效率,也保证了软件的质量。通过利用 ChatGPT 等 LLMs 的潜力,可以为模型间合作和交互提供更强大的支持,从而促进虚拟团队在处理复杂软件开发任务方面的成功。这种 self-collaboration 框架为自动代码生成提供了一种新的、更高效的方法,有助于推动软件开发领域的创新和进步。此外,这项工作还可以作为未来研究各个领域的自我合作方法以及开发更先进、更专业的虚拟团队来处理更复杂任务的基础。

下面具体介绍一下 Self-collaboration 框架以及在该框架基础上按照软件开发方法论组建虚拟团队的实例。

Self-collaboration 框架

给定需求 x,利用大模型执行 Self-collaboration 以生成输出 y。该任务定义为Self-collaboration 框架由两部分组成:分工和合作。

在分工部分,研究者运用先验知识将复杂任务分解为一系列阶段 并构建一些不同的角色,这些角色基于大模型和角色指令。每个阶段 由一个或多个角色 负责。

众所周知,大模型对上下文非常敏感,因为它们在训练时,被要求根据前面的文字预测后续文字。因此,一种广泛使用的方式是通过指令或提示来控制大模型的生成。研究者采用特定类型的指令为大模型分配身份和职责,被称为角色指令。具体来说,研究者要求大模型扮演与其职责紧密相关的特定角色并且传达这个角色应该执行的详细任务。

使用角色指令的优势在于它们仅需要在交互开始时被提供一次。在随后的交互中,传达的只是意图,而不是指令和意图的组合。因此,角色指令提升了后续沟通合作的整体效率和清晰度。

在合作部分,研究者关注于促进在 self-collaboration 框架内承担不同角色的大模型之间的有效交互。每个大模型在其指定角色指令的指导下,通过履行其分配的职责为整体任务做出贡献。随着阶段的进展,大模型与其他大模型交流他们的输出,交互信息并输出 y 。

利用角色指令,可以有效控制大模型的输出格式。结合语言模型的基础方面,这可以初步建立大模型之间的通信。

合作部分可以形式化为:

其中 是阶段的输出,表示 前提阶段的输出,表示 对应的角色。请注意,如果阶段 之间的关系不是线性关系,self-collaboration 框架可以并行化。计算 被视为合作,其中角色 与每个前面阶段的角色合作生成 输出 y 随着阶段 的进展迭代更新:


其中 f 是一个更新函数。为了促进有效合作,研究者建立了一个共享黑板,每个角色从中获取所需的信息以完成各自的任务 算法 1 给出了 self-collaboration 框架的完整算法。


实例化

研究者将软件工程方法论中的经典瀑布模型引入到自协作框架中,使代码生成的团队协作更加高效。具体来说,研究者设计了一个由分析、编码和测试三个阶段组成的简化瀑布模型,作为自协作代码生成的实例。该实例的工作流程遵循瀑布模型从一个阶段流向下一阶段,如果发现问题,则返回上一阶段进行细化。因此,研究者建立了一个基本团队,包括分析师、编码员和测试员,负责分析、编码和测试阶段,如图 1(右)所示。这三个不同的角色被分配以下任务:

分析师:分析师的目标是制定高层次的 plan 并专注于指导程序员编写程序,而不是深入研究实现细节。给定需求 x,分析师将 x 分解为几个易于解决的子任务,以方便程序员直接实施,并制定概述实施主要步骤的 plan。

程序员:作为该团队的核心角色,程序员将在整个开发过程中接收来自分析师的 plan 或来自测试人员的测试报告。因此,研究者通过角色说明将两项主要职责分配给程序员:1. 编写满足指定要求的代码,遵守分析师提供的 plan。2. 修复或细化代码,考虑到测试人员反馈的测试报告反馈。编码器角色指令的详细信息如图 2 所示。

测试员:测试员获取程序员编写的代码,然后记录包含各个方面(例如功能性、可读性和可维护性)的测试报告。研究者提倡模型模拟测试过程并生成测试报告,而不是生成测试用例然后通过执行手动测试代码,从而促进交互并避免额外的工作。

研究者为该实例制定了角色指令来扮演这三个角色。编码器角色指令的示例如图 2 所示。在本例中,角色指令不仅包括角色描述(角色及其职责),还包括团队描述和用户需求,它们将共同初始化 ChatGPT 代理,从而设置 ChatGPT 的行为。该实例仅在阶段为 coding 时更新输出,并且此开发过程在测试人员确认满足要求时结束。


实验结果

研究者将 self-collaboration 代码生成与各种最先进(SOTA)方法进行比较,实验结果表明,self-collaboration 框架显著提高了基础大模型的性能。值得注意的是,即使是一个简单的三人团队(包括分析师、程序员和测试员),基于 ChatGPT (GPT-3.5) 的 self-collaboration 代码生成在四个代码生成基准测试中也取得了最佳性能,甚至超过了 GPT-4。考虑到基础大模型本身的差距,将 self-collaboration 框架应用于更强大的模型,例如 GPT-4,将产生更好的结果。


研究者进一步研究了仅使用自然语言描述的代码生成,这种设置更贴近实际的软件开发。在此设置下,研究者比较了由 self-collaboration 框架实例化的初等团队中每个 ChatGPT 角色的表现,如表 2 所示。实验结果表明,与仅使用程序员角色相比,无论是二位角色还是三位角色组建的团队,性能都有显著提高。


研究者还研究了在不同模型大小下大模型的自合作能力。研究者评估了 self-collaboration 方法在处理复杂任务时的有效性,特别是那些对直接代码生成具有挑战性的任务。对于此类任务,研究者采用 self-collaboration 策略作为解决方案。如图 6 所示,随着模型规模的扩大,大模型的 coding 能力通常呈现出增加的趋势,而自合作能力在 7B 参数量左右开始显现出来,随后不断提升。实验结果表明自合作有助于激发大模型的潜在智能。


此外,研究者展示了一个 self-collaboration 代码生成示例,如图 4 所示。在这份测试报告中,测试员指出所实现的代码可能会导致从列表中删除重复元素,从而可能导致某些边缘测试用例失败。因此,建议从实现的代码中删除行 “lst = list (set (lst))”。程序员随后根据测试报告中的反馈删除了 “lst = list (set (lst))” 行。在最后一次交互中,测试员确认修改后的代码已经通过所有测试,满足要求,至此代码生成过程结束。



研究者还将 self-collaboration 框架应用于更复杂的实际代码项目的两个例子,分别是游戏开发和网页制作,如图 5 和图 9 所示。self-collaboration 可以生产完整的游戏逻辑和令人满意的游戏界面,对于天气预报网页的开发,也可以正确调用外部天气接口,实现所有功能。而直接代码生成则并没有覆盖所有要求的功能并且存在 bug,效果不佳。

总之,self-collaboration 框架在代码生成任务中表现出显著的性能提升,与单一角色相比,多角色团队能够更有效地处理各种问题和挑战。这种方法为自然语言处理和代码生成领域提供了新的研究方向,值得进一步探讨和优化。未来的工作可能包括对更多角色和更强大模型的探索,以及将 self-collaboration 框架应用于其他自然语言处理任务。

结论
在该工作中,研究者提出了一种 self-collaboration 框架,其目的是通过合作和交互方法来增强大模型的问题解决能力。具体而言,研究者探索了 ChatGPT 在促进基于团队的代码生成和合作方面的软件开发过程中的潜力。为此,研究者组建了一个由三个不同的 ChatGPT 角色组成的初等团队,目的是全面解决代码生成任务。为了评估 self-collaboration 框架的有效性和泛化性能,研究者针对各种代码生成基准进行了广泛实验。实验结果提供了大量证据支持 self-collaboration 框架的有效性和普适性。研究者认为,让模型能够组建自己的团队并合作完成复杂的任务是实现 AGI 的关键一步。未来该项研究技术也将直接应用于aiXcoder(一款基于代码大模型的智能化软件开发系统)的产品中。


相关文章
|
11天前
|
人工智能 小程序
【一步步开发AI运动小程序】十五、AI运动识别中,如何判断人体站位的远近?
【云智AI运动识别小程序插件】提供人体、运动及姿态检测的AI能力,无需后台支持,具有快速、体验好、易集成等特点。本文介绍如何利用插件判断人体与摄像头的远近,确保人体图像在帧内的比例适中,以优化识别效果。通过`whole`检测规则,分别实现人体过近和过远的判断,并给出相应示例代码。
|
9天前
|
存储 人工智能 自然语言处理
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
ChatMCP 是一款基于模型上下文协议(MCP)的 AI 聊天客户端,支持多语言和自动化安装。它能够与多种大型语言模型(LLM)如 OpenAI、Claude 和 OLLama 等进行交互,具备自动化安装 MCP 服务器、SSE 传输支持、自动选择服务器、聊天记录管理等功能。
74 15
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
|
5天前
|
人工智能 小程序 API
【一步步开发AI运动小程序】十七、如何识别用户上传视频中的人体、运动、动作、姿态?
【云智AI运动识别小程序插件】提供人体、运动、姿态检测的AI能力,支持本地原生识别,无需后台服务,具有速度快、体验好、易集成等优点。本文介绍如何使用该插件实现用户上传视频的运动识别,包括视频解码抽帧和人体识别的实现方法。
|
10天前
|
人工智能 小程序 UED
【一步步开发AI运动小程序】十六、AI运动识别中,如何判断人体站位?
【云智AI运动识别小程序插件】提供人体、运动及姿态检测的AI能力,本地引擎无需后台支持,具备快速、体验好、易集成等优势。本文介绍如何利用插件的`camera-view`功能,通过检测人体站位视角(前、后、左、右),确保运动时的最佳识别率和用户体验。代码示例展示了如何实现视角检查,确保用户正或背对摄像头,为后续运动检测打下基础。
|
16天前
|
人工智能 小程序 API
【一步步开发AI运动小程序】十三、自定义一个运动分析器,实现计时计数02
本文介绍如何利用“云智AI运动识别小程序插件”开发AI运动小程序,详细解析了俯卧撑动作的检测规则构建与执行流程,涵盖卧撑和撑卧两个姿态的识别规则,以及如何通过继承`sports.SportBase`类实现运动分析器,适用于小程序开发者。
|
16天前
|
人工智能 小程序 API
【一步步开发AI运动小程序】十二、自定义一个运动分析器,实现计时计数01
随着AI技术的发展,AI运动APP如雨后春笋般涌现,如“乐动力”、“天天跳绳”等,推动了云上运动会、线上健身等热潮。本文将指导你从零开始开发一个AI运动小程序,利用“云智AI运动识别小程序插件”,介绍运动识别原理、计量方式及运动分析器基类的使用,帮助你在小程序中实现运动计时和计数功能。下篇将继续探讨运动姿态检测规则的编写。
|
6天前
|
人工智能 小程序 数据处理
uni-app开发AI康复锻炼小程序,帮助肢体受伤患者康复!
近期,多家康复机构咨询AI运动识别插件是否适用于肢力运动受限患者的康复锻炼。本文介绍该插件在康复锻炼中的应用场景,包括康复运动指导、运动记录、恢复程度记录及过程监测。插件集成了人体检测、姿态识别等功能,支持微信小程序平台,使用便捷,安全可靠,帮助康复治疗更加高效精准。
|
12天前
|
人工智能 小程序 JavaScript
【一步步开发AI运动小程序】十四、主包超出2M大小限制,如何将插件分包发布?
本文介绍了如何从零开始开发一个AI运动小程序,重点讲解了通过分包技术解决程序包超过2M限制的问题。详细步骤包括在uni-app中创建分包、配置`manifest.json`和`pages.json`文件,并提供了分包前后代码大小对比,帮助开发者高效实现AI运动功能。
|
17天前
|
人工智能 小程序 开发者
【一步步开发AI运动小程序】十一、人体关键点跳跃追踪
本文介绍如何利用“云智AI运动识别小程序插件”开发AI运动小程序,涵盖云上运动会、健身打卡等热门应用场景。通过示例代码展示如何调用插件功能,实现动作追踪与分析,助力开发者快速上手。
|
17天前
|
存储 人工智能 并行计算
【AI系统】算子开发编程语言 Ascend C
本文详细介绍了昇腾算子开发编程语言 Ascend C,旨在帮助开发者高效完成算子开发与模型调优。Ascend C 原生支持 C/C++标准,通过多层接口抽象、自动并行计算等技术,简化开发流程,提高开发效率。文章还探讨了并行计算的基本原理及大模型并行加速策略,结合 Ascend C 的 SPMD 编程模型和流水线编程范式,为读者提供了深入理解并行计算和 AI 开发的重要工具和方法。
33 2

热门文章

最新文章

下一篇
DataWorks