北大用ChatGPT组建了个开发团队:大模型分饰多角色,协同完成软件开发任务

本文主要是介绍北大用ChatGPT组建了个开发团队:大模型分饰多角色,协同完成软件开发任务,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

9393266ce62fe597e46836519bb3c014.jpeg

来源:北京大学李戈教授的研究团队

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

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

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

6eb4204e8371c6db493040c7bb1561f4.jpeg

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

论文发表时间:2023/4/15

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

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

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

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

82cd45f58280d2762d192d53c1f89b63.jpeg

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

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

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

Self-collaboration 框架

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

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

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

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

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

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

合作部分可以形式化为:

ba26a671221432d3a82a2af09b8482a6.jpeg

其中 d74ea502404595e72a9a83225883deab.jpeg是阶段2f397cd0af6c41b0ccfb04362d7f423a.jpeg的输出,fc6d36f3b2f505697f3aa23baf0a7e17.jpeg表示 c4e102bd66760392f9e0a55a8a553951.jpeg前提阶段的输出,c1400836bb7e5e0dc8154df1483e7d81.jpeg表示 e02626de4fb5b2a327fa9e02bcd6a21b.jpeg对应的角色。请注意,如果阶段 7dedbf521ffa4c4deb00aae49909e196.jpeg之间的关系不是线性关系,self-collaboration 框架可以并行化。计算 8f7622ab535946f0504b9f2189dcbb87.jpeg被视为合作,其中角色 04a2b5cc028b9af8da7e5c00ef1854a6.jpeg 与每个前面阶段的角色合作生成 1177b13775ab2a526197b79cf2863c3f.jpeg。输出 y 随着阶段 ee8de01c09d4c4d1e57369129bb14bf5.jpeg的进展迭代更新:

dc407327b415d67413693e69c1ad594c.jpeg

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

7b1ee8a3fc9544a8f8a9e462a9c80c11.jpeg

实例化

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

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

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

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

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

80a48d012c6b968b0a464b95f3e791ab.jpeg

实验结果

e496dbd1ef54b5632df8374d8e1064d8.jpeg

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

a15c151af9b7d12f1174cb342e7be455.jpeg

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

e7b0b9bd1f1f95eb7701be46156618f9.jpeg

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

5daf27b5a2d279b876924f496d756d2b.jpeg

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

5a3397d3bc550d23b727e72a37d69ec9.jpeg

0eb51c6630543ef2a3d9a7be17f1d36f.jpeg

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

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

结论

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

未来智能实验室的主要工作包括:建立AI智能系统智商评测体系,开展世界人工智能智商评测;开展互联网(城市)大脑研究计划,构建互联网(城市)大脑技术和企业图谱,为提升企业,行业与城市的智能水平服务。每日推荐范围未来科技发展趋势的学习型文章。目前线上平台已收藏上千篇精华前沿科技文章和报告。

  如果您对实验室的研究感兴趣,欢迎加入未来智能实验室线上平台。扫描以下二维码或点击本文左下角“阅读原文”

7825a5c867bd93061ae4a1f23a4a2380.jpeg

这篇关于北大用ChatGPT组建了个开发团队:大模型分饰多角色,协同完成软件开发任务的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/532978

相关文章

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件

基于Python开发一个有趣的工作时长计算器

《基于Python开发一个有趣的工作时长计算器》随着远程办公和弹性工作制的兴起,个人及团队对于工作时长的准确统计需求日益增长,本文将使用Python和PyQt5打造一个工作时长计算器,感兴趣的小伙伴可... 目录概述功能介绍界面展示php软件使用步骤说明代码详解1.窗口初始化与布局2.工作时长计算核心逻辑3

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1

如何基于Python开发一个微信自动化工具

《如何基于Python开发一个微信自动化工具》在当今数字化办公场景中,自动化工具已成为提升工作效率的利器,本文将深入剖析一个基于Python的微信自动化工具开发全过程,有需要的小伙伴可以了解下... 目录概述功能全景1. 核心功能模块2. 特色功能效果展示1. 主界面概览2. 定时任务配置3. 操作日志演示

JavaScript实战:智能密码生成器开发指南

本文通过JavaScript实战开发智能密码生成器,详解如何运用crypto.getRandomValues实现加密级随机密码生成,包含多字符组合、安全强度可视化、易混淆字符排除等企业级功能。学习密码强度检测算法与信息熵计算原理,获取可直接嵌入项目的完整代码,提升Web应用的安全开发能力 目录