Press "Enter" to skip to content

ChatDev 软件开发的交流代理

软件开发行业是一个经常依赖咨询和直觉的领域,其决策策略复杂而微妙。此外,软件的开发、维护和运行需要一种纪律严明和有条不紊的方法。软件开发人员常常基于直觉而不是咨询来做出决策,这取决于问题的复杂性。为了提高软件工程的效率,包括软件的有效性和减少开发成本,科学家正在探索使用基于深度学习的框架来解决软件开发过程中的各种任务。随着深度学习和人工智能领域的最新发展和进展,开发人员正在寻求通过在软件开发过程的不同阶段使用先进的设计来改变软件开发过程和实践。

今天,我们将讨论ChatDev,一种基于大型语言模型(LLM)的革新方法,旨在革新软件开发领域。这种范式旨在消除在开发过程的每个阶段都需要专门模型的需求。ChatDev框架利用LLM框架的能力,利用自然语言交流统一和简化关键的软件开发过程。

在本文中,我们将探讨ChatDev,一家专门从事软件开发的虚拟公司。ChatDev采用瀑布模型,将软件开发过程细分为四个主要阶段。

  1. 设计。
  2. 编码。
  3. 测试。
  4. 文档。

每个阶段都部署了一支由虚拟代理人(如代码程序员或测试人员)组成的团队,他们通过对话相互合作,产生无缝的工作流程。聊天链作为一个促进者,将开发过程的每个阶段细分为原子子任务,从而实现双重角色,允许使用上下文感知的通信提出和验证解决方案,从而使开发人员能够有效地解决指定的子任务。

ChatDev : AI Assisted Software Development

ChatDev的实用分析表明,ChatDev框架不仅在完成软件开发过程方面非常有效,而且成本效益非常高,因为它在不到一美元的成本下完成整个软件开发过程。此外,该框架不仅能够识别,而且能够消除潜在的漏洞,纠正潜在的幻觉,同时保持高效和成本效益。

ChatDev:LLM驱动的软件开发简介

传统上,软件开发行业建立在纪律严明和有条不紊的基础上,不仅用于开发应用程序,也用于其维护和运行。通常情况下,典型的软件开发过程是一个极其复杂、复杂且耗时的过程,有着较长的开发周期,因为在开发过程中涉及到多个角色,包括组织内部的协调、任务分配、代码编写、测试和最后的文档化。

最近几年,借助大型语言模型(LLM),人工智能社区在计算机视觉和自然语言处理领域取得了显著的里程碑。在“下一个单词预测”范式的训练下,大型语言模型在机器翻译、问答和代码生成等各种下游任务上都表现出了高效的性能。

尽管大型语言模型可以为整个软件编写代码,但它们存在一个重要的缺点:代码幻觉,这与自然语言处理框架面临的幻觉非常相似。代码幻觉可能包括未发现的错误、缺失的依赖和不完整的函数实现。代码幻觉有两个主要原因。

  • 缺乏任务规范:在一步生成软件代码时,不定义任务的具体内容会使LLM产生困惑,因为软件开发过程中的任务(如分析用户要求或选择首选编程语言)往往需要引导的思考,而这些高级任务在LLM处理的任务中缺少。
  • 缺乏交叉检查:在决策过程中没有进行交叉检查,会带来重大风险。

ChatDev致力于解决这些问题,并通过创建虚拟动力公司进行软件开发,建立瀑布模型并将软件开发过程细分为四个主要阶段,为LLMs提供创建现代化、有效的软件应用程序的能力。

  1. 设计。
  2. 编码。
  3. 测试。
  4. 文档。

这些阶段中的每一个都使用代码程序员或测试人员等虚拟代理团队,他们通过对话相互协作,从而实现无缝的工作流程。此外,ChatDev利用聊天链作为一个促进者,将开发过程的每个阶段分解为原子子任务,从而实现双重角色,并使用上下文感知的通信进行解决方案的提议和验证,使开发人员能够有效地解决指定的子任务。聊天链由多个节点组成,每个节点代表一个特定的子任务,这两个角色通过多轮上下文感知的讨论不仅提出了解决方案,还验证了解决方案。

