针对多智能体协作框架的元编程——METAGPT

M ETA GPT: M ETA P ROGRAMMING FOR M ULTI -A GENT COLLABORATIVE F RAMEWORK

1.概述

        现有的多智能体系统主要面临以下问题:

  • 复杂性处理不足:传统的多智能体系统主要关注简单任务,对于复杂任务的处理能力有限,缺乏深入探索和研究。
  • 幻觉问题:在多个智能体相互作用时,信息的错误可能会被放大,导致输出质量不稳定,尤其是在复杂问题解决过程中。
  • 协作效率低下:现有系统往往难以通过对话和工具基础的互动实现有效协作,这导致协作过程中出现连贯性不足和反馈循环低效等问题。

        为了解决上述问题,论文提出了MetaGPT框架,该框架具有以下特点和解决策略:

  • 标准操作程序的编码:MetaGPT通过将标准操作程序(SOPs)编码为智能体可以理解和执行的指令,增加了任务处理的结构化和规范化。这有助于智能体更系统、更准确地处理复杂任务。
  • 角色和任务分解:每个智能体都有明确的角色和职责,这些角色基于实际工作中的专业知识定义。这种角色定义帮助系统根据各自的专业知识和职责有效分工。
  • 模块化输出:智能体生成的输出是模块化的,易于验证和复用。这样的设计减少了错误的累积和传播,提高了最终输出的准确性和可靠性。
  • 共享环境和全局内存池:MetaGPT建立了一个共享环境,其中包括一个全局内存池,用于存储和检索智能体间的交互信息。这使得智能体能够基于先前的交互动态调整其行为,提高了信息的利用效率和协作的灵活性。

        通过这些策略,MetaGPT能够提高多智能体系统处理复杂任务的能力和效率,使系统在实际应用中更加健壮和有效。这些解决方案为多智能体系统的发展提供了新的方向,尤其是在需要高度协作和信息共享的复杂任务处理场景中。

2.整体架构

        下图展示了MetaGPT框架下的软件开发标准化流程,从人类提出需求到最终的产品测试。流程开始于产品经理撰写需求文档,包括市场分析和用户需求。随后,架构师基于需求文档设计软件架构,包括技术选型和接口定义。工程师根据架构设计进行代码实现和测试,最终由质量保证工程师完成系统测试和验证。整个过程中,各角色通过共享的环境和内存池高效交换信息,确保了开发过程的连贯性和产品的高质量。这一流程不仅提高了开发效率,还通过明确的角色分工和协作机制,优化了多智能体系统处理复杂任务的能力。

2.1 整体框架 

        整个框架被划分为两个层次:基础组件层和协作层,这两者共同工作以支持系统的功能性和模块性。

(1)基础组件层

        这一层包含了支持单个智能体操作和系统范围信息交换的核心构建块,如环境(Environment)、内存(Memory)、角色(Role)、行动(Action)和工具(Tools)。其中:

  • 环境(Environment):为智能体提供协作空间和通信平台,使它们能够共享信息并进行交互。
  • 内存(Memory):使智能体能够存储和检索历史消息和上下文信息,从而支持更加智能的决策过程。
  • 角色(Roles):封装基于领域专业知识的特定技能、行为和工作流程。每个角色都有明确的定义,包括职责、目标和限制。
  • 行动(Actions):智能体执行的具体任务,用以完成子任务并生成输出。
  • 工具(Tools):为智能体提供可用于增强其能力的通用服务和工具。

(2)协作层

        建立在基础组件之上,协作层调动个体智能体共同解决复杂问题。这一层包括两个主要机制:知识共享和封装工作流。

  • 知识共享:该机制允许智能体有效地交换信息,促进了共享知识库的构建。智能体可以在不同粒度级别存储、检索和共享数据,这不仅增强了协调性,还减少了冗余通信,提高了整体运营效率。
  • 封装工作流:利用SOP将复杂任务分解为更小、更可管理的组件,然后将这些子任务分配给适合的智能体,并监督它们的表现以确保行动与总体目标一致。

        通过这种设计,MetaGPT不仅提高了模块性,还确保了个体和集体智能体能力的整合,同时促进了目的性的协调。这种结构化和层次化的框架设计使MetaGPT能够有效地处理并协调复杂的多智能体协作任务,如软件开发中从需求分析到最终交付的完整流程。

2.2 核心组件设计         

(1)角色定义

        每个角色根据其特定领域的专业知识被赋予一定的属性,包括名字、目标、限制和描述。这些定义帮助确保每个智能体在其角色范围内能有效执行任务,同时也使得智能体生成的行为与期望功能相匹配。

