
CHATDEV,一家由人工智能代理开发软件的虚拟公司!
三个要点
✔️ 成立了 CHATDEV,这是一家虚拟软件技术公司,人工智能代理在不同岗位工作
✔️ 提出了聊天链,这是一个将软件开发过程分解为多个子任务的框架
✔️ 实验表明,CHATDEV 的软件开发过程中的效率和成本效益得到了证明
Communicative Agents for Software Development
written by Chen Qian, Xin Cong, Cheng Yang, Weize Chen, Yusheng Su, Juyuan Xu, Zhiyuan Liu, Maosong Sun
(Submitted on 16 Jul 2023 (v1), last revised 18 Jul 2023 (this version, v2))
Comments: 25 pages, 9 figures, 2 tables
Subjects: Software Engineering (cs.SE); Computation and Language (cs.CL); Multiagent Systems (cs.MA)
code:
本文所使用的图片要么来自论文、介绍性幻灯片,要么是参考这些图片制作的。
介绍
大型语言模型(LLMs)在问题解答、机器翻译和代码生成等一系列任务中表现出了卓越的性能,而通过生成多个人工智能代理来模拟人类行为的研究最近也出现了热潮。
在这一背景下,由于软件开发的核心--代码和文档--都可以被视为语言(即字母序列),人们探索了使用 LLM 降低软件开发成本的方法。
另一方面,在使用 LLM 生成软件时也出现了以下问题
- 这可能会导致函数实现不完整、依赖关系缺失、潜在错误等,以及停顿(LLM 输出似是而非的谎言),例如在问题解答任务中。
- 来自他人的检查,如代码审查和对建议的反馈,在软件开发中是必不可少的,而缺少第三方的检查则是一个重大风险
本文针对上述问题,建立了一个虚拟软件技术公司 CHATDEV,并建立了一个基于程序员、测试工程师、美术设计师等不同职位的生成代理之间相互交流的开发流程,从而实现了一致的软件开发。本文将介绍如何实现软件开发。
CHATDEV
如上所述,有人指出,使用 LLM 直接生成整个软件系统,以及在问题解答等任务中发现的光晕现象,可能会导致各种问题。
本文作者认为,造成这些问题的原因是任务不具体和缺乏相互确认,因此建议创建一个虚拟软件技术公司 CHATDEV,如下图所示。
CHATDEV 由不同身份的代理组成,如程序员、测试工程师、美术设计师等。通过聊天进行有效的交流和验证,以开发所需的软件,包括
CHATDEV 采用被广泛采用的瀑布模型作为软件开发的生命周期模型,并将软件开发过程分为四个阶段:设计、编码、测试和文档编制,但在实际的软件开发过程中,每个阶段的多个职位代理之间的有效沟通是必不可少的。在软件开发过程中,每个阶段多个岗位的代理之间的有效沟通至关重要。
为了实现这种顺畅的通信,本文提出了一种架构,将聊天链中每个阶段的任务分解为多个更小的任务。
聊天链
聊天链由两个部分组成,即阶段级和聊天级,如下图所示。
阶段级采用瀑布模型,将软件开发过程分为四个连续的阶段(设计、编码、测试和文档)。
在聊天层,每个阶段都被进一步细分为称为原子聊天的聊天,在这些聊天中,两个代理之间会进行以任务为导向的角色扮演,以促进协作交流。
通过这种结构,代理可以在每次聊天中进行交流,以完成特定的子任务,从而获得所需的输出。
接下来,将分别解释四个阶段--设计、编码、测试和记录。
设计
如下图所示,设计阶段是 CHATDEV 接收来自人类客户的第一个想法的阶段,包括三个功能:角色专业化、记忆流和自我反思。
角色专业化将代理分配到 CEO(首席执行官)、CPO(首席产品官)和CTO(首席技术官)三个职位。在此基础上,每个代理都被分配到与其指定职位相一致的职位。
记忆流(Memory Stream)是现有研究中提出的一项功能,它将成为一种机制,用于保存代理之前的通信记录,并为后续决策提供支持。
自我反思可以作为一种机制,解决尽管结论满足了预先设定的终止条件(例如为这项任务确定合适的编程语言),但交流仍未结束的问题。
在此机制中,会创建一个与聊天代理分开的伪发问代理,伪发问代理会记录并总结迄今为止的通信历史,并通过提问得出满足终止条件的结论,从而提示代理终止通信。伪发问器记录并总结迄今为止的通信历史,并向代理提问,从而得出满足终止条件的结论。
在这些机制的基础上,各职位的代理进行讨论,以确定软件的详细部分,如下图所示。
编码
编码阶段将代理分配到三个职位:首席技术官(CTO)、程序员和美术设计师。
然后,首席技术官根据前一阶段确定的设计,使用标记符格式向程序员认可软件系统的实施,程序员则生成相应的代码。
为了处理复杂的软件系统,CHATDEV 使用 Python 等面向对象的编程语言,而程序员则使用 Git 相关命令管理项目。
测试
即使是人类程序员,他们编写的初始代码也很少不包含错误,为了处理这些错误,他们必须分析和研究代码执行的结果,并纠正执行错误。
为了完成这一系列任务,Testing pahse 将代理分配到三个职位:程序员、审查员和测试员。
该过程包括两项任务:同行评审和系统测试,其中同行评审通过检查源代码来发现潜在问题,而系统测试则通过程序员使用解释器进行的测试来验证软件的执行情况。
记录
经过设计、编码和测试阶段后,CHATDEV 将代理分配到CEO( 首席执行官)、CPO(首席产品 官)、CTO( 首席技术官)和程序员这四个职位,如下图所示。如下图所示,CHATDEV 将 CEO(首席执行官)、CPO(首席产品官)、CTO(首席技 术官)和程序员这四个职位分配给代理人,并让他们制作软件规格和用户手册等相 关文档。
首席技术官指导程序员根据环境进行设置,并让他们创建需求.txt等文档;同样,首席执行官指导需求和系统设计,并让首席采购干事创建用户手册。
用户手册包含有关软件的技术架构、安装程序和功能的全面信息,该文档和手册允许人类用户建立自己的环境,并使用适当的解释器实际运行软件。文档和手册允许人类用户建立自己的环境,并使用适当的解释器实际运行软件。
实验
本文在以下条件下进行了实验,以证明使用 CHATDEV 进行软件开发的有效性
- 用于大规模语言模型的 ChatGPT gpt3.5-turbo-16k
- 在编码阶段,编码完成前最多允许尝试五次
- 在测试阶段,最多允许五次聊天提出修改意见,并对软件系统进行测试
- 对于基于 Python 的系统,使用 Python 3.8.16 作为解释器进行测试
在此条件下,对 CHATDEV 生成的软件系统进行了统计分析,以收集 CHATDEV 开发的全面信息,包括文件结构、代码复杂性和版本控制。
分析结果如下图所示。
这些结果中特别值得注意的是CHATDEV 开发的软件的代码行数,这表明他们倾向于创建代码行数相对较少的软件,通常在 39 行至 359 行之间,平均为 131.26 行。
这可能与面向对象编程语言的设计有关,可以推断代码的重复使用减少了冗余。
此外,当用户指定的任务不那么具体时,CHATDEV 生成的源代码往往较短,这表明给他们更明确、更具体的任务可能会鼓励他们按照自己的要求生成代码。
从表中还可以读出,软件版本平均更新 13.23 次,这表明源代码平均被修改了约 13 次,反映了在整个软件开发过程中,代码的修改是不断重复的。这反映了在整个软件开发过程中,代码是通过代理之间的相互通信反复修改的。
下图显示了 CHATDEV 五向游戏实验的开发过程。
最左边的屏幕代表的是在没有图形用户界面的情况下制作的软件,它只能通过命令终端进行游戏,设计很土气,但程序员的代理结合了图形用户界面的设计,设计者添加了图形,使其视觉效果更清晰、更吸引人。很显然,该游戏在视觉上是清晰而有吸引力的。
此外,事实证明CHATDEV具有足够的灵活性,即使用户对设计代理的设计不满意,也可以在软件完成后对其进行定制。
摘要
情况如何?在这篇文章中,我们建立了一家虚拟软件技术公司 CHATDEV,这是一篇通过基于不同职位的生成代理(如程序员、测试工程师、美术设计师等)之间相互交流的开发流程来实现一致的软件开发的论文。该论文介绍了以下内容。
尽管实验结果证明了使用 CHATDEV 进行软件开发的有效性,但仍存在以下问题
- 研究发现,大规模语言模型存在固有的偏差,生成的程序员代码模式有可能与人类程序员的思维不一致。
- 恶意用户有可能利用这一框架。
另一方面,通过整合其他领域的技术,也可以进一步提高软件开发的效率,例如可以通过整合强化学习来优化任务解决策略等,因此未来的进展备受关注。
本文所介绍的结构和实验结果的详情可参见本文,有兴趣者可参阅。
与本文相关的类别