admin管理员组

文章数量:1568355

摘要

基于大语言模型的多代理系统在解决自动化问题获得了显著进展。现有的基于大语言模型的多智能体系统已经可以解决简单的对话任务,但是对于更复杂的任务则因链式使用LLM导致的级联幻觉而导致逻辑不一致,从而变得复杂。在此,我们介绍MetaGPT,这是一种创新的元编程框架,将高效的人类工作流程引入基于LLM的多智能体协作中。MetaGPT将标准操作程序 (SOP) 编码到提示序列中,从而实现更简化的工作流程,使具有类人领域专业知识的智能体能够验证中间结果并减少错误。MetaGPT采用装配线范式,将不同角色分配给各种智能体,能够高效地将复杂任务分解为多个智能体共同完成的子任务。在协作软件工程基准测试中,MetaGPT比以前的基于聊天的多智能体系统生成更连贯的解决方案。我们的项目可在链接: MetaGPT中找到。

介绍

利用大语言模型 (LLM) 的自主智能体为提升和复制人类工作流程提供了有前景的机会。然而,在实际应用中,现有系统倾向于过于简化复杂性。他们在实现有效、连贯和准确的问题解决过程时表现欠佳,特别是在需要有意义的协作互动时。
通过广泛的协作实践,人类在各个领域开发了广为接受的标准操作程序 (SOP)。这些SOP在支持任务分解和有效协调方面起着关键作用。此外,SOP概述了每个团队成员的职责,同时为中间输出建立了标准。定义明确的SOP改进了任务执行的一致性和准确性,使其符合定义的角色和质量标准。例如,在软件公司中,产品经理通过标准化结构分析竞争和用户需求,创建产品需求文档 (PRD),以指导开发过程。
受这些理念启发,我们设计了一个有前景的基于GPT的元编程框架,称为MetaGPT,它显著受益于SOP。与其他不同,MetaGPT要求智能体生成结构化输出,例如高质量的需求文档、设计工件、流程图和接口规范。使用中间结构化输出显著提高了目标代码生成的成功率。更形象地说,在MetaGPT模拟的公司中,所有员工遵循严格和简化的工作流程,所有的交接必须符合某些既定标准。这减少了LLM之间闲聊造成的幻觉风险,特别是在角色扮演框架中,如:“嗨,你好吗?”——Alice(产品经理);“很好!你吃午饭了吗?”——Bob(架构师)。

受益于SOP,MetaGPT提供了一种有前景的元编程方法。在这种情况下,我们采用元编程的概念,即“编程到编程”,与更广泛的元学习和“学习到学习”领域相对比。
文档、设计工件、流程图和接口规范的使用显著提高了目标代码生成的成功率。更形象地说,在MetaGPT模拟的公司中,所有员工遵循严格和简化的工作流程,所有的交接必须符合某些既定标准。这减少了LLM之间闲聊造成的幻觉风险,特别是在角色扮演框架中,如:“嗨,你好吗?”——Alice(产品经理);“很好!你吃午饭了吗?”——Bob(架构师)。
受益于SOP,MetaGPT提供了一种有前景的元编程方法。在这种情况下,我们采用元编程的概念,即“编程到编程”,与更广泛的元学习和“学习到学习”领域相对比。
这种元编程的概念还包括了早期的努力,如CodeBERT以及最近的项目如CodeLlama和WizardCoder。然而,MetaGPT作为一种独特的解决方案,通过一个组织良好的专业化智能体小组实现高效的元编程。每个智能体都有特定的角色和专业知识,遵循一些既定标准。这允许在运行时自动进行需求分析、系统设计、代码生成、修改、执行和调试,突显了基于智能体的技术如何增强元编程。
为了验证MetaGPT的设计,我们使用了公开可用的HumanEval和MBPP进行评估。在代码生成基准测试中,MetaGPT在Pass@1中分别达到了85.9%和87.7%的新最高水平。与其他用于创建复杂软件项目的流行框架(如AutoGPT、LangChain、AgentVerse和ChatDev)相比,MetaGPT在处理更高水平的软件复杂性和提供广泛功能方面也表现出色。值得注意的是,在我们的实验评估中,MetaGPT实现了100%的任务完成率,展示了我们设计的鲁棒性和高效性(时间和Token成本)。
我们的贡献总结如下:

  • 我们引入了MetaGPT,这是一种基于LLM的多智能体协作的元编程框架。它非常方便和灵活,具有明确的功能,如角色定义和消息共享,使其成为开发基于LLM的多智能体系统的有用平台。
  • 我们创新地将类人SOP整合到MetaGPT的设计中,显著增强了其鲁棒性,减少了基于LLM的智能体之间无效的协作。此外,我们引入了一种新的执行反馈机制,在运行时调试和执行代码,显著提升了代码生成质量(例如,在MBPP上绝对提高了5.4%)。
  • 我们在HumanEval和MBPP上达到了最新的技术水平。大量结果有力地验证了MetaGPT,表明它是开发基于LLM的多智能体系统的一个有前景的元编程框架。

