当前位置: 首页 > news >正文

针对多智能体协作框架的元编程——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)。

         

相关文章:

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

M ETA GPT: M ETA P ROGRAMMING FOR M ULTI -A GENT COLLABORATIVE F RAMEWORK 1.概述 现有的多智能体系统主要面临以下问题: 复杂性处理不足:传统的多智能体系统主要关注简单任务,对于复杂任务的处理能力有限,缺乏深入探索和…...

Django自定义CSS

创建一个CSS文件(例如admin_custom.css),并在其中添加针对你希望修改的字段的CSS规则。在你的Django项目的settings.py文件中,添加自定义CSS文件的路径到STATICFILES_DIRS。 # settings.py STATICFILES_DIRS [ os.path.join(BA…...

Rust基础学习-标准库

栈和堆是我们Rust代码在运行时可以使用的内存部分。Rust是一种内存安全的编程语言。为了确保Rust是内存安全的,它引入了所有权、引用和借用等概念。要理解这些概念,我们必须首先了解如何在栈和堆中分配和释放内存。 栈 栈可以被看作一堆书。当我们添加更…...

django连接达梦数据库

为了在Django中连接达梦数据库,你需要确保你有达梦的数据库驱动。Django默认支持的数据库有PostgreSQL, MySQL, SQLite, Oracle等,但不包括达梦数据库。不过,对于大多数数据库,Django的数据库API是通用的,你可以通过第…...

Python深度学习基于Tensorflow(17)基于Transformer的图像处理实例VIT和Swin-T

文章目录 VIT 模型搭建Swin-T 模型搭建参考 这里使用 VIT 和 Swin-T 在数据集 cifar10 上进行训练 VIT 模型搭建 导入需要的外部库 import numpy as np import tensorflow as tf import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec这里我们接着使用 ci…...

树莓派4B_OpenCv学习笔记5:读取窗口鼠标状态坐标_TrackBar滑动条控件的使用

今日继续学习树莓派4B 4G:(Raspberry Pi,简称RPi或RasPi) 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 版本是4.5.1: 今日学习:读取窗口鼠标状态坐标_TrackBar滑动条控件的使…...

c、c#、c++嵌入式比较?

嵌入式系统是专门设计用于特定用途的计算机系统,通常用于控制、监视或执行特定任务。这些系统通常具有严格的资源限制,如内存、处理器速度和能耗。因此,在选择编程语言时,需要考虑到这些限制以及系统的特性。 对于嵌入式系统&…...

如何使用ai人工智能作诗?7个软件帮你快速作诗

如何使用ai人工智能作诗?7个软件帮你快速作诗 使用AI人工智能作诗是一种创新的写作方式,以下是一些可以帮助您快速作诗的AI人工智能软件: 1.AI创作云: 这是一个AI诗歌助手应用程序,可以根据您提供的主题或关键词生成…...

调用华为API实现语音合成

目录 1.作者介绍2.华为云语音合成2.1 语音合成介绍2.2 华为语音合成服务2.3 应用场景 3. 实验过程以及结果3.1 获取API密钥3.2 调用语音合成算法API3.3 实验代码3.4 运行结果 1.作者介绍 袁斌,男,西安工程大学电子信息学院,2023级研究生 研究…...

docker实战命令大全

文章目录 1 环境准备1.1 移除旧版本Docker1.2安装工具包1.3配置docker yum源 2 安装最新docker2.1 设置开机自启docker2.2配置加速器 3 实操-镜像3.1搜索镜像3.2下载镜像3.3查看镜像3.4 删除镜像 4 实操-容器4.1运行nginx容器4.2 查看容器4.3启动容器4.5关闭容器4.6查看容器日志…...

Java线程死锁

