MetaGPT 整体架构

248 阅读7分钟

MetaGPT 整体架构

1. 项目概述

MetaGPT 是一个基于多智能体协作的软件开发框架,核心设计理念是通过模拟真实软件公司的组织结构和标准化工作流程,实现从自然语言需求到可执行代码的全流程自动化。

1.1 核心特性

  • 角色专业化:模拟软件公司中的产品经理、架构师、工程师等角色,各司其职
  • 流程标准化:遵循行业最佳实践,实现需求分析→设计→开发→测试的标准化流程
  • 工具链集成:内置代码生成、文档生成、测试生成等多种开发工具
  • 大模型适配:兼容主流LLM模型,包括OpenAI、Anthropic、Google Gemini等
  • 可扩展性:支持自定义角色、动作和工具,满足特定业务需求

1.2 应用场景

  • 快速原型开发
  • 自动化软件开发
  • 教育领域的编程教学
  • 辅助开发人员提高工作效率

2. 目录结构

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                  # 安装配置

3. 核心模块

3.1 角色系统(metagpt/roles)

角色系统是MetaGPT的核心,每个角色模拟软件公司中的特定职位,拥有独立的专业能力和职责范围。

核心角色实现
  • ProductManager (metagpt/roles/product_manager.py)

    • 核心能力:需求分析、用户故事提取、PRD文档生成
    • 关键方法:analyze_requirements(), generate_prd()
    • 输出产物:产品需求文档(PRD.md)
  • Architect (metagpt/roles/architect.py)

    • 核心能力:技术选型、架构设计、API规划
    • 关键方法:design_architecture(), generate_api_spec()
    • 输出产物:架构设计文档、API规格说明书
  • 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对象传递信息,支持同步和异步两种协作模式。

3.2 动作系统(metagpt/actions)

动作系统是角色能力的具体实现,每个动作封装了一个原子功能单元,遵循单一职责原则。

动作执行流程
  1. 接收输入参数(通常来自角色的思考过程)
  2. 调用工具链或大模型处理任务
  3. 格式化输出结果
  4. 返回执行状态和产物
核心动作示例
  • 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)

    • 功能:根据PRD设计RESTful API接口
    • 输出:OpenAPI规范文档
  • WriteCode (metagpt/actions/write_code.py)

    • 功能:根据API规范和设计文档生成代码
    • 支持语言:Python、JavaScript、Java等
    • 代码质量:自动遵循PEP8等编码规范
  • WriteTest (metagpt/actions/write_test.py)

    • 功能:生成单元测试和集成测试
    • 测试框架:pytest、JUnit等
    • 覆盖率目标:自动生成达到80%+覆盖率的测试用例

3.3 大模型交互(metagpt/llm)

大模型交互模块提供统一的LLM调用接口,实现了模型适配、请求管理和响应处理的标准化。

核心组件
  • LLM抽象基类:定义统一的模型接口
  • ModelConfig:模型配置管理
  • PromptTemplate:提示词模板系统
  • RateLimiter:请求限流与重试机制
支持的模型类型
  • OpenAI系列:GPT-3.5, GPT-4, GPT-4 Turbo
  • Anthropic系列:Claude 2, Claude Instant
  • Google系列:Gemini Pro, Gemini Ultra
  • 开源模型:Llama 2, Vicuna (需配合本地部署)
调用示例
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")

4. 工作流程

MetaGPT工作流程模拟了真实软件开发过程,通过角色协作和任务流转实现需求到产品的转化。

4.1 核心流程

sequenceDiagram
    participant User
    participant ProductManager
    participant Architect
    participant Engineer
    participant QAEngineer
    participant Environment

    User->>Environment: 提交需求
    Environment->>ProductManager: 分配需求分析任务
    ProductManager->>ProductManager: 分析需求
    ProductManager->>Environment: 输出PRD文档

    Environment->>Architect: 分配架构设计任务
    Architect->>Architect: 设计系统架构
    Architect->>Environment: 输出架构文档

    Environment->>Engineer: 分配编码任务
    Engineer->>Engineer: 编写代码
    Engineer->>Environment: 输出源代码

    Environment->>QAEngineer: 分配测试任务
    QAEngineer->>QAEngineer: 执行测试
    QAEngineer->>Environment: 输出测试报告

    Environment->>User: 交付最终产品

