MetaGPT——一个面向编程的多智能体框架

MetaGPT简介

MetaGPT,作为一种多智能体框架,以其独特的方式引领着这一领域的发展。它利用标准作业程序(SOP)来协调基于大语言模型的多智能体系统,实现了元编程技术的突破。该框架通过模拟一个虚拟软件团队,将智能体赋予了不同的角色,如产品经理、架构师、项目经理、工程师、质量工程师等,并通过引入SOP作为开发流程,使这些智能体能够高效地协同工作。
MetaGPT的核心理念是将多智能体视为一个智能体社会。在这个社会中,智能体、环境、标准流程(SOP)、通信和经济共同构成了其运作的基石。智能体作为社会的基本单位,具备各自独特的大语言模型(LLM)、观察、思考、行动和记忆能力。它们通过观察和思考来感知环境中的重要信息,并通过行动将结果输出到环境中,以供其他智能体使用。
环境则是智能体生存和互动的公共场所。它提供了智能体之间进行交互和合作的平台,使得智能体能够从中获取到必要的信息和资源。智能体通过与环境进行交互,不断学习和适应,以更好地完成各种任务。
标准流程(SOP)是MetaGPT框架中至关重要的组成部分。它们是一系列既定的程序和规范,用于管理智能体的行动和交互。通过遵循SOP,智能体能够确保系统内部的有序和高效运作,减少冲突和误解,提高整体的工作效率。
通信是智能体之间信息交流的关键环节。通过有效的通信机制,智能体能够分享信息、协商决策、协调行动,从而实现更好的合作和协同。在MetaGPT框架中,通信不仅涉及到智能体之间的直接交流,还包括通过共享存储和数据库等方式进行的间接交流。
经济则是多智能体环境中的价值交换系统。它决定了资源的分配和任务的优先级,影响着智能体之间的合作和竞争关系。通过合理的经济机制设计,MetaGPT框架能够激励智能体积极参与工作,提高整体的工作效果。
总的来说,MetaGPT作为一种基于大语言模型的多智能体框架,通过整合智能体、环境、标准流程、通信和经济等多个方面,实现了对软件开发全生命周期的覆盖。它不仅提高了软件开发的效率和质量,还为人工智能领域的发展注入了新的活力。随着技术的不断进步和应用的不断拓展,相信MetaGPT将会在未来发挥更加重要的作用,为人工智能领域的繁荣做出更大的贡献。

联系生活的理解

可以这么理解多智能体相当于一个项目团队,智能体相当于团队的每个成员,环境相当于办公地点,通信相当于团队之间的沟通,SOP相当于公司的制度与流程,经济则相当于资源分配。什么是资源分配?比如程序员需要电脑,会计需要计算器。

MetaGPT框架

MetaGPT的设计分为两个层次:基础组件层和协作层。

基础组件层

基础组件层以AI Agent为核心,提供了观察、思考等能力。其建立了个体智能体操作和在系统范围内进行信息交换所需的核心模块,包括环境、记忆、角色、行动和工具。
环境:为智能体提供协作工作空间和交流平台。
记忆:存储和检索历史消息。
角色:根据领域封装专业技能和工作流程。
行动:执行模块化的子任务。
工具:提供常见的服务和工具。
这一层为智能体在分配的角色中运行提供了基础设施,使它们可以相互交互并与系统交互。

协作层

其建立在基础组件层的基础上,协调各个智能体共同解决复杂问题。其提供了两种基本机制:知识共享和封装工作流程。
知识共享:该机制允许智能体有效地交换信息,为共享的知识库做出贡献。智能体可以以不同粒度存储、检索和共享数据。它不仅可以加强协调能力,还减少了冗余的通信,提高了整体的运行效率。
封装工作流程:该机制利用SOP将复杂任务分解为较小、可管理的子任务。它将这些子任务分配给适合的智能体,并通过标准化的输出对其进行监控,确保它们的行动与总体目标一致。
基础和协作层的分离有利于实现模块化,同时确保智能体的个人和集体能力。基础组件提供了可重用的构建模块和工具,而协作模块则实现了有目的的协调。
基础和协作层的划分促进了模块化,同时确保了个体和集体代理的能力。组件提供了可重用的构建块和实用程序,而协作模块整合了有目的的协调。

MetaGPT实现机制

角色定义