2 相关工作

自动编程

自动编程的根源可以追溯到上个世纪。1969年,Waldinger和Lee引入了“PROW”,一个设计用于接受用谓词演算编写的程序规格、生成算法并创建LISP实现的系统。Balzer和Soloway在1980年代致力于推进自动编程并提出了实现它的潜在方法。近期的方法使用自然语言处理 (NLP) 技术。自动编程已经发展成为一个提供付费功能的行业,例如Microsoft Copilot。最近,基于LLM的智能体在自动编程开发中取得了进展。其中,ReAct和Reflexion利用链式思维提示生成推理轨迹和行动计划。这些工作展示了ReAct风格的推理循环作为增强自动编程的设计范式的有效性。此外,ToolFormer可以通过简单的API学习如何使用外部工具。与我们的工作最相关的研究由Li等人提出,他们提出了一种简单的角色扮演框架,涉及扮演不同角色的智能体之间的交流。Qian等人利用多个智能体进行软件开发。尽管现有论文提高了生产力,但它们未能充分利用具有结构化输出格式的有效工作流程。这使得处理复杂的软件工程问题变得更加困难。

基于LLM的多智能体框架

最近,基于LLM的自主智能体在工业界和学术界获得了巨大的兴趣。许多工作通过整合多个智能体之间的讨论提高了LLM的问题解决能力。Stable-Alignment通过在沙盒中与LLM智能体进行交互,达成价值判断共识来创建指令数据集。其他工作则关注社会现象。例如,生成式智能体创建了一个由25个智能体组成的小镇,用于研究语言互动、社会理解和集体记忆。在自然语言为基础的心智社会 (NLSOM) 中,具有不同功能的智能体通过多轮“头脑风暴”解决复杂任务。Cai等人提出了一种通过将大模型作为工具制造者和小模型作为工具使用者相结合的成本降低模型。一些工作强调与规划和策略相关的合作与竞争,另一些工作提出了基于LLM的经济。在我们的实现中,我们观察到多智能体合作的几个挑战,例如保持一致性和避免无效循环。这促使我们专注于在软件开发中应用高级概念如标准操作程序到多智能体框架。

3 MetaGPT: 一个元编程框架

MetaGPT是一个用于基于LLM的多智能体系统的元编程框架。第3.1节解释了在该框架中角色专业化、工作流程和结构化沟通,并说明了如何在SOP的背景下组织多智能体系统。第3.2节介绍了一种增强角色沟通效率的通信协议。我们还实现了结构化的通信接口和一个有效的发布-订阅机制。这些方法使智能体能够从其他角色和环境中获得方向性信息。最后,第3.3节介绍了可执行反馈——一种在运行时进一步提高代码生成质量的自我纠正机制。

3.1 标准操作程序中的智能体

角色专业化