4.2 详细阶段说明

阶段1:需求分析
  • 输入:用户自然语言需求
  • 输出:结构化PRD文档
  • 关键活动:
    • 需求提取与细化
    • 用户故事编写
    • 功能优先级排序
    • 验收标准定义
阶段2:架构设计
  • 输入:PRD文档
  • 输出:架构设计文档、技术选型报告、API规范
  • 关键活动:
    • 系统架构设计
    • 技术栈选型
    • 数据库设计
    • API接口定义
阶段3:代码实现
  • 输入:架构设计文档、API规范
  • 输出:源代码、单元测试
  • 关键活动:
    • 模块划分
    • 代码编写
    • 单元测试生成
    • 代码审查
阶段4:测试验收
  • 输入:源代码、需求文档
  • 输出:测试报告、缺陷列表
  • 关键活动:
    • 集成测试
    • 功能测试
    • 性能测试
    • 用户验收测试

4.3 迭代机制

支持敏捷开发模式,每个迭代周期为1-2周,包含:

  • 迭代计划会议
  • 每日站会(模拟)
  • 迭代评审
  • 迭代回顾

5. 配置系统

配置系统采用YAML格式文件管理全局参数,支持多环境配置切换和动态参数调整。

5.1 配置文件结构

MetaGPT-main/
├── config/
│   ├── config2.yaml        # 主配置文件
│   ├── config2.default.yaml # 默认配置模板
│   └── examples/
│       ├── openai.yaml     # OpenAI模型配置示例
│       ├── anthropic.yaml  # Anthropic模型配置示例
│       └── azure.yaml      # Azure OpenAI配置示例

5.2 核心配置项详解

全局设置
# 基础配置
project_name: "MetaGPT-Project"
workspace: "./workspace"
language: "en"
log_level: "INFO"

# 缓存设置
cache: 
  type: "redis"  # 支持: redis, sqlite, memory
  host: "localhost"
  port: 6379
  ttl: 3600
LLM模型配置
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

5.3 环境配置切换

通过ENV环境变量指定配置环境:

# 使用默认配置
python main.py

# 使用开发环境配置
ENV=dev python main.py

# 使用生产环境配置
ENV=prod python main.py

5.4 动态配置更新

支持运行时动态调整配置:

from metagpt.config import Config

config = Config()
# 修改配置
config.llm.temperature = 0.5
# 保存配置
config.save()

6. 扩展机制

MetaGPT提供灵活的插件扩展系统,允许开发者通过metagpt/ext目录添加自定义功能,无需修改核心代码。

6.1 插件目录结构

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

6.2 插件开发规范

插件接口定义

所有插件需实现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)

6.3 内置插件介绍

WebBrowser插件
  • 功能:网页浏览与内容提取
  • 使用场景:获取实时信息、文档检索
  • 核心方法browse(url), extract_content(), take_screenshot()
MediaProcessor插件
  • 功能:图片、音频、视频处理
  • 支持格式:JPG/PNG, MP3/WAV, MP4
  • 核心方法ocr_image(), transcribe_audio(), extract_video_frames()
APIGateway插件
  • 功能:外部API集成与管理
  • 支持协议:REST, GraphQL, gRPC
  • 核心特性:请求限流、认证管理、响应缓存

6.4 插件使用示例

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

6.5 插件开发流程

  1. 创建插件目录(如metagpt/ext/my_plugin
  2. 实现IPlugin接口
  3. 编写插件配置和依赖文件
  4. 注册插件
  5. 编写单元测试
  6. 提交PR到主仓库