(2)知识共享机制和定制化知识管理

  • 智能体通过检索环境中的信息并根据其角色和任务需要定制知识,提高决策的相关性和效率。
  • 环境中的信息被复制并同步更新,确保所有智能体都能访问到一致的最新信息。
  • 智能体可以注册并接收对它们有意义的消息类型的更新,从而保持对新信息的敏感性和响应性。

(3)提高决策效率和执行力

        MetaGPT通过将这些组件整合到一个统一的框架中,实现了智能体在执行复杂任务时的高效协作和信息共享。通过角色明确的定义和智能体间的有效沟通,每个智能体都能在其专业领域内提供精准的输入,共同推动任务向预定目标前进。这种设计不仅提高了任务执行的效率,还增强了系统的灵活性和智能性。

2.3 实例

        多智能体协作环境中如何实现从项目需求到最终执行的整个软件开发流程实例如下:     

  • 需求与计划阶段:

    • Alice (产品经理): 根据给定的项目需求,准备写产品需求文档(Product Requirement Document, PRD),涵盖产品目标、用户故事、竞争分析等内容。
    • 文档完成后,Alice 将其工作成果发布到消息队列的“WritePRD”类别中,并由系统通知其他相关智能体及用户当前的API使用情况。

  • 设计阶段:

    • Bob (架构师): 接收到Alice的需求和可行性分析后,负责撰写系统设计计划,选择技术栈并定义系统架构。
    • Bob 生成系统设计相关的文件和目录,包括程序的流程图和数据结构图,并将这些文件上传到“WriteDesign”类别的消息队列中。

 

  • 任务分解与执行:

    • Eve (项目经理): 阅读了“WriteDesign”类别,使用Bob提供的UI设计、系统设计和API设计文档,将项目分解成更简单和具体的任务,通常针对单个代码文件。
    • 分解后的任务包括各种代码文件的实现,如主程序、游戏逻辑、GUI处理、数据库管理及其测试。

  • 编码与代码审查:

    • Alex (工程师): 负责编写和审查代码。Alex根据Eve提供的任务列表编写相应的代码文件,并进行单元测试,确保代码质量。

  • 知识共享与项目监控:

    • 系统通过共享知识和更新状态来协助项目成员保持同步,确保所有智能体可以访问最新的项目信息,并根据项目进展进行相应的调整。

        

3.实验

3.1评估指标和方法

  • 代码和文档统计

    • 评估基于代码文件的数量、代码行数、文档文件数量和文档行数,以量化编码和文档工作的规模和深度。
    • 文档类型总数反映了任务执行中生成的文档多样性。
  • 成本统计

    • 通过总提示符和完成令牌的使用量来评估系统交互的级别和输出规模。
    • 总成本、任务执行时间和成本修正捕捉了代码的维护努力和成本效率。
  • 代码执行质量

    • 代码质量分为F到P的等级,从完全失败到完美匹配规范。

3.2 实验设置

(1)实验环境和配置

  • 实验平台:实验在Python环境(版本3.9.6)中进行,确保了编程语言的现代性和适用性。
  • 实验限制:为了模拟真实的开发限制,设定了最大token消耗限制为1500,允许充分测试MetaGPT在不同复杂度的任务下的表现。

(2)实验任务和范围

  • 任务多样性:实验涵盖了从Python游戏生成到CRUD管理系统的多种任务,包括但不限于像Flappy Bird和2048这样的游戏,这些任务要求框架展现出从逻辑处理到用户界面设计的全方位能力。
  • 项目规模:每个项目的具体配置详细记录在实验记录表Appendix B中,提供了完整的透明度和可追溯性。

(3)性能评估

  • 定量评估:通过比较MetaGPT与其他框架如AutoGPT和AgentVerse的性能,使用定量指标如代码行数、生成的文档数量和类型、以及任务完成的质量评分。
  • 功能执行:每个任务的执行不仅评估基础的运行能力,还评估了代码和工作流是否满足预期规范,这是通过为每个任务设定从0到3的评分标准来实现的,其中3表示完美符合期望。

(4)实验成本和资源使用

  • token使用:记录了每个项目中用于提示和完成任务的令牌数,这些数据反映了任务的复杂性和系统交互的深度。
  • 时间和成本效率:评估了完成任务所需的总时间和金钱成本,这些指标关键地体现了MetaGPT在实际软件开发过程中的经济效益。