明确的角色专业化能够将复杂的工作分解为更小、更具体的任务。解决复杂任务或问题通常需要具有多种技能和专长的智能体的协作,每个智能体都为特定问题贡献专业化的输出。
在一家软件公司中,产品经理通常进行业务导向的分析并得出见解,而软件工程师则负责编程。我们在我们的软件公司中定义了五个角色:产品经理、架构师、项目经理、工程师和质量保证工程师,如图1所示。在MetaGPT中,我们为每个角色指定了智能体的档案,其中包括他们的名字、档案、目标和约束。我们还初始化了每个角色的具体上下文和技能。例如,产品经理可以使用网络搜索工具,而工程师可以执行代码,如图2所示。所有智能体都遵循Yao等人(2022)描述的React风格行为。每个智能体都监控环境(即MetaGPT中的消息池)以发现重要的观察结果(例如,来自其他智能体的消息)。这些消息可以直接触发行动或协助完成任务。

智能体之间的工作流程

通过定义智能体的角色和操作技能,我们可以建立基本的工作流程。在我们的工作中,我们遵循软件开发中的SOP,使所有智能体能够按顺序工作。
具体来说,如图1所示,在获得用户需求后,产品经理进行详细分析,制定包含用户故事和需求池的详细PRD。这是初步的功能分解。然后,结构化的PRD会传递给架构师,架构师将需求转化为系统设计组件,如文件列表、数据结构和接口定义。一旦系统设计中包含了这些信息,它就会被定向给项目经理进行任务分配。工程师们按照指定的类和函数执行(如图2详细描述)。在接下来的阶段,质量保证工程师制定测试用例以实施严格的代码质量。在最后一步,MetaGPT生成一个精心制作的软件解决方案。我们提供了一个详细的示意图(图3)和一个具体实例(附录B)展示MetaGPT中的SOP工作流程。

3.2 通信协议

结构化通信接口

大多数当前基于LLM的多智能体框架利用不受限制的自然语言作为通信接口。然而,尽管自然语言具有多功能性,但问题来了:纯自然语言通信是否足以解决复杂任务?例如,在电话游戏(或中文悄悄话)中,经过几轮通信后,原始信息可能会被极大地扭曲。
受人类社会结构的启发,我们提出使用结构化通信来规范智能体的通信。我们为每个角色建立了一个模式和格式,并要求个体根据其特定角色和上下文提供必要的输出。如图3所示,架构师智能体生成两个输出:系统接口设计和序列流程图。这些包含系统模块设计和交互序列,是工程师的重要交付物。与ChatDev不同,MetaGPT中的智能体通过文档和图表(结构化输出)而非对话进行通信。这些文档包含所有必要的信息,防止了无关或缺失的内容。

发布-订阅机制

在协作中共享信息至关重要。例如,架构师和工程师经常需要参考PRD。然而,如前人所述,每次一对一地传达这些信息可能会使通信拓扑变得复杂,导致效率低下。
为了解决这个问题,一个可行的方法是将信息存储在全局消息池中。如图2(左)所示,我们引入了一个共享消息池,允许所有智能体直接交换消息。这些智能体不仅在池中发布结构化消息,还可以透明地访问来自其他实体的消息。任何智能体都可以直接从共享池中检索所需信息,消除了询问其他智能体并等待响应的需要,从而提高了通信效率。
与每个智能体共享所有信息可能导致信息过载。在任务执行期间,智能体通常希望只接收与任务相关的信息,避免被无关细节分心。有效的信息管理和传播在其中起着关键作用。我们提供了一个简单而有效的解决方案——订阅机制(见图2(左))。智能体利用角色特定的兴趣来提取相关信息,而不是依赖对话。它们可以根据自己的角色档案选择要关注的信息。在实际实施中,智能体在接收到所有前置依赖项后才会激活其动作。如图3所示,架构师主要关注产品经理提供的PRD,而质量保证工程师的文件可能不太重要。

3.3 带有可执行反馈的迭代编程

在日常编程任务中,调试和优化过程起着重要作用。然而,现有方法通常缺乏自我纠正机制,导致代码生成不成功。之前的工作引入了不可执行的代码审查和自我反思,但它们在确保代码可执行性和运行时正确性方面仍面临挑战。
我们的初期MetaGPT实现由于LLM幻觉(Manakul等,2023)在审查过程中忽略了某些错误。为克服这一问题,在初始代码生成后,我们引入了一种可执行反馈机制,以迭代地改进代码。更具体地说,如图2所示,工程师根据最初的产品需求和设计编写代码。这使得工程师能够利用其自身的历史执行和调试记忆不断改进代码。为了获取更多信息,工程师编写并执行相应的单元测试用例,随后接收测试结果。如果满意,则启动额外的开发任务;否则,工程师在继续编程之前调试代码。这一迭代测试过程将持续到测试通过或达到最大重试次数(3次)。

