MetaGPT:以软件公司为范式的多代理协作
初识 MetaGPT:用软件公司范式理解多代理协作
传统的大语言模型(LLM)应用往往局限于单一对话界面,但现实世界的复杂任务需要多角色分工、标准流程和结构化产出。MetaGPT 将这一思想推向极致:它模拟一个完整的软件公司,让多个由 LLM 驱动的代理(Agent)各司其职,通过消息传递与共享环境协作,生成高质量、标准化的软件交付物(如需求文档、设计文档、代码)。
为什么选择软件公司作为协作范式
软件公司的团队结构天然包含了解决复杂问题的必要元素:
- 明确的角色划分:产品经理、架构师、工程师、测试等,每个角色有专属技能和职责。
- 标准化流程:从需求分析、系统设计到编码与测试,分阶段产出结构化文档(如 PRD、设计文档)。
- 可验证的产出:最终的代码、测试报告和可执行程序构成了客观的质量评估基准。
MetaGPT 正是将这种范式映射到多代理系统中,用结构化的中间产出(思维导图、图表、代码)代替单纯的文本流,显著提升产出的逻辑性和可用性。
核心架构:多代理社会的“操作系统”
MetaGPT 的架构围绕 角色(Role)、动作(Action)、记忆(Memory) 和 环境(Environment) 四个核心抽象构建,它们共同形成一个可扩展的代理协作系统。
角色与动作
每个角色负责执行一系列动作,动作是 LLM 调用的具体单元,包含角色提示、上下文和输出格式。例如:
- 产品经理执行
WritePRD动作,输出结构化需求文档。 - 架构师执行
WriteDesign动作,输出系统设计文档。 - 工程师执行
WriteCode或WriteCodeReview,生成代码并评审。
角色的行为由一组有序的动作序列驱动,并根据观察到的消息与自身记忆决定下一步动作。
消息与共享记忆
代理之间通过消息(Message) 传递信息,消息包含内容、发送者、接收者以及可选的共享文档引用。例如,产品经理发布 PRD 后,架构师可以订阅该消息,并在动作中引用 PRD 文档,确保后续产出在语义上保持一致。
所有消息被记录在全局记忆(Environment.memory)中,每个角色还可以维护私有记忆(通过 Role._rc.memory),实现上下文的持久感知。
环境与项目仓库
Environment 是代理的运行时容器,模拟了一个共享工作空间。它支持文件系统级别的共享产物,所有代理可以将生成的文档、图表和代码发布到 workspace 目录,也可从中读取他人产出。这种设计让代理间的协作超越“对话”,进入“共同建造”的层次。
软件公司 SOP 详解:从一句话需求到可执行代码
MetaGPT 定义了一套标准操作流程(SOP),将软件创作过程拆分为可复现的协作步骤。以默认的单次运行任务为例:
1. 需求分析
产品经理(ProductManager)收到用户的原始需求(如“开发一个贪吃蛇游戏”),执行解析动作,生成结构化的 产品需求文档(PRD)。文档包含项目背景、目标用户、功能模块、验收标准等,并使用特定模板约束 LLM 输出。
2. 系统设计
架构师(Architect)读取 PRD,执行 WriteDesign 动作,输出 系统设计文档。该文档包含技术栈选择、系统架构图(Mermaid 格式)、模块划分、接口定义和数据流描述。
3. 任务分配与编码
项目经理(ProjectManager,可选)或架构师将系统设计拆解为具体开发任务,分配给一个或多个工程师(Engineer)。工程师基于 PRD 和设计文档,为每个模块执行 WriteCode 动作,生成可执行代码文件。代码会遵循项目规范,并包含必要的注释。
4. 代码评审与质量保证
另一名工程师或专职 QA 代理执行 WriteCodeReview 和 WriteTest 动作,对生成代码进行评审、编写测试用例,并输出测试报告。整个过程形成了完整的“需求→设计→编码→测试”闭环。
高级特性:增量开发与独立消息路由
除了默认的瀑布式流程,MetaGPT 还支持:
- 增量开发:通过
IncrementalDevelopment动作,允许开发者基于已有代码库,只修改或新增指定功能,保留历史产物。 - 消息路由:角色可订阅特定类型的消息(如
Role._watch设置),实现精准的信息同步,避免广播风暴。 - 人机协同:在任意阶段,用户可介入代理决策,扮演某个角色或提供反馈,形成人机混合团队。
快速上手:构建你的第一个软件公司
环境准备
确保已安装 Python 3.10+,并配置好 LLM API(默认使用 OpenAI,可通过配置文件兼容其他模型)。建议使用虚拟环境:
pip install metagpt
或克隆最新仓库安装开发版本:
git clone https://github.com/geekan/MetaGPT.git
cd MetaGPT
pip install -e .
配置 API 密钥
在项目根目录创建 config/config2.yaml 或通过环境变量设置:
llm:
api_type: "openai"
model: "gpt-4-turbo" # 或 gpt-3.5-turbo-0125
api_key: "YOUR_OPENAI_API_KEY"
也可直接设置 OPENAI_API_KEY 环境变量。
一行命令启动软件公司
MetaGPT 提供了命令行入口,最简单的方式是:
metagpt "开发一个命令行贪吃蛇游戏,使用Python,支持WASD操作"
执行后,系统将自动启动默认的软件公司团队,依次完成需求、设计、编码,并在 workspace/ 目录下输出完整项目。终端会打印每个代理的执行日志。
使用 Python 脚本自定义团队
若需要更灵活的控制,可通过代码定制角色和流程:
import asyncio
from metagpt.roles import ProductManager, Architect, Engineer
from metagpt.team import Team
from metagpt.environment import Environment
async def main():
env = Environment()
team = Team()
team.hire([
ProductManager(),
Architect(),
Engineer(n_engineer=2) # 两名工程师
])
team.run_project("开发一个待办事项Web应用")
await team.run(n_round=4) # 执行4轮交互
asyncio.run(main())
查看产出物
任务结束后,进入 workspace/ 目录,你会看到按时间戳或项目命名的子文件夹,其中包含:
prd.md:产品需求文档design.md:系统设计文档src/:生成的源代码文件tests/:测试用例(若启用)resources/:可能包含生成的图表、思维导图等
这些结构化产物不仅是结果,更是代理之间协作的“思考轨迹”。
进阶:理解 MetaGPT 的关键设计原则
结构化输出驱动的协作
区别于简单链式调用,MetaGPT 强制每个关键动作产生格式化的文档(如 JSON、Markdown)。这带来两大好处:
- 提升 LLM 输出确定性:明确的模板和示例减少幻觉,使下游代理更容易解析和利用上游产出。
- 模拟真实工作流:文档成为代理间同步的“真相来源”,而非模糊的文本记忆。
可组装的代理市场
MetaGPT 提供了丰富的预制角色和动作,你可以像搭积木一样组建团队。例如:
- 加入
QaEngineer增加测试环节。 - 使用
Searcher赋予代理搜索能力,获取实时信息。 - 引入用户代理(
UserProxy)实现问答式交互。
面向企业级应用的拓展能力
MetaGPT 支持自定义 SOP、集成多种 LLM、对接向量数据库实现长记忆,甚至可与实际 IDE 或代码仓库联动,朝着“自主软件开发”的目标演进。
常见问题
Q:必须使用 GPT-4 吗? A:官方推荐 GPT-4 以获得最佳结构化输出,但也可以通过配置使用 GPT-3.5 或其他兼容模型(如开源模型通过 LiteLLM 适配)。性能会因模型能力而异。
Q:生成代码能直接运行吗? A:MetaGPT 致力于生成可运行代码,但复杂项目可能需要人工微调。它不仅生成代码,还一并给出依赖、入口和测试,大幅降低集成成本。
Q:如何加入人工反馈?
A:可以在任意阶段使用 UserProxy 角色介入,或通过修改代理的记忆和输入消息来干预决策。这种方式实现了人机协作。
学习资源与下一步
- 官方文档:docs.deepwisdom.ai
- GitHub 仓库:github.com/geekan/MetaGPT (包含丰富示例和论文)
- 社区:加入 Discord 或微信群,获取最新动态与技术支持
尝试用 MetaGPT 解决你自己的编程任务,从简单脚本到完整应用,逐步熟悉每个角色的行为和定制方法。多代理协作的潜力远不止于代码生成,任何需要标准流程、多视角决策的领域,都将是这套范式的用武之地。