3.3 实验结果

  • 功能比较

    • MetaGPT在生成PRD、技术设计和API接口方面表现突出,显示出比AutoGPT和AgentVerse更全面的项目执行能力。
    • 独有的角色基础任务管理和代码审查功能使MetaGPT在多智能体合作和代码质量提升方面具有优势。

  • 定量实验比较

    • 实验显示MetaGPT在多种任务(如Python游戏生成和CRUD管理)上展示了强大的性能,能在许多测试中达到完美匹配期望的3分满分。
    • 相比之下,AutoGPT和AgentVerse在所有任务中的表现均未达到预期,常因资源限制和任务复杂性问题而失败。

  • 运行统计分析

    • MetaGPT的项目平均生成了约470行代码,每个项目成本大约为$1.09,整个构建过程平均耗时约518秒。
    • 成本分析显示,每个项目平均消耗约26266.86个提示符token和6218.00个完成token。        

3.4 角色减少对性能的影响        

  • 完整团队:初始实验配置包括工程师、产品经理、架构师和项目经理。在这种配置下,项目不仅能够成功完成,而且代码质量和任务执行的成本效率最高。
  • 逐步减少角色:实验中逐渐减少团队成员,结果显示,当减少到只有产品经理和工程师时,代码行数有所减少,修订成本也有所增加,但总体任务可执行性得以保持。完全由单一智能体执行时,任务失败,显示出多角色协作对成功执行复杂任务的重要性。

(1)实验结果       

  • Brick Breaker游戏开发

    • 从一个角色到四个角色,代码的可执行性从完全失败(F)到完美(P)不等。随着角色的增加,代码行数和修订成本增加,但整体代码质量提高。
    • 实验显示,有四个角色参与时,代码不仅能成功执行,而且修订次数减少,代码质量最高。
  • Gomoku游戏开发

    • 与Brick Breaker类似,角色数的减少对项目成本和代码质量有直接影响。虽然代码的可执行性在三个角色时仍然保持在运行状态(R),但到了四个角色时,代码执行性提高到几乎完美(W)。

         

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/23532.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++中的priority_queue和deque以及适配器

C中的priority_queue和deque 一丶 priority_queue1.1 priority_queue的介绍1.2 priority_queue的使用1.3 priority_queue的模拟实现 二丶 deque2.1 deque的简单介绍2.2 deque的缺陷2.3 为什么要选择deque作为stack和queue的迭代器 三丶 容器适配器3.1 什么是适配器3.2 STL标准库…

递推7-2 sdut-C语言实验-养兔子分数

7-2 sdut-C语言实验-养兔子 分数 20 全屏浏览 切换布局 作者 马新娟 单位 山东理工大学 这是一个编程题模板。 一对成熟的兔子每天能且只能产下一对小兔子,每次都生一公一母,每只小兔子的成熟期是1天,小兔子出生后隔一天才能再生小兔子。…

GlaDS缘起

题目:Modeling channelized and distributed subglacial drainage in two dimensions 近年来,冰盖表面融化与冰盖动态之间的联系及其对海平面上升的影响引起了广泛关注。特别是格陵兰冰盖的研究显示,表面融水显著影响冰川移动速度,而冰下排水系统对冰川动力学及冰川水文学…

【WP】猿人学_13_入门级cookie

https://match.yuanrenxue.cn/match/13 抓包分析 抓包分析发现加密参数是cookie中有一个yuanrenxue_cookie 当cookie过期的时候&#xff0c;就会重新给match/13发包&#xff0c;这个包返回一段js代码&#xff0c;应该是生成cookie的 <script>document.cookie(y)(u)(a…

Edge工作区按钮消失了,又出现了

在edge的设置中的自定义工具栏处的显示工作区&#xff0c;打开&#xff0c;右上角就有一个工作区的标志然后就可以进入工作区了

07_查找

查找概念 查找表&#xff08;Search Table&#xff09;是由同一类型的数据元素(或记录)构成的集合。 关键字&#xff08;Key&#xff09;是数据元素中某个数据项的值&#xff0c;又称为键值。可以标识一个数据元素&#xff0c;也可以标识一个记录中的某个数据项。 若关键字可以…

产业,到底需要什么大模型?