4 实验

4.1 实验设置

数据集 我们使用了两个公共基准数据集HumanEval和MBPP,以及一个自生成的更具挑战性的软件开发基准数据集SoftwareDev:

  1. HumanEval 包含164个手写编程任务。这些任务包括函数规范、描述、参考代码和测试。
  2. MBPP 包含427个Python任务。这些任务涵盖了核心概念和标准库功能,并包括描述、参考代码和自动化测试。
  3. SoftwareDev 是一个包含70个软件开发任务代表性例子的集合,每个任务都有自己的任务提示(见表5)。这些任务的范围多种多样(见图5),如小游戏、图像处理算法、数据可视化。它们为真实的开发任务提供了一个强大的测试平台。与之前的数据集不同(Chen等,2021a;Austin等,2021),SoftwareDev更加关注工程方面。在比较中,我们随机选择七个代表性任务进行评估。
    评估指标 对于HumanEval和MBPP,我们遵循Chen等人(2021a)和Dong等人(2023)提出的无偏版本的Pass @k,以评估生成代码的功能准确性:
    Pass @k = E Problems [ 1 − ( n − c k ) ( n k ) ] \text{Pass @k} = \mathbb{E}_{\text{Problems}} \left[ 1 - \frac{\binom{n-c}{k}}{\binom{n}{k}} \right] Pass @k=EProblems[1(kn)(knc)]
    对于SoftwareDev,我们优先考虑实际用途,通过人工评估(A,E)或统计分析(B,C,D)评估性能:
  • 可执行性(A):该指标对代码进行从1(失败/不可运行)到4(完美)的评分。“1”代表不可运行,“2”代表可运行但不完美,“3”代表接近完美,“4”代表完美代码。
  • 成本(B):成本评估包括(1)运行时间,(2)Token使用量,(3)费用。
  • 代码统计(C):包括(1)代码文件,(2)每个文件的代码行数,(3)总代码行数。
  • 生产力(D):基本上定义为Token使用量除以代码行数,指的是每行代码的Token消耗。
  • 人工修订成本(E):通过确保代码顺利运行所需的修订次数来量化,指示人为干预的频率,如调试或导入包。

基线方法 我们将我们的方法与最近在代码生成领域的特定领域LLM进行比较,包括AlphaCode、Incoder、CodeGeeX、CodeGen、CodeX和CodeT,以及通用领域的LLM,如PaLM和GPT-4。基线结果(如Incoder、CodeGeeX)由Dong等人(2023)提供。
我们修改了MetaGPT中的某些基于角色的提示,以生成适合目标问题的代码(例如,为HumanEval和MBPP生成函数而不是类)。在SoftwareDev基准测试中,我们提供了MetaGPT、AutoGPT、LangChain与Python Read-Eval-Print Loop (REPL) 工具、AgentVerse和ChatDev之间的全面比较。

4.2 主要结果


图4表明,MetaGPT在HumanEval和MBPP基准测试中表现优于所有前述方法。当MetaGPT与GPT-4合作时,与GPT-4相比,它在HumanEval基准测试中的Pass @k显著提高。在这两个公共基准测试中,MetaGPT分别达到了85.9%和87.7%。此外,如表1所示,MetaGPT在几乎所有指标上都优于在具有挑战性的SoftwareDev数据集上的ChatDev。例如,考虑到可执行性,MetaGPT获得了3.75的评分,非常接近4(完美)。此外,它耗时更少(503秒),明显少于ChatDev。考虑到代码统计和人工修订成本,它也显著优于ChatDev。尽管MetaGPT需要更多的tokens(24,613或31,255相比于19,292),它只需要126.5/124.3个tokens生成一行代码。相比之下,ChatDev使用了248.9个tokens。这些结果突显了SOP在多智能体协作中的优势。此外,我们通过可视化示例展示了MetaGPT的自主软件生成能力(图5)。有关更多实验和分析,请参见附录C。

