项目总览
相关源文件
本页面内容基于以下源文件生成:
MetaGPT 是一个多智能体框架,旨在通过为 GPT 分配不同角色来形成协作实体,从而处理复杂任务。该项目支持多语言文档,包括中文、英文、法文和日文,体现了其国际化设计理念。根据 README.md:1-39 的描述,MetaGPT 的核心理念是让 GPT 模拟软件公司的工作方式,通过角色协作来完成更复杂的任务。
项目的启动入口逻辑已从 startup.py 迁移至 software_company.py,这一变更在 metagpt/startup.py:1-10 中有明确说明,标记为已弃用并将在未来移除。
核心架构设计
MetaGPT 的核心架构围绕 Team 类展开,该类作为多智能体协作的核心容器,负责管理角色、环境和投资。根据 metagpt/team.py:32-138,Team 类继承自 BaseModel,包含以下关键组件:
Team 类职责边界
核心职责:
- 管理多个智能体角色(Agent)的生命周期
- 维护智能体间的通信环境(Environment)
- 控制项目预算与投资管理
- 提供序列化与反序列化能力,支持项目恢复
不负责:
- 具体业务逻辑的实现(由各 Role 负责)
- LLM 调用的直接管理(由 Context 和 LLM 模块负责)
关键数据结构
python1class Team(BaseModel): 2 env: Optional[Environment] = None # 智能体通信环境 3 investment: float = Field(default=10.0) # 项目投资额度 4 idea: str = Field(default="") # 项目创意/需求 5 use_mgx: bool = Field(default=True) # 是否使用 MGX 环境
Team 类的初始化逻辑支持两种环境模式:标准 Environment 和 MGXEnv,这一选择由 use_mgx 参数控制(metagpt/team.py:48-53)。
序列化机制
项目采用 JSON 格式进行状态持久化,SerializationMixin 类提供了通用的序列化与反序列化能力。根据 metagpt/schema.py:72-191,序列化路径默认为 ./workspace/storage/ClassName.json,支持异常处理和文件回退机制。
python1# 序列化示例(metagpt/schema.py:74-93) 2def serialize(self, file_path: str = None) -> str: 3 file_path = file_path or self.get_serialization_path() 4 serialized_data = self.model_dump() 5 write_json_file(file_path, serialized_data, use_fallback=True) 6 return file_path
架构图
正在加载图表渲染器...
架构要点说明:
- 入口层通过
startup()函数接收 CLI 参数,委托给generate_repo()执行核心逻辑 Team类作为核心容器,管理Environment和多个Role实例- 角色层包含 5 种预定义角色,模拟软件公司团队结构(metagpt/software_company.py:46-53)
- 基础设施层通过
Context类统一管理配置、LLM 和日志
运行机制与流程
完整运行流程
项目的运行流程从 CLI 入口开始,经过团队组建、投资分配,最终进入多轮迭代执行。根据 metagpt/software_company.py:14-153,核心流程如下:
阶段一:初始化与配置
python1# metagpt/software_company.py:29-41 2config.update_via_cli(project_path, project_name, inc, reqa_file, max_auto_summarize_code) 3ctx = Context(config=config)
配置更新通过 update_via_cli 方法完成,支持项目路径、增量模式等参数。Context 对象作为全局上下文传递给 Team。
阶段二:团队组建
python1# metagpt/software_company.py:44-54 2company = Team(context=ctx) 3company.hire([ 4 TeamLeader(), 5 ProductManager(), 6 Architect(), 7 Engineer2(), 8 DataAnalyst(), 9])
hire 方法将角色添加到环境中(metagpt/team.py:83-85),每个角色继承自 Role 基类。
阶段三:投资与执行
python1# metagpt/software_company.py:71-72 2company.invest(investment) 3asyncio.run(company.run(n_round=n_round, idea=idea))
invest 方法设置预算上限(metagpt/team.py:92-96),run 方法启动多轮迭代。
关键调用链时序图
正在加载图表渲染器...
流程要点说明:
- CLI 参数通过
typer库解析,支持投资额、轮次、代码审查等选项(metagpt/software_company.py:78-101) run_project方法将用户需求封装为Message对象并发布到环境(metagpt/team.py:102-107)- 主循环检查
env.is_idle状态,若所有角色空闲则提前终止(metagpt/team.py:128-131) - 每轮迭代前检查预算,超出时抛出
NoMoneyException(metagpt/team.py:98-100)
错误处理与边界条件
预算超限处理:
python1# metagpt/team.py:98-100 2def _check_balance(self): 3 if self.cost_manager.total_cost >= self.cost_manager.max_budget: 4 raise NoMoneyException(self.cost_manager.total_cost, f"Insufficient funds: {self.cost_manager.max_budget}")
恢复路径验证:
python1# metagpt/software_company.py:64-66 2if not stg_path.exists() or not str(stg_path).endswith("team"): 3 raise FileNotFoundError(f"{recover_path} not exists or not endswith `team`")
反序列化文件缺失:
python1# metagpt/team.py:72-75 2if not team_info_path.exists(): 3 raise FileNotFoundError( 4 "recover storage meta file `team.json` not exist, not to recover and please start a new project." 5 )
配置与基础设施
配置管理机制
配置系统采用分层设计,CLIParams 处理命令行参数,Config 类继承并扩展为完整配置。根据 metagpt/config2.py:30-178,关键配置项包括:
| 配置类 | 职责 | 关键字段 |
|---|---|---|
CLIParams | CLI 参数模型 | project_path, project_name, inc, reqa_file |
Config | 完整配置 | llm, 继承自 CLIParams 的所有字段 |
参数验证逻辑:
python1# metagpt/config2.py:40-46 2@model_validator(mode="after") 3def check_project_path(self): 4 if self.project_path: 5 self.inc = True 6 self.project_name = self.project_name or Path(self.project_path).name 7 return self
当指定 project_path 时,自动启用增量模式(inc=True)并推断项目名称。
日志系统设计
日志系统基于 loguru 库构建,支持多级别输出和 LLM 流日志。根据 metagpt/logs.py:27-73:
日志级别配置:
python1# metagpt/logs.py:40-52 2def define_log_level(print_level="INFO", logfile_level="DEBUG", name: str = None): 3 global _print_level 4 _print_level = print_level 5 6 log_name = f"{name}_{formatted_date}" if name else formatted_date 7 _logger.remove() 8 _logger.add(sys.stderr, level=print_level) 9 _logger.add(METAGPT_ROOT / f"logs/{log_name}.txt", level=logfile_level) 10 return _logger
LLM 流日志:
python1# metagpt/logs.py:58-73 2def log_llm_stream(msg): 3 queue = get_llm_stream_queue() 4 if queue: 5 queue.put_nowait(msg) 6 _llm_stream_log(msg)
支持将 LLM 响应流式输出到队列,便于实时展示。
项目路径管理
路径管理通过环境变量和文件系统检测确定项目根目录。根据 metagpt/const.py:12-35:
python1# metagpt/const.py:19-35 2def get_metagpt_root(): 3 project_root_env = os.getenv("METAGPT_PROJECT_ROOT") 4 if project_root_env: 5 project_root = Path(project_root_env) 6 else: 7 project_root = get_metagpt_package_root() 8 for i in (".git", ".project_root", ".gitignore"): 9 if (project_root / i).exists(): 10 break 11 else: 12 project_root = Path.cwd() 13 return project_root
优先级:环境变量 > 包根目录检测 > 当前工作目录。
核心特性与能力
多智能体协作
MetaGPT 的核心特性是通过角色分工实现复杂任务的协作处理。根据 metagpt/software_company.py:46-53,默认团队包含 5 种角色:
| 角色 | 职责 | 输出产物 |
|---|---|---|
| TeamLeader | 团队协调与任务分配 | 任务计划 |
| ProductManager | 需求分析与 PRD 编写 | 产品需求文档 |
| Architect | 系统架构设计 | 架构设计文档 |
| Engineer2 | 代码实现 | 源代码 |
| DataAnalyst | 数据分析与洞察 | 分析报告 |
增量开发支持
项目支持在现有代码库基础上进行增量开发,通过 inc 参数和 project_path 指定旧版本路径(metagpt/software_company.py:86-90)。
项目恢复机制
通过 recover_path 参数可以从序列化存储中恢复项目状态(metagpt/software_company.py:99),支持断点续传和状态回滚。
量化能力指标
| 指标 | 数值 | 说明 |
|---|---|---|
| 预定义角色数 | 5+ | PM、Architect、Engineer 等 |
| 支持语言数 | 4 | 中、英、法、日 |
| 默认投资额 | $3.0 | 可通过 CLI 调整 |
| 默认迭代轮次 | 5 | 可配置,测试模式需 8+ |
| 序列化格式 | JSON | 支持完整状态恢复 |
技术栈与依赖
| 技术组件 | 用途 | 版本要求 |
|---|---|---|
| Python | 核心语言 | >= 3.8(推测) |
| Pydantic | 数据验证与模型 | v2(BaseModel) |
| Typer | CLI 框架 | 用于命令行解析 |
| Loguru | 日志系统 | 多级别日志管理 |
| Asyncio | 异步执行 | 协程支持 |
| YAML | 配置文件 | config2.yaml |
目录结构
metagpt/
├── software_company.py # 主入口与 CLI
├── startup.py # 已弃用入口
├── team.py # 多智能体容器
├── config2.py # 配置管理
├── context.py # 全局上下文
├── llm.py # LLM 接口
├── logs.py # 日志系统
├── schema.py # 数据模型
├── const.py # 常量定义
└── roles/ # 角色实现
├── product_manager.py
├── architect.py
├── engineer.py
└── ...
适用场景
- 自动化软件开发:从需求到代码的完整流程自动化
- 原型快速生成:基于创意快速生成可运行原型
- 代码库增量开发:在现有项目基础上添加新功能
- 多智能体研究:作为多智能体协作的研究平台
- 教育演示:展示 AI 驱动的软件工程流程
报告阅读路线图
正在加载图表渲染器...
推荐阅读顺序:
- 项目总览(当前章节):了解整体定位与核心概念
- 架构设计:深入理解模块划分与依赖关系
- 数据流分析:掌握消息传递与状态管理机制
- API 设计:学习接口规范与扩展点
- 部署与运维:实践生产环境部署