在Java中,线程死锁通常发生在两个或更多个线程相互等待对方释放资源的情况下。以下是一个简单的Java示例,展示了如何创建线程死锁: public class DeadlockDemo {// 定义两个资源private static Object resource1 new Object();private stat…...

virtual box安装invalid installation directory

问题原因 看官方文档Chapter 2. Installation Details 第2.1.2所示,安装目录需要满足两个条件: 一是:需要安装目录的所有父目录都要满足以下访问控制条件 Users S-1-5-32-545:(OI)(CI)(RX) Users S-1-5-32-545…...

概率分析和随机算法

目录 雇佣问题 概率分析 随机算法 生日悖论 随机算法 概率分析 球与箱子 总结 雇佣问题 有n个候选人面试,如果面试者比目前雇佣者的分数高,评价更好,那么就辞掉当前雇佣者,而去聘用面试者,否则继续面试新的候…...

15_2 Linux Shell基础

15_2 Linux Shell基础 文章目录 15_2 Linux Shell基础[toc]1. shell基本介绍1.1 什么是shell1.2 shell使用方式1.3 脚本的执行方式1.4 脚本练习 2. 变量的种类2.1 自定义变量2.2 环境变量,由系统提前定义好,使用时直接调用2.3 位置变量与预定变量2.4 变量…...

Catia装配体零件复制

先选中要复制的零件 然后选中复制到的父节点才可以。 否则 另外一种方法是多实例化...

实用小工具-python esmre库实现word查找

python esmre库实现word查找 前言: 在文本中匹配特定的字符串,一般可以用普通的字符串匹配算法,KMP算法; python中提供了一个库,esmre, 通过预先将字符串存到esm对象中,利用这些字符串从候选的字符串中进行…...

SSM框架整合,内嵌Tomcat。基于注解的方式集成

介绍: SSM相信大家都不陌生,在spring boot出现之前,SSM一直是Java在web开发中的老大哥。现在虽说有了spring boot能自动整合第三方框架了,但是现在市面上任然有很多老项目是基于SSM技术的。因此,能熟练掌握SSM进行开发…...

系统架构设计师【论文-2016年 试题4】: 论微服务架构及其应用(包括写作要点和经典范文)

论微服务架构及其应用(2016年 试题4) 近年来,随着互联网行业的迅猛发展,公司或组织业务的不断扩张,需求的快速变化以及用户量的不断增加,传统的单块(Monolithic)软件架构面临着越来越多的挑战,…...

面试题:String 、StringBuffer 、StringBuilder的区别

String、StringBuffer、和StringBuilder都是用于处理字符串的操作类,但它们之间存在一些关键性的差异: 1.不可变性与可变性: String:字符串常量,是不可变的。一旦创建,其内容就不能被改变。对字符串的任何…...

TLS指纹跟踪网络安全实践(C/C++代码实现)

TLS指纹识别是网络安全领域的重要技术,它涉及通过分析TLS握手过程中的信息来识别和验证通信实体的技术手段。TLS(传输层安全)协议是用于保护网络数据传输的一种加密协议,而TLS指纹则是该协议在实际应用中产生的独特标识&#xff0…...

小白学RAG:大模型 RAG 技术实践总结

节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对大模型技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。 汇总合集…...

Doris Connector 结合 Flink CDC 实现 MySQL 分库分表

1. 概述 在实际业务系统中为了解决单表数据量大带来的各种问题,我们通常采用分库分表的方式对库表进行拆分,以达到提高系统的吞吐量。 但是这样给后面数据分析带来了麻烦,这个时候我们通常试将业务数据库的分库分表同步到数据仓库时&#x…...

ModbusTCP、TCP/IP都走网线,一样吗?

在现代通信技术中,Modbus/TCP和TCP/IP协议是两种广泛应用于工业自动化和网络通信领域的协议。尽管它们都运行在网线上,但它们在设计、结构和应用场景上有着明显的区别。 Modbus/TCP协议是什么 Modbus/TCP是一种基于TCP/IP的应用层协议,它是Mo…...

网络学习(13)|Spring Boot中获取HTTP请求头(Header)内容的详细解析

文章目录 方法一:使用HttpServletRequest实现原理代码示例优点缺点适用场景 方法二:使用RequestContextHolder实现原理代码示例优点缺点适用场景 方法三:使用RequestHeader注解实现原理代码示例优点缺点适用场景 总结 在Spring Boot应用中&am…...

【漏洞复现】宏景eHR pos_dept_post SQL注入漏洞

0x01 产品简介 宏景eHR人力资源管理软件是一款人力资源管理与数字化应用相融合,满足动态化、协同化、流程化、战略化需求的软件。 0x02 漏洞概述 宏景eHR pos_dept_post 接囗处存在SQL注入漏洞,未经过身份认证的远程攻击者利用此漏洞执行任意SQL指令,…...

82. 删除排序链表中的重复元素 and II

链接直达: 保留重复元素 不保留重复元素 题目: 1: 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。示例 1:输入:head [1,1,2] 输出:[1…...

C++ 判断目标文件是否被占用(独占)(附源码)

在IM软件中发起文件发送时,如果要发送的是某word文件,并且该word文件被office打开,则会提示文件正在被占用无法发送,如下所示: 那文件被占用到底是如何判断出来的呢?其实很简单,调用系统API函数CreateFile,打开该文件(OPEN_EXISTING),传入FILE_SHARE_READ共享读标记…...

计划任务 之 一次性的计划任务

计划任务 作用:定时自动完成特定的工作 计划任务的分类: (1)一次性的计划任务 例如下周三对系统的重要文件备份一次 (2)周期性重复计划任务 例如每天晚上12:00备份一次 一次性的任务计划&#xff1a…...

非比较排序之计数排序

目录 一、什么是计数排序 二、思路 三、代码实现 一、什么是计数排序 计数排序是一种非比较型的排序算法,它通过统计待排序数据中每个元素出现的次数,然后根据这个次数来进行排序。计数排序的具体步骤如下: 首先找出待排序数据中的最大值…...

Django路由与会话深度探索:静态、动态路由分发,以及Cookie与Session的奥秘

系列文章目录 Django入门全攻略:从零搭建你的第一个Web项目Django ORM入门指南:从概念到实践,掌握模型创建、迁移与视图操作Django ORM实战:模型字段与元选项配置,以及链式过滤与QF查询详解Django ORM深度游&#xff…...

聊城网站建设哪个好/线上销售水果营销方案

近日,在开发时候发现 所有的页面都无法编译, 一查网上资料,原来使用ide的时候javase不包含 jsp-api javax.servlet 等javaee的包,所以用idea去编写jsp或者引用servlet的时候会出现红色呲字样(以idea12为例&#xff09…...

网站建设步骤电脑/网站设计培训

中国电信、中国移动、中国联通于2020年4月8日,首次提出“5G消息”的概念。作为传统短信业务的升级,5G消息具有以下特点和优势。业务功能丰富。5G消息复用短彩信入口,兼容短彩信服务的同时,突破了传统短信对信息长度和内容格式的限…...

网站建设与管理模拟题1/小型培训机构管理系统

从HTML被发明开始,样式就以各种形式存在。不同的浏览器结合它们各自的样式语言为用户提供页面效果的控制。最初的HTML只包含很少的显示属性。随着HTML的成长,为了满足页面设计者的要求,HTML添加了很多显示功能。但是随着这些功能的增加&#…...

最大的网站开发公司/国内做seo最好的公司

火山PC批量添加图片水印 本文作者:灰羊羊 一、需要准备的软件: photoshop 二、火山调用的模块 1.MFC界面支持库 2.火山模块 3.CxImage图像处理支持库 三、混合图片说明 此命令为核心命令,将需要添加水印的图片与logo图片合并,上图命令中,图…...

威海好的网站建设公司哪家好/公众号推广费用一般多少

测试一口吧! 运行代码转载于:https://www.cnblogs.com/a6948076/p/9909800.html...

上海网站建设做物流一/青岛百度seo排名

幂级数这块要记得不是很多,但是还是总结一下。 之后我打算再总结一下函数项级数的性质,傅里叶级数,一些计算技巧。 首先幂级数不要求级数指数是连续的,只要是升幂就行。 幂级数收敛 收敛判别没有啥花里胡哨的,就直接…...