在这种方法中,ChatDev框架首先分析客户的需求,生成创意,设计和实施原型系统,识别和解决潜在问题,创建吸引人的图形,解释调试信息,并生成用户手册。最后,ChatDev框架将软件与源代码、用户手册和依赖环境规范一起交付给用户。

ChatDev:架构和工作原理

现在,我们对ChatDev有了一个简要介绍,让我们来看看ChatDev框架的架构和工作原理,从Chat Chain开始。

Chat Chain

正如我们在前一节中提到的,ChatDev框架使用瀑布方法进行软件开发,将软件开发过程划分为设计、编码、测试和文档四个阶段。其中每个阶段在开发过程中都有独特的角色,它们之间需要有效的沟通,并且在确定与之互动的个体和互动的顺序时可能会面临潜在挑战。

为了解决这个问题,ChatDev框架使用Chat Chain,这是一个通用的架构,将每个阶段拆分为子原子聊天,其中每个阶段关注任务导向的角色扮演,涉及双重角色。聊天的期望输出是目标软件的重要组成部分,它是由参与开发过程的代理之间的协作和交流指令的结果实现的。聊天链范式用于中间任务解决的示例如下图所示。

ChatDev 软件开发的交流代理 四海 第2张

对于每个个体对话,指导员首先发起指令,然后引导对话向任务的完成方向发展,在此期间,助手们按照指导员提出的指令,提供理想的解决方案,并对解决方案的可行性进行讨论。指导员和代理人然后进行多轮对话,直到达成共识,并认为任务成功完成。Chat Chain为用户提供了对开发过程的透明视图,为决策提供了指引,并在发生错误时提供了调试错误的机会,使最终用户能够分析和诊断错误,检查中间输出,并在必要时介入过程。通过引入聊天链,ChatDev框架能够将注意力集中在每个具体子任务上,不仅促进代理人之间的有效协作,而且快速实现所需的输出。

设计

在设计阶段,ChatDev框架需要从人类客户获得初始的想法作为输入,这个阶段有三个预定义的角色。

  1. 首席执行官(CEO)。
  2. 首席产品官(CPO)。
  3. 首席技术官(CTO)。

然后聊天链进入角色扮演,将设计阶段分为连续的子原子聊天任务,包括编程语言(CTO和CEO)以及目标软件的模态性(CPO和CEO)。设计阶段涉及三个关键机制:角色分派或角色专业化、内存流和自我反思。

角色分派

Chat Dev框架中的每个代理人在角色扮演过程中通过特殊的消息或特殊的提示被分配一个角色。与其他对话语言模型不同,ChatDev框架仅限于在代理人之间启动角色扮演场景。这些提示用于在对话之前为代理人分配角色。

最初,教练负责首席执行官的职责并进行互动计划,而执行任务并提供所需回答的代理人负责首席产品官的职责。该框架使用“创始提示”进行角色专业化,使代理人能够有效履行自己的角色。助手和教练提示包含有关指定角色和任务、终止条件、通信协议和多种约束的重要细节,旨在防止无限循环、无信息回复和指令冗余等不良行为。

记忆流

记忆流是ChatDev框架使用的机制,它在意识到话语并进行决策的过程中维护了先前对话的全面记录。ChatDev框架使用提示来建立所需的通信协议。例如,当涉及的各方达成共识时,会出现一个满足特定格式要求的结束消息,例如(<MODALITY>:桌面应用程序)。为确保符合指定的格式,该框架会不断监视,并最终允许当前对话达到结论。

自我反思

ChatDev框架的开发人员观察到,有时候参与各方已经达成共识,但未触发预定义的通信协议。为解决这些问题,ChatDev框架引入了自我反思机制,帮助检索和提取记忆。为实施自我反思机制,ChatDev框架启动了新的聊天,列出“伪自我”作为新提问者。伪自我分析以前的对话和历史记录,并通知当前的助手,然后要求提供关于结论和需要采取行动的信息的摘要,如下图所示。

ChatDev 软件开发的交流代理 四海 第3张

通过自助机制的帮助,ChatDev助手被鼓励反思和分析其提出的决策。

编码

