数据截至 (上游 commit 11cdf466d042)
经典 SOP 流水线:一行需求跑成一个软件仓库
30 秒导读: 你敲一句"做个 2048 小游戏",MetaGPT 会像一家软件公司一样,把它依次交给 产品经理 → 架构师 → 项目经理 → 工程师 → 测试工程师,最后吐出一个能跑的代码仓库。本章讲 清楚这条"流水线"是怎 么用
set_actions+_watch静态拼出来的——没有中央调度器,全靠 每个角色声明"我产什么、我盯谁的产物",就自动接力成了一条 DAG(有向无环图)。
本章把前三章的抽象落地。你已经知道:
- 单个角色怎么"观察-思考-行动"地循环(见 01-role-loop.md);
- 一个
Action/ActionNode怎么把 LLM 输出变成结构化产物(见 02-action-actionnode.md); - 消息怎么在
Environment总线上路由、Team怎么驱动一轮轮跑(见 03-environment-message-bus.md)。
这一章只讲一件新事:把这些零件按"软件公司标准作业流程(SOP, Standard Operating
Procedure)"接成一条端到端的流水线。这就是 MetaGPT 论文里 Code = SOP(Team) 那个等式的
第一代实现。
1. 这是什么(零基础也能懂)
一句话定义: 经典 SOP 流水线 = 把"一句话需求"变成"一个软件仓库"的固定装配线,装配线上 的每个工位是一个 AI 角色。
它解决什么问题: 一个人让 LLM"直接写个游戏",往往得到一坨没结构、跑不起来的代码。真实 软件公司不这么干——先写需求文档、再出系统设计、再拆任务、再 编码、再测试。MetaGPT 把这套 人类的分工流程照搬给一群 AI,让它们各司其职、依次接力。
用起来什么样: 就一行命令。
metagpt "Create a 2048 game"
跑完,你会在工作区里得到一个真实目录:需求文档、系统设计、任务清单、源码、单元测试,各就各位。
一句话直觉: 把它想成一条工厂流水线。原料是"一句话需求",五个工位依次加工,每个工位 只做自己那道工序,把半成品往下一个工位传。关键是——没有工头站在中间喊"下一个";每个工位 自己盯着上游传送带,看到属于自己的半成品就动手。这个"自己盯上游"的机制,就是本章的核心。
2. 顶层全景(这条线大概怎么转)
2.1 五个工位与它们的产物
经典流水线由五个角色组成,一字排开:
| 工位(角色) | profile | 核心动作(产物) | 产出物 | 源码 |
|---|---|---|---|---|
| 产品经理 | Product Manager | WritePRD | 需求文档 PRD | roles/product_manager.py |
| 架构师 | Architect | WriteDesign | 系统设计(类图/时序图) | roles/architect.py |
| 项目经理 | Project Manager | WriteTasks | 任务清单 + 依赖包 | roles/project_manager.py |
| 工程师 | Engineer | WriteCode / WriteCodeReview / SummarizeCode | 源代码 | roles/engineer.py |
| 测试工程师 | Qa Engineer | WriteTest / RunCode / DebugError | 单元测试 + 运行结果 | roles/qa_engineer.py |
2.2 一张图看懂"接力"
怎么读这张图:从左到右是数据流;每根箭头上标的是"消息的 cause_by 标签"——也就是
"这条半成品是被哪个动作产出来的"。下游角色靠订阅这个标签把半成品接住。
一行需求
(UserRequirement)
│
▼
┌───────────────┐ cause_by=WritePRD ┌───────────────┐
│ ProductManager│ ───────────────────▶ │ Architect │
│ 产 WritePRD │ │ watch WritePRD│
└───────────────┘ │ 产 WriteDesign│
└───────┬───────┘
│ cause_by=WriteDesign
▼
┌───────────────┐
│ ProjectManager│
│watch WriteDesign
│ 产 WriteTasks │
└───────┬───────┘
│ cause_by=WriteTasks
▼
┌───────────────────────────┐
│ Engineer │
│ watch WriteTasks │
│ WriteCode→(CodeReview)→ │
│ SummarizeCode │
└───────┬───────────────────┘
│ cause_by=SummarizeCode
│ send_to="Edward"
▼
┌───────────────────────────┐
│ QaEngineer │
│ watch SummarizeCode │
│ WriteTest→RunCode→DebugError
└───────────────────────────┘
(若测出 bug,回传 Engineer)
一句话主线: 需求进 → PM 写 PRD → 架构师看到 PRD 就出设计 → 项目经理看到设计就拆任务 → 工程师看到任务就写码、审码、汇总 → 测试工程师看到汇总就写测试、跑测试、修错。全程没有一个 角色"点名"下一个角色(除了最后两步用了直达地址),每个角色只是盯着自己关心的动作标签。