引言
MetaGPT 是一个创新的多代理框架,基于大型语言模型(LLM),通过模拟软件公司的运作流程,将复杂任务分解为多个代理协作完成。它以一句需求输入,输出用户故事、竞品分析、需求文档、数据结构、API 设计等完整开发流程,核心理念为 Code = SOP(Team),即通过标准操作流程(SOP)协调由 LLM 驱动的代理团队。本文档结合 MetaGPT 官方文档、概念教程 及网络资源,旨在提供一份全面的 MetaGPT 中文指导文档,帮助用户快速理解和使用该框架。需要注意的是,本文档为简化说明,可能存在一定遗漏,建议参考官方文档或 GitHub 仓库 获取更详细内容。
MetaGPT 核心概述
MetaGPT 通过为多个代理分配不同角色(如产品经理、架构师、项目经理、工程师等),模拟软件开发团队的协作,适用于软件开发、研究、游戏开发等多种场景。例如,输入 metagpt "设计一个类似今日头条的推荐系统"
,即可生成从需求分析到代码实现的完整输出。
核心特点
- 多代理协作:通过角色分工,代理间通过消息传递和动作输出实现高效协作。
- 灵活性:支持用户自定义代理角色、动作和工具,适用于多样化应用场景。
- 开源支持:可集成多种 LLM(如 OpenAI、Claude、LLaMA 等),并支持工具扩展(如 OCR、搜索)。
- SOP 驱动:以标准操作流程为核心,确保任务分解和执行的结构化。
核心概念
1. 代理(Agent)
代理是 MetaGPT 的核心执行单元,被视为数字化的“有机体”,具备以下能力:
- 大型语言模型(LLM):作为代理的“大脑”,驱动思考、决策和动作。
- 观察(Observation):代理感知环境的方式,接收其他代理的消息、文本输入、图像或音频等。
- 思考(Thought):基于观察和记忆,分析并制定行动方案,通常由 LLM 驱动。
- 动作(Action):代理的响应行为,如生成代码、执行工具操作等。
- 记忆(Memory):存储过往经验或上下文,提供决策依据。
示例:在软件开发中,产品经理代理生成需求文档,工程师代理观察文档并编写代码。
2. 通信(Communication)
代理通过发布消息或动作输出到共享环境中实现信息交换。例如,代理 Alice 发布需求文档,代理 Bob 观察后编写代码,代理 Charlie 审查代码并发布反馈,形成协作闭环。
3. 经济(Economy)
经济机制管理多代理环境中的资源分配和任务优先级,确保高效协作。
4. 多代理框架
MetaGPT 通过角色分工模拟软件公司运作。例如,一个团队可能包括:
- 产品经理:定义用户故事和需求。
- 架构师:设计系统架构和 API。
- 项目经理:协调任务和资源。
- 工程师:实现代码。
- 测试者/审查者:验证代码质量。
安装与配置
1. 安装 MetaGPT
MetaGPT 支持 Docker 和本地安装,以下为 Docker 安装步骤:
# 拉取官方镜像
docker pull metagpt/metagpt:latest
# 创建配置和工作目录
mkdir -p /opt/metagpt/{config,workspace}
# 获取并编辑配置文件
docker run --rm metagpt/metagpt:latest cat /app/metagpt/config/config2.yaml > /opt/metagpt/config/config2.yaml
vim /opt/metagpt/config/config2.yaml
本地安装可通过 pip install metagpt
或克隆 GitHub 仓库:
git clone https://github.com/geekan/MetaGPT.git
cd MetaGPT
pip install -r requirements.txt
额外工具支持:
- RAG:
pip install 'metagpt[rag]'
用于检索增强生成。 - OCR:
pip install 'metagpt[ocr]'
用于图像文本提取。 - 搜索:
pip install 'metagpt[search-ddg]'
或pip install 'metagpt[search-google]'
用于搜索功能。
2. 配置 LLM API
MetaGPT 支持多种 LLM(如 OpenAI、Claude、LLaMA)。以 OpenAI 为例,编辑 config2.yaml
:
llm:
api_type: 'openai'
model: 'gpt-4-turbo'
base_url: 'https://api.openai.com/v1'
api_key: 'YOUR_API_KEY'
对于开源模型(如 LLaMA),需部署模型并配置 base_url
(如 http://127.0.0.1:11434/api
)。
使用 MetaGPT
1. 快速入门
运行简单项目(如 CLI 贪吃蛇游戏):
docker run --rm \
--privileged \
-v /opt/metagpt/config/config2.yaml:/app/metagpt/config/config2.yaml \
-v /opt/metagpt/workspace:/app/metagpt/workspace \
metagpt/metagpt:latest \
metagpt "Write a cli snake game"
或本地运行:
metagpt "Write a cli snake game"
MetaGPT 将生成项目文件夹,包含需求文档、代码和测试用例。
2. 自定义代理与动作
用户可通过定义 Action
和 Role
自定义代理。例如,创建一个 SimpleCoder
代理:
from metagpt.actions import Action
class SimpleWriteCode(Action):
PROMPT_TEMPLATE: str = """
Write a python function that can {instruction}.
Return ```python your_code_here ``` with NO other texts, your code:
"""
name: str = "SimpleWriteCode"
async def run(self, instruction: str):
prompt = self.PROMPT_TEMPLATE.format(instruction=instruction)
rsp = await self._aask(prompt)
code_text = parse_code(rsp)
return code_text
通过 _watch
方法设置代理间协作:
self._watch([SimpleWriteCode])
这使代理观察其他代理的输出并触发相应动作。
3. 工具集成
MetaGPT 支持自定义工具。例如,创建一个计算阶乘的工具:
from metagpt.tools.tool_registry import register_tool
import math
@register_tool()
def calculate_factorial(n):
"""Calculate the factorial of a non-negative integer."""
if n < 0:
raise ValueError("Input must be a non-negative integer")
return math.factorial(n)
在 DataInterpreter
中使用:
from metagpt.roles.di.data_interpreter import DataInterpreter
async def main(requirement: str):
role = DataInterpreter(tools=["calculate_factorial"])
await role.run(requirement)
asyncio.run(main("Please calculate the factorial of 5."))
工具需放置在 metagpt/tools/libs
目录,并使用 @register_tool
注册。
4. 增量开发
MetaGPT 支持增量开发。例如,基于现有贪吃蛇游戏添加新功能:
metagpt "Add a randomly appearing enemy that lasts for 5 seconds." --project-path "/path/to/snake_game" --run-tests --n-round 20
这会在现有项目上迭代,生成更新后的代码。
5. 人类参与
用户可通过设置 is_human=True
参与 SOP,例如担任审查者角色:
team.hire([
SimpleCoder(),
SimpleTester(),
SimpleReviewer(is_human=True)
])
人类审查者可通过终端输入反馈,指导代理优化输出。
实践应用
MetaGPT 适用于多种场景:
- 软件开发:生成完整项目,包括需求、架构和代码。
- 研究:代理可搜索网络并生成报告。
- 游戏开发:如 Flappy Bird 或贪吃蛇游戏的快速原型开发。
- 数据分析:结合 OCR 或搜索工具处理发票、生成报表。
示例:开发 Flappy Bird 游戏:
metagpt "write a flappy bird game without any obstacles" --project-name "flappy_bird" --run-tests --n-round 20
MetaGPT 将生成游戏代码、测试用例和文档。
- LLM 选择:为获得稳定结果,推荐使用 GPT-4;开源模型(如 LLaMA)可能需优化提示词。
- 网络配置:若 OpenAI API 不可用,可配置代理:
llm: api_type: 'openai' base_url: 'https://api.openai-forward.com/v1' api_key: 'YOUR_API_KEY'
- 局限性:人类参与目前通过终端输入,复杂输入需优化提示词格式。
通过掌握 MetaGPT 的核心概念和操作方法,用户可快速构建高效的多代理系统,应用于各种复杂任务场景。