编码阶段中有三个预定义角色,即首席技术官(CTO)、程序员和艺术设计师。与往常一样,聊天链机制将编码阶段分为个别的亚原子任务,如生成代码(程序员和CTO)或设计图形用户界面(程序员和设计师)。然后,CTO指示程序员使用标记语言格式来实施软件系统,之后,艺术设计师提出了一个用户友好且互动的图形用户界面,该界面使用图形图标与用户进行交互,而不依赖于传统的基于文本的命令。

代码管理

ChatDev框架使用Python、Java和C++等面向对象的编程语言来处理复杂的软件系统,因为这些编程语言的模块化功能使得可以使用独立的对象,这些对象不仅有助于故障排除,还可以通过继承的概念重用对象并消除冗余。

思考指令

传统的问答方法往往会导致不相关的信息或不准确,特别是在生成代码时,提供天真的指令可能会导致大规模语言模型产生幻觉,并且可能成为一个具有挑战性的问题。为解决这个问题,ChatDev框架引入了“思考指令”机制,借鉴了思维链提示的思路。思考指令机制明确解决了指令中包含的个别问题解决思路,类似地以顺序和有组织的方式解决任务。

ChatDev 软件开发的交流代理 四海 第4张

测试

在首次尝试中编写无错误代码对于LLM和人类程序员来说都具有挑战性,而不是完全丢弃不正确的代码,程序员会分析代码以识别错误并进行更正。ChatDev框架中的测试阶段分为三个角色:程序员、测试人员和审查人员。测试过程进一步分为两个连续的亚原子任务:静态调试或同行审查(审查员和程序员)和系统测试或动态调试(程序员和测试人员)。静态调试或同行审查分析源代码以识别错误,而动态调试或系统测试通过使用解释器进行各种测试来验证软件的执行。动态调试主要侧重于黑盒测试来评估应用程序。

文档

在ChatDev框架完成设计、编码和测试阶段后,它会使用四个代理,即首席执行官(CEO)、首席技术官(CTO)、首席产品官(CPO)和程序员,为软件项目生成文档。ChatDev框架使用LLMs来借助上下文示例生成少量提示的文档。首席技术官(CTO)指示程序员提供配置环境依赖的指令,并创建一个名为“dependency requirements.txt”的文档。与此同时,首席执行官(CEO)通过首席产品官(CPO)将需求和系统设计传达给CPO,以生成产品的用户手册。

结果

软件统计

为了分析ChatDev框架的性能,开发团队对框架生成的软件应用程序进行了基于一些关键指标的统计分析,包括消耗的标记数、总对话轮数、图像资源、软件文件、版本更新等,并将结果展示在下表中。

ChatDev 软件开发的交流代理 四海 第5张

时间分析

为了检查ChatDev对不同请求提示的软件生产时间,开发人员还进行了时间分析,不同提示的开发时间差异反映了所分配任务的清晰度和复杂性的不同,并将结果展示在下图中。

ChatDev 软件开发的交流代理 四海 第6张

案例研究

以下图示展示了ChatDev开发一款五子棋游戏。

ChatDev 软件开发的交流代理 四海 第7张

最左边的图示展示了框架创建的基本软件,没有使用任何图形用户界面(GUI)。可以明显看到,没有图形用户界面的应用程序提供了有限的交互性,用户只能通过命令终端进行游戏。下一个图示展示了使用GUI创建的更具视觉吸引力的游戏,提供了更好的用户体验和增强的互动性,用户可以更加享受游戏环境。设计代理随后创建额外的图形,进一步增强游戏的可用性和美观性,而不影响任何功能。然而,如果人类用户对设计生成的图像不满意,他们可以在ChatDev框架完成软件后替换图像。ChatDev框架提供的手动替换图像的灵活性,允许用户根据自己的喜好定制应用程序,提高交互性和用户体验,而不影响软件的功能。

ChatDev 软件开发的交流代理 四海 第8张

最后的思考

在本文中,我们介绍了ChatDev,一种基于LLM(大型语言模型)的创新范式,旨在通过在开发过程的每个阶段中消除对专用模型的需求,从而革新软件开发领域。ChatDev框架旨在通过使用自然语言交流统一和简化关键的软件开发流程,借助LLM框架的能力。ChatDev框架使用聊天链机制将软件开发过程分解为顺序的亚原子任务,从而实现精细化关注,并促进每个亚原子任务的预期输出。

Leave a Reply

Your email address will not be published. Required fields are marked *