MetaGPT框架支持创建各种专业类的角色,如产品经理、架构师等。基础角色类由一组关键属性定义:名称、简介、目标、约束和描述。目标表示角色寻求完成的主要责任或目标。约束表示角色在执行行动时必须遵循的限制或原则。约束可以规定如下:“你编写的代码应符合PEP8等代码规范,具有模块化、易于阅读和维护的特点”。描述提供了额外的具体信息,以帮助建立更全面的角色定义。
MetaGPT框架提供的全面角色定义使得其可以创建高度专业化的基于LLM的智能体,每个智能体都针对特定的领域和目标进行了定制。角色定义不仅引入了基于预期功能的行为指导,而且有助于创建多样化和专业化的智能体,每个智能体都是其领域的专家。
思考与反思(Think & Reflect):角色可以检索角色描述来构建思考,然后通过_think()函数来反思需要做什么并决定下一步的行动。
观察(Observe):角色可以观察环境,并根据观察结果使用_observe()函数进行思考和行动。它们会关注重要信息,并将其纳入记忆中,以丰富其上下文理解并为未来的决策提供信息。
广播消息(Broadcast messages):角色可以使用_publish_message()函数将消息广播到环境中。这些消息包含有关当前执行结果和相关行动记录的详细信息,用于发布和共享信息。
知识沉淀与行动(Knowledge precipitation & Act):角色不仅是广播者,也是环境信息的接收者。角色可以评估传入的消息的相关性和及时性,从共享环境中提取相关知识,并维护一个内部的知识库以支持决策。它们通过咨询LLM,并利用其具有丰富上下文信息和自我知识的来执行行动。执行结果被封装为消息,而规范性组件则由环境共享。
状态管理(State management):角色可以通过更新工作状态和监控待办事项列表来跟踪它们的行动。这使得角色能够按顺序处理多个行动而不中断。在执行每个行动时,角色首先锁定其状态。完成行动后,将状态标记为解锁。这样可以防止其他行动中断工作流程。

实例化SOP的Prompt

MetaGPT使用提示(Prompt)将现实世界的标准作业程序(SOP)转化为明确定义的智能体工作流。该过程涉及使用提示来实例化SOP,并基于已建立的实践提供逐步指导,确保复杂序列任务的一致和结构化执行。
首先,我们详细介绍Action类,然后展示了如何设计标准化行动级别细粒度提示。在MetaGPT框架中,Action作为智能体执行特定任务的原子单位,通过自然语言进行指定。关键属性包括:
前缀(Prefix):将角色特定的前缀注入到提示中,以建立角色上下文。使用set_prefix()方法配置角色特定提示的标识符。
LLM代理(LLM proxy):每个Action包含一个LLM代理,可以通过aask()方法调用该代理,使用以自然语言提示表达的上下文输入来丰富行动细节。此外,可以在Action类中实现各种角色特定上下文解析函数。这些函数旨在从输入中提取并提供足够的上下文信息给LLM。
标准化的输出模式(Standardized outputs schema):使用结构化表示来定义预期的输出模式,用于提取结构化数据。标准化输出模式。一个定义预期输出模式的结构表示,用于提取结构化数据。
重试机制(Retry mechanism):通过定义尝试次数和等待时间来实现对行动进行重试,以提高稳健性。

标准化输出的行动

MetaGPT实例化工作流的有效性在很大程度上依赖于每个行动的标准化输出。这些输出利用专家领域知识和行业最佳实践,将工作流程调整到特定的角色和上下文中。结构化输出设计具有以下目的:
标准化的输出保障了一致的LLM结果,这些结果是可预测、可重复的,并符合智能体的责任范围。它们通过设定输出期望来引导高质量、结构化和基于任务的特定LLM生成。
此外,标准化的模式充当了蓝图,将LLM行为限制在适合角色的边界内。同时,这有助于保持对目标任务的关注,防止偏离目标。由于行动是综合角色基准指南的一部分,这种角色意识的引导确保输出与真实世界的质量标准相一致。
总之,在MetaGPT中标准化输出设计和实现为处理复杂任务提供了强大的工具。将自然语言中定义的复杂任务转化为标准化输出促进了协作的一致性,从而减少了可能导致不连贯的多轮对话交互。此外,它可以清晰、一致地表示结构信息,这在仅通过自然语言传达时可能存在困难,特别是对于基于LLM的智能体。此外,通过提供结构化和标准化的输出,不同的智能体可以清晰地对其任务和责任达成一致的理解。

知识共享机制和自定义知识管理

