针对多智能体协作框架的元编程——METAGPT
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指纹则是该协议在实际应用中产生的独特标识࿰…...

Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...

Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...