MetaGPT 是一个基于多智能体协作的软件开发框架,核心设计理念是通过模拟真实软件公司的组织结构和标准化工作流程,实现从自然语言需求到可执行代码的全流程自动化。
MetaGPT-main/
├── .github/ # GitHub配置文件
│ ├── ISSUE_TEMPLATE/ # 问题模板
│ └── workflows/ # CI/CD工作流
├── config/ # 配置文件目录
│ ├── config2.yaml # 主配置文件
│ ├── config2.example.yaml # 配置示例模板
│ └── examples/ # 模型配置示例
│ ├── openai-gpt-4-turbo.yaml
│ ├── anthropic-claude-3-5-sonnet.yaml
│ └── google-gemini.yaml
├── docs/ # 项目文档
│ ├── install/ # 安装指南
│ ├── tutorial/ # 使用教程
│ └── resources/ # 资源文件
├── examples/ # 示例代码
│ ├── di/ # 数据智能示例
│ ├── rag/ # 检索增强生成示例
│ ├── ui_with_chainlit/ # 可视化界面示例
│ └── werewolf_game/ # 狼人杀游戏示例
├── metagpt/ # 核心代码
│ ├── actions/ # 原子操作
│ │ ├── requirement_analysis/ # 需求分析相关动作
│ │ ├── write_code.py # 代码编写动作
│ │ └── write_prd.py # PRD生成动作
│ ├── roles/ # 角色定义
│ │ ├── architect.py # 架构师角色
│ │ ├── engineer.py # 工程师角色
│ │ └── product_manager.py # 产品经理角色
│ ├── llm/ # 大模型交互
│ ├── tools/ # 工具集
│ ├── memory/ # 智能体记忆系统
│ ├── team/ # 团队协作管理
│ ├── ext/ # 插件扩展目录
│ ├── software_company.py # 模拟软件公司核心类
│ └── utils/ # 工具函数
├── tests/ # 单元测试和集成测试
├── requirements.txt # 项目依赖
└── setup.py # 安装配置
角色系统是MetaGPT的核心,每个角色模拟软件公司中的特定职位,拥有独立的专业能力和职责范围。
ProductManager (metagpt/roles/product_manager.py
)
analyze_requirements()
, generate_prd()
Architect (metagpt/roles/architect.py
)
design_architecture()
, generate_api_spec()
Engineer (metagpt/roles/engineer.py
)
write_code()
, generate_unit_test()
, integrate_modules()
QA Engineer (metagpt/roles/qa_engineer.py
)
design_test_cases()
, run_tests()
, generate_test_report()
角色间通过Environment
类实现通信,使用Message
对象传递信息,支持同步和异步两种协作模式。
动作系统是角色能力的具体实现,每个动作封装了一个原子功能单元,遵循单一职责原则。
WritePRD (metagpt/actions/write_prd.py
)
class WritePRD(Action):
def __init__(self, name: str = "WritePRD"):
super().__init__(name)
self.description = "生成产品需求文档"
async def run(self, requirements: str) -> str:
# 调用LLM生成PRD
prompt = self._generate_prompt(requirements)
prd_content = await llm().aask(prompt)
# 保存PRD到文件
self._save_prd(prd_content)
return prd_content
DesignAPI (metagpt/actions/design_api.py
)
WriteCode (metagpt/actions/write_code.py
)
WriteTest (metagpt/actions/write_test.py
)
大模型交互模块提供统一的LLM调用接口,实现了模型适配、请求管理和响应处理的标准化。
from metagpt.llm import llm
async def generate_code(prompt: str) -> str:
# 调用默认配置的LLM
response = await llm().aask(prompt)
return response
# 自定义模型配置
from metagpt.llm import LLMConfig
custom_llm = LLMConfig(model="claude-2", temperature=0.7)
response = await llm(custom_llm).aask("设计一个用户认证API")
MetaGPT工作流程模拟了真实软件开发过程,通过角色协作和任务流转实现需求到产品的转化。
支持敏捷开发模式,每个迭代周期为1-2周,包含:
配置系统采用YAML格式文件管理全局参数,支持多环境配置切换和动态参数调整。
MetaGPT-main/
├── config/
│ ├── config2.yaml # 主配置文件
│ ├── config2.default.yaml # 默认配置模板
│ └── examples/
│ ├── openai.yaml # OpenAI模型配置示例
│ ├── anthropic.yaml # Anthropic模型配置示例
│ └── azure.yaml # Azure OpenAI配置示例
# 基础配置
project_name: "MetaGPT-Project"
workspace: "./workspace"
language: "en"
log_level: "INFO"
# 缓存设置
cache:
type: "redis" # 支持: redis, sqlite, memory
host: "localhost"
port: 6379
ttl: 3600
llm:
api_type: "openai" # openai, anthropic, google, azure
model: "gpt-4"
temperature: 0.7
max_tokens: 4096
api_key: "${OPENAI_API_KEY}" # 支持环境变量引用
base_url: "https://api.openai.com/v1"
# 多模型配置示例
llm:
- api_type: "openai"
model: "gpt-4"
priority: 1 # 优先级,数字越小优先级越高
- api_type: "anthropic"
model: "claude-2"
priority: 2
通过ENV
环境变量指定配置环境:
# 使用默认配置
python main.py
# 使用开发环境配置
ENV=dev python main.py
# 使用生产环境配置
ENV=prod python main.py
支持运行时动态调整配置:
from metagpt.config import Config
config = Config()
# 修改配置
config.llm.temperature = 0.5
# 保存配置
config.save()
MetaGPT提供灵活的插件扩展系统,允许开发者通过metagpt/ext
目录添加自定义功能,无需修改核心代码。
metagpt/ext/
├── __init__.py
├── web_browser/
│ ├── __init__.py
│ ├── browser.py # 插件实现
│ ├── requirements.txt # 插件依赖
│ └── config.yaml # 插件配置
├── media_processor/
│ ├── __init__.py
│ ├── processor.py
│ └── config.yaml
└── api_gateway/
├── __init__.py
├── gateway.py
└── config.yaml
所有插件需实现IPlugin
接口:
from metagpt.ext import IPlugin
class MyPlugin(IPlugin):
name: str = "MyPlugin"
description: str = "自定义插件示例"
version: str = "0.1.0"
def __init__(self, config):
self.config = config
async def run(self, *args, **kwargs):
# 插件核心逻辑
pass
def close(self):
# 资源清理
pass
在插件目录的__init__.py
中注册插件:
from .browser import WebBrowser
def register_plugins(plugin_manager):
plugin_manager.register(WebBrowser)
browse(url)
, extract_content()
, take_screenshot()
ocr_image()
, transcribe_audio()
, extract_video_frames()
from metagpt.ext import plugin_manager
# 加载插件
browser = plugin_manager.get_plugin("WebBrowser")
# 使用插件
page_content = browser.browse("https://example.com")
print(page_content)
# 配置插件
browser.config.timeout = 30
metagpt/ext/my_plugin
)IPlugin
接口