[ 产业究竟需要怎样的大模型&#xff1f;关于这个问题&#xff0c;本文作者便提出了他的看法&#xff0c;并总结了产业大模型目前阶段的三点落地挑战。一起来看看&#xff0c;或许可以帮助你更好地理解大模型与行业、与产业的融合。 写下这篇的起因&#xff0c;是前不久的一件事…

SAP ABAP下拉筛选框实现

1.屏幕定义 PARAMETERS: p_1 AS LISTBOX VISIBLE LENGTH 10.2.初始化下拉框 INITIALIZATION.PERFORM frm_sc_init.FORM frm_sc_init.DATA: list TYPE vrm_values. "定义list内表 要在TOP中定义&#xff0c;我写在了这里REFRESH:list[]."初始化下拉列表值…

C++STL---list模拟实现

本文我们模拟实现STL中的list&#xff0c;为了模拟实现list&#xff0c;实际上我们需要实现三个类&#xff0c;分别为&#xff1a;_list_node , _list_iterator , list。 我们先看一下这三个类的基本组成&#xff0c;主要是看看每个类中包含的变量有什么&#xff1a; namespa…

[已解决]FinalShell连接CentOS失败:java.net.UnknownHostException: centos

报错&#xff1a; 解决办法&#xff1a; 1.查看Windows:C:\Windows\System32\drivers\etc\ 2.拷贝hosts文件&#xff0c;用记事本打开hosts文件 3.添加主机名centos及对应IP地址&#xff0c;保存并粘贴覆盖C:\Windows\System32\drivers\etc\中的hosts文件 4.打开cmd命令窗口输…

Mac下删除系统自带输入法ABC,正解!

一、背景说明 MacOS 在 14.2 以下的系统存在中文输入法 BUG&#xff0c;会造成系统卡顿&#xff0c;出现彩虹圆圈。如果为了解决这个问题&#xff0c;有两种方法&#xff1a; 升级到最新的 14.5 系统使用第三方输入法 在使用第三方输入法的时候&#xff0c;会发现系统自带的 …

自定义一个自己的桌面挂件

"在这个信息纷繁的时代&#xff0c;每个人都在寻找那些能让日常生活更加便捷、高效的小工具。今天&#xff0c;我想邀请您加入一个温暖而富有创造力的项目——开发一款旨在提升工作与生活品质的桌面挂件。我们的目标很简单&#xff1a;创造一些小巧却强大的助手&#xff0…

RabbitMQ启动报错:Error during startup: {error, {schema_integrity_check_failed,

报错信息如下&#xff1a; Error during startup: {error,{schema_integrity_check_failed,[{table_attributes_mismatch,rabbit_user,[username,password_hash,tags,hashing_algorithm,limits],[username,password_hash,tags,hashing_algorithm]},{table_attributes_mismatch…

【2024年5月备考新增】】 考前篇(34)《必备资料(17) - 论文串讲-项目采购管理》

过程定义输入工具技术输出实际应用规划 采购 管理决定采购什么、何时 采购、如何采购,并 记录项目对于产品和 服务的需求,并且寻 找潜在供应商1、立项管理文件2、项目章程3、项目管理计划.范围管理计划质量管理计划.资源管理计划.范围基准4、项目文件.里程碑清单.项目团队派工…

集合进阶相关基础及底层原理

集合体系结构 单列集合&#xff1a; Collenction 每次只能添加一个值&#xff0c;其中红色是接口&#xff0c;蓝色是实现类 图来自黑马程序员网课 List系列集合&#xff1a;添加的元素是有序&#xff0c;可重复&#xff0c;有索引 Set系列集合&#xff1a;添加的元素是…

Visual Studio的使用教程

Visual Studio是由微软开发的一款集成开发环境&#xff08;IDE&#xff09;&#xff0c;广泛应用于各种编程语言和平台的开发。它功能强大&#xff0c;支持开发桌面应用、Web应用、移动应用、云服务等。本文将详细介绍Visual Studio的基本功能和使用方法&#xff0c;帮助初学者…

搜索与图论:深度优先搜索

搜索与图论&#xff1a;深度优先搜索 题目描述参考代码 题目描述 参考代码 #include <iostream>using namespace std;const int N 10;int n; int path[N]; bool st[N];void dfs(int u) {// u n 搜索到最后一层if (u n){for (int i 0; i < n; i) printf("%d …

JavaScript 浏览器对象模型BOM 概念

JavaScript浏览器对象模型&#xff08;BOM&#xff09;是指JavaScript用来操作浏览器窗口、框架和历史记录的一组对象和方法。 BOM提供了一系列对象来操作浏览器的各个部分&#xff0c;使用BOM可以实现以下功能&#xff1a; 访问和操作浏览器窗口的对象&#xff0c;比如window…

QT5槽函数的重载问题

当你遇到信号或槽函数有重载时&#xff0c;需要使用 QOverload 来明确指定连接的是哪个重载版本。下面是如何在 connect 函数中区分重载的示例。 假设你有以下信号和槽&#xff1a;class DeviceOperationInterface : public QObject {Q_OBJECT signals:void ScaleX(bool _Scale…

Python基础用语:揭示编程世界的底层逻辑与无限可能

Python基础用语&#xff1a;揭示编程世界的底层逻辑与无限可能 Python&#xff0c;这门强大的编程语言&#xff0c;如同一位神秘的导师&#xff0c;引领我们走进编程的奇妙世界。掌握Python的基础用语&#xff0c;不仅意味着我们能够驾驭这门语言&#xff0c;更意味着我们能够…