4.3 能力分析

与开源基线方法如AutoGPT和自主智能体如AgentVerse和ChatDev相比,MetaGPT为软件工程任务提供了功能。如表2所示,我们的框架涵盖了处理复杂和专业开发任务的广泛能力。整合SOP(例如,角色扮演专业知识、结构化通信、简化工作流程)可以显著提高代码生成能力。其他基线方法可以轻松整合类似SOP的设计来提高其性能,类似于在LLM中注入链式思维(Wei等,2022)。

消融研究

  • 角色的有效性 为了解不同角色对最终结果的影响,我们进行了两个涉及生成有效代码和计算平均统计数据的任务。当我们排除某些角色时,生成的代码是不可行的。如表3所示,除了工程师之外的角色的添加一致地提高了修订和可执行性。尽管更多的角色略微增加了费用,总体性能显著提高,证明了各种角色的有效性。

  • 可执行反馈机制的有效性 如图4所示,将可执行反馈添加到MetaGPT中,在HumanEval和MBPP的Pass @1上分别显著提高了4.2%和5.4%。此外,表1显示反馈机制提高了可行性(从3.67到3.75)并减少了人工修订成本(从2.25到0.83)。这些结果说明我们设计的反馈机制如何能生成更高质量的代码。更多MetaGPT和不带可执行反馈的MetaGPT的定量结果见表4和表6。

5 结论

本工作介绍了MetaGPT,一个利用SOPs(标准操作程序)来增强基于大语言模型(LLMs)的多智能体系统问题解决能力的创新元编程框架。MetaGPT将一组智能体建模为一个模拟的软件公司,类似于模拟城镇(Park等,2023)和Voyager中的Minecraft沙盒(Wang等,2023a)。MetaGPT利用角色专业化、工作流程管理和高效的共享机制(如消息池和订阅),使其成为一个灵活且便携的平台,适用于自主智能体和多智能体框架。它使用可执行反馈机制在运行时提高代码生成质量。在广泛的实验中,MetaGPT在多个基准测试中达到了最新的技术水平。类人SOP的成功整合激发了未来对人工多智能体系统进行人类启发技术研究的兴趣。我们还将本工作视为对基于LLM的多智能体框架进行规范的早期尝试。展望(见附录A)。

致谢

我们感谢KAUST AI Initiative执行秘书Sarah Salhi和KAUST AI Initiative博士后Yuhui Wang帮助润色部分文本。我们要感谢KAUST AI Initiative博士生Wenyi Wang提供全面反馈,并与Mingchen共同起草了展望(附录A)。我们还感谢DeepWisdom副总裁Zongze Xu提供了AgentStore的插图材料。

作者贡献

  • Sirui Hong进行了大部分实验并设计了可执行反馈模块。她在Ceyao Zhang以及Jinlin Wang和Zili Wang的支持下,主导了初版写作。
  • Mingchen Zhuge设计了自我改进模块,讨论了额外实验,并主导了当前的写作。
  • Jonathan Chen帮助进行了MBPP实验,概述了方法部分,并参与了当前写作。
  • Xiawu Zheng提供了宝贵的指导,审阅并编辑了论文。
  • Yuheng Cheng参与了评估指标设计和HumanEval实验。
  • Steven Ka Shing Yau, Zijuan Lin, Liyang Zhou, Lingfeng Xiao帮助进行了MBPP实验并与开源基线方法进行了比较。
  • Chenyu Ran创作了大部分插图。
  • DeepWisdom的CEO Chenglin Wu发起了MetaGPT,做出了最重要的代码贡献,并指导了该项目。
  • KAUST AI Initiative主任兼IDSIA科学主任Jurgen Schmidhuber指导了该项目并帮助完成了写作。

原文地址

arXiv: 2308.00352
Repo: https://github/geekan/MetaGPT
refdoc:https://docs.deepwisdom.ai/main/zh/

本文标签: 框架论文MetaGPT