ChatDev: 大语言模型多智能体协作式软件开发

ChatDev相当于用Chat形式实现Dev软件开发的目的。在有机物理系统和有机生物系统以及人类社会都存在涌现的现象,由许多小实体组成的大实体,这个大实体通常具有小实体额外的特性。比如可以看到水分子组成雪花,不管是结构层面还是物理功能层面都有新的突破。其次在沙丁鱼组成沙丁鱼鱼群层面会组成类似大的生物,使得天敌能够被吓唬,以及人类世界的表演也达到了单个个体达到不了的目的。

所以也能看到堆积个体成为大的实体,今年也能够看到一些涌现的行为,一个神经网络参数逐渐增大,能够达成在某一个基点情况下性能突飞猛进的现象。也在思考会不会发生第二层涌现,正如通过大模型组成大模型的群体,通过大模型群体做一个共同的任务协作,有没有可能达成一个大模型或者一个智能体,达成不了的能力。考虑到人或者说AI有没有可能通过新的交互形式或者信息传递的形式,使得他们传递效率更高。这里考虑到人类所说的语言,其实是一种非常直接的信息传递方式,结合多个大语言模型组成的(Agent)智能群体使得他们通过语言的交互形式达成想让它们做的任务,比如软件开发。软件开发大概会分为自然语言以及编程语言,实际上软件开发过程确实需要基于自然语言的需求做理解和设计,有了这些设计之后做编程语言的生成以及代码编写和修改。

涉及单个只能体需要:记忆能力、规划能力、工具、环境感知能力。多智能体系统,需要有群体目标,如何对多个智能体做组织管理,如何对他们做动态的路由,以及谁先谁后的问题。

基于大语言模型的多智能体大概分为两类:一个类是社会模型具体的工作,像Smallville小镇*用25个智能体在小镇中去模拟每天的生活情况,可以自主做一些规划,可以上课或社交。是ChatDev,通过多智能体帮助人类完成某些事情。* Smallville小镇:在斯坦福论文《Generative Agents: Interactive Simulacra of Human Behavior》中,研究者们成功地构建了一个名为Smallville的虚拟小镇,25个AI智能体在小镇上生活,每个小镇居民都有独特的个性和背景故事。

具体选择了软件开发这样的场景,可以看到大概有四个主要的步骤、一个是设计和分析,需要分析人类给出的指令,到底应该设计成什么样。比如设计一个标准五子棋游戏,智能体需要讨论得出结论这句话应该生成一个桌面应用还是生成PPT,或是者生成一个网页,这是它去理解语言信息。其次有了设计之后,会有一个编码环节,编码环节之后有测试环节,最后基于人类给定的需求和智能体完成的代码,文档撰写生成用户手册,使得外层的用户可以拿到软件的源代码,可以直接安装使用。

做智能体群体、软件设计或编码、测试或者文档撰写,涉及到多个智能体的信息交互,包括语言以及程序。我们提出一个交流链的组织形式,相当于是通过链式结构把每一个链格节点会涉及到两个Agent的沟通,总体以一个链的形式把整个Agent完成事件流程编排起来。比如输入任务,开始这两个智能体会决定软件的形态是什么,可以是PPT、桌面形式、PDF等等,这是广义的软件。之后会决定编程语言,到底是使用Java、python还是C++,把编程语言决定出来,最后会研讨代码。代码是可以加界面,所以有一个设计师,最后有一些评审,对代码提出一些需要改动的BUG,会提示给程序员,程序员做相应的修改,最后会有文档和手册的生成。

每个链的节点涉及到两个智能体的沟通,通过角色化的形式,每个人虚拟化成一个角色,比如虚拟Agent在每一次回复需要感知到之前所有上下文,才能够实现这种上下文感知的QA。最后一个阶段,有时候养的这些智能体不太听话,可能一直在说你好,也可能一直说再见,外层框架需要对话停止,不是针对任务解决过程的聊天记录,需要做自我反思,具体想表达的任务结论抽出来,这是三个主要的机制。这些机制基本上可以将整个链串联起来,形成软件开发的技术。

软件开发具体的生成时间,大概是409秒的程度。通过智能体Agent完成代码评审,自主提出的一些修改的问题,这是完全没有外部给它们灌输的。可以看到它会自己发现这个问题,比如模块是没有发现的,或者有一些变量的属性是不对的等问题,这些都是通过智能体自主发现,并且修改的。

可能目前软件生成形态和大家想得多少有一些理想上的区别,因为确实目前只能做到这么大的规模,这也是一开始提到的涌现,如何继续做这些研发,使得它们能力层面会发生质的突变,包括代码逻辑。

目前经过Internet,还有Things,未来会实现Internet of Agents,相当于每个人有自己的Agent,或者Agent团队,它能帮你做事情。在这样的情况下,比如北京下大雪,有专家不能在场,他的Agent可以派来现场参会分享观点,把别人和它交流的一些问题再带回去给教授或专家。其实Agent相当于是一个专家或岗位的孪生,未来也期待有这样的形式,实现在软件开发领域有一些测试员孪生、程序员孪生、CEO孪生,先是辅助性做一些事情,更长远的未来有可能会自主把这些事情做了。