在MetaGPT中,每个智能体通过从共享环境日志中检索相关历史信息,来主动策划个性化知识。智能体不是被动地依赖对话,而是利用基于角色的兴趣来提取相关信息。
如前所述,MetaGPT中的每个智能体都维护了一个内存缓存,并对其角色相关的订阅消息进行索引,实现个性化的知识策划。具体来说,消息的集中复制创建了一个统一的数据源。智能体可以注册订阅,自动从该数据源接收与其角色相关的消息。在内部,智能体通过内容、来源和属性将内存缓存索引,以便在相关上下文中实现快速检索。
消息共享:当一个智能体生成一条消息时,它会被复制到共享的环境日志中,创建一个真实的单一数据源。从而确保所有智能体都可以获取相同的信息。
基于角色的订阅:智能体可以根据其角色对其有意义的消息类型进行注册订阅。其根据与智能体的责任和任务相一致的预定义标准进行的。
消息分发:当有新的消息符合订阅条件时,它会自动分发通知给相关的智能体。这种主动传播信息的方式可以防止智能体错过重要的更新。
内存缓存和索引:智能体会维护一个内部的记忆缓存,其中订阅的消息会被存储并按内容、发送者和接收者建立索引。从而保障高效的信息存储和检索。
上下文检索:环境会维护一个支持缓存和索引的共享内存池。与此同时,智能体可以根据需要查询其内部内存,以获取与其当前任务相关的上下文细节。这有助于改进其理解并做出更好的决策。
更新同步:对消息进行的任何更新或更改都会在所有链接的智能体内存中同步,以保持信息的一致视图。这确保所有智能体都可以访问最新的数据。
通过在智能体角色周围对信息流进行组织,确保多智能体之间的协作。通过结合中心化的知识共享与基于角色的个性化内存缓存相结合,实现定制化的知识管理。这减少了无关数据的存在,并提供了共同的上下文,从而在团队协作和个人效率之间达成平衡。

MetaGPT优劣势

优势

多Agent组成协作处理更复杂的任务。
通过将SOP融入到多智能体协作中,解决了现有方法在处理复杂任务时存在的幻觉问题。
通过结构化协调和模块化输出,能够有效地解决复杂的多智能体协作问题。
智能体可以主动从环境中获取相关知识,而不是简单地通过对话获取信息。这种设计更符合人类组织的运作模式。

劣势

偶尔会引用不存在的资源文件,如图像和音频。
在执行复杂任务时,它容易调用未定义或未导入的类或变量。
角色和流程还比较固定,无法实现动态扩展,如扩展UI设计角色。

代码实战

环境准备

1.OPENAI_API_KEY
2.python 3.9以上
3.https://github.com/geekan下载源码

初始化环境

先安装重头戏

pip3 install metagpt
metagpt --init-config 

然后在./.metagpt/config2.yaml下修改:下面是个示例

llm:
  api_type: "openai"  # or azure / ollama / open_llm etc. Check LLMType for more options
  model: "gpt-4-turbo-preview"  # or gpt-3.5-turbo-1106 / gpt-4-1106-preview
  base_url: "https://api.openai.com/v1"  # or forward url / other llm url
  api_key: "YOUR_API_KEY"

测试一下啊

from metagpt.software_company import generate_repo, ProjectRepo
repo: ProjectRepo = generate_repo("Create a 2048 game")  # or ProjectRepo("<path>")
print(repo)  # it will print the repo structure with files

当然也可以数据分析

import asyncio
from metagpt.roles.di.data_interpreter import DataInterpreter

async def main():
    di = DataInterpreter()
    await di.run("Run data analysis on sklearn Iris dataset, include a plot")

asyncio.run(main())  # or await main() in a jupyter notebook setting

最近更新

  1. TCP协议是安全的吗?

    2024-04-09 10:30:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-09 10:30:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-09 10:30:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-09 10:30:04       18 阅读

热门阅读

  1. V4L2驱动

    2024-04-09 10:30:04       11 阅读
  2. Ubuntu中apt使用

    2024-04-09 10:30:04       15 阅读
  3. 图论基础入门

    2024-04-09 10:30:04       14 阅读
  4. 程序员的赚钱认知觉醒(下)

    2024-04-09 10:30:04       15 阅读
  5. 大语言模型LLM《提示词工程指南》学习笔记04

    2024-04-09 10:30:04       13 阅读
  6. 使用Flowable-ui的Rest接口

    2024-04-09 10:30:04       12 阅读
  7. SpringMVC之静态资源访问

    2024-04-09 10:30:04       10 阅读