Commit f1ece95158929aa29a32e66330992887f610396c

Authored by yibo
1 parent ce4b2bbc

docs: add Company Layer architecture design (24)

docs/system-design/24-company-layer-architecture.md 0 → 100644
  1 +# 24. Company Layer — 公司实例化架构
  2 +
  3 +> **版本**: v1.0 (需求分析 & 设计稿)
  4 +> **日期**: 2026-03-25
  5 +> **状态**: 规划中
  6 +> **前置**: 四层 Agent 架构 (02 号文档)、OKR 目标体系、Memory 系统、Heartbeat 系统
  7 +
  8 +---
  9 +
  10 +## 一、核心问题
  11 +
  12 +### 当前架构的瓶颈
  13 +
  14 +现有的 LemonBoss 采用**扁平化的单公司模型**:
  15 +
  16 +```
  17 +data/agents/
  18 +├── master ← 用户唯一的交互入口
  19 +├── ceo ← 单一 CEO
  20 +├── qa-judge ← 单一 QA
  21 +├── poet ← 扁平挂在全局下
  22 +├── innovator ← 扁平挂在全局下
  23 +└── ...
  24 +```
  25 +
  26 +**问题:**
  27 +1. **耦合**:所有 Agent 共存于同一个 `data/agents/` 目录,无法区分"做自媒体的编辑"和"做游戏的编辑"。
  28 +2. **CEO 单例**:只有一个 CEO,如果同时要经营两家公司(自媒体 + 漫剧),CEO 要同时管两条完全不同的业务线,OKR 冲突、记忆污染。
  29 +3. **无法独立闭环**:没有"公司"这个边界,Agent 无法形成一个可以 24 小时自主运转、独立迭代的闭合体。
  30 +4. **无法并行扩展**:用户想创建第二家、第三家公司时,只能不断往同一个池里加人,而非开辟独立的组织空间。
  31 +
  32 +### 设计目标
  33 +
  34 +用户对 Master 说:**"帮我创建一家做公众号运营的公司"**,系统应该:
  35 +1. 创建一个独立的 **Company 实例**(如 `wechat-media-co`)
  36 +2. 为该公司分配(或新建)一个 **CEO Agent**
  37 +3. CEO 自主规划战略、定义 SOP、创建所需的 Role Agent
  38 +4. 公司内部形成**独立闭环**:从内容策划 → 创作 → 审核 → 发布 → 数据回收 → 策略调整
  39 +5. 用户后续再说"帮我创建一家做漫剧的公司",系统创建第二个完全隔离的 Company 实例
  40 +
  41 +---
  42 +
  43 +## 二、架构演进:从扁平到层级
  44 +
  45 +### 2.1 演进前 vs 演进后
  46 +
  47 +```
  48 + 【演进前】扁平模型 【演进后】Company 模型
  49 + ───────────────── ──────────────────────
  50 +
  51 + User (你) User (你)
  52 + │ │
  53 + └── Master └── Master (唯一, 全局)
  54 + │ │
  55 + ├── CEO ├── Company: 自媒体公司
  56 + ├── qa-judge │ ├── CEO (该公司专属)
  57 + ├── poet │ ├── qa-judge
  58 + ├── innovator │ ├── content-writer
  59 + └── ... │ ├── editor
  60 + │ ├── publisher
  61 + (所有人在同一个池子) │ └── data-analyst
  62 + │
  63 + ├── Company: 漫剧工作室
  64 + │ ├── CEO (另一个专属)
  65 + │ ├── scriptwriter
  66 + │ ├── artist
  67 + │ └── ...
  68 + │
  69 + └── 全局 Agent (跨公司复用)
  70 + ├── innovator
  71 + └── agent-creator
  72 +```
  73 +
  74 +### 2.2 核心原则
  75 +
  76 +| 原则 | 说明 |
  77 +|------|------|
  78 +| **Master 是老板,不是 CEO** | Master 只管"开公司"和"战略校准",不深入执行 |
  79 +| **Company 是隔离边界** | 每家公司有独立的 Agent 池、OKR 树、Memory 空间 |
  80 +| **CEO 是公司的内核** | 公司创建后,CEO 是第一个被雇佣的人,由 CEO 自主规划一切 |
  81 +| **独立闭环运行** | 一个 Company 从创建到运营,不依赖人类持续干预 |
  82 +| **多实例并行** | 多个 Company 并行运转,互不干扰 |
  83 +
  84 +---
  85 +
  86 +## 三、数据结构设计
  87 +
  88 +### 3.1 目录结构
  89 +
  90 +```
  91 +data/
  92 +├── agents/ ← 全局 Agent(Master + 跨公司工具类 Agent)
  93 +│ ├── master/
  94 +│ ├── agent-creator/
  95 +│ └── innovator/
  96 +│
  97 +├── companies/ ← 📦 新增:公司实例目录
  98 +│ ├── wechat-media-co/ ← 公司实例 1
  99 +│ │ ├── company.json ← 公司元数据
  100 +│ │ ├── sop.md ← 公司 SOP(运营标准流程)
  101 +│ │ ├── agents/ ← 该公司的专属 Agent 池
  102 +│ │ │ ├── ceo/
  103 +│ │ │ ├── content-writer/
  104 +│ │ │ ├── editor/
  105 +│ │ │ ├── publisher/
  106 +│ │ │ └── data-analyst/
  107 +│ │ ├── goals/ ← 该公司的 OKR 树
  108 +│ │ │ └── G-001/
  109 +│ │ ├── pipelines/ ← 该公司的 SOP 流水线定义
  110 +│ │ │ └── daily-content.json
  111 +│ │ └── workspace/ ← 该公司的共享工作区
  112 +│ │ ├── content/
  113 +│ │ └── assets/
  114 +│ │
  115 +│ └── manga-studio/ ← 公司实例 2
  116 +│ ├── company.json
  117 +│ ├── agents/
  118 +│ ├── goals/
  119 +│ └── ...
  120 +│
  121 +└── goals/ ← 全局 OKR (跨公司的顶层战略目标)
  122 +```
  123 +
  124 +### 3.2 company.json 结构
  125 +
  126 +```json
  127 +{
  128 + "id": "wechat-media-co",
  129 + "name": "柠檬自媒体",
  130 + "description": "专注微信公众号内容运营,以 AI 驱动的内容工厂模式实现日更",
  131 + "status": "running",
  132 + "createdAt": "2026-03-25T17:00:00Z",
  133 + "createdBy": "master",
  134 +
  135 + "ceo": "ceo-wechat",
  136 +
  137 + "sop": {
  138 + "pipeline": "daily-content",
  139 + "description": "选题 → 写稿 → 审核 → 排版 → 发布 → 数据回收"
  140 + },
  141 +
  142 + "agents": [
  143 + "ceo-wechat",
  144 + "content-writer-01",
  145 + "editor-01",
  146 + "publisher-01",
  147 + "data-analyst-01"
  148 + ],
  149 +
  150 + "heartbeat": {
  151 + "enabled": true,
  152 + "intervalMinutes": 30
  153 + },
  154 +
  155 + "config": {
  156 + "timezone": "Asia/Shanghai",
  157 + "maxAgents": 10,
  158 + "budget": {
  159 + "dailyTokenLimit": 500000,
  160 + "monthlyBudget": 100
  161 + }
  162 + }
  163 +}
  164 +```
  165 +
  166 +---
  167 +
  168 +## 四、生命周期流程
  169 +
  170 +### 4.1 公司创建流程
  171 +
  172 +```mermaid
  173 +sequenceDiagram
  174 + participant User as 用户
  175 + participant Master as Master Agent
  176 + participant System as 系统 API
  177 + participant CEO as 新 CEO Agent
  178 +
  179 + User->>Master: "帮我创建一家做公众号运营的公司"
  180 + Master->>Master: 理解意图 → 确定公司定位和核心 SOP
  181 + Master->>System: POST /api/company/create
  182 + Note over System: 1. mkdir data/companies/wechat-media-co/<br>2. 生成 company.json<br>3. 初始化 agents/, goals/, workspace/
  183 + System-->>Master: ✅ 公司创建成功
  184 +
  185 + Master->>System: POST /api/company/:id/hire-ceo
  186 + Note over System: 1. 使用 agent-creator 创建 CEO Agent<br>2. CEO agent.md 写入公司使命<br>3. CEO user.md 写入:上级是 Master
  187 + System-->>Master: ✅ CEO 已上任
  188 +
  189 + Master->>CEO: TaskDispatch: "你是这家公司的 CEO,请规划战略并组建团队"
  190 +
  191 + CEO->>CEO: 分析公司定位 → 设计内容流水线 SOP
  192 + CEO->>System: POST /api/company/:id/agents/create (批量创建)
  193 + Note over CEO: 创建: 内容策划、写手、编辑、发布、数据分析
  194 + CEO->>System: POST /api/company/:id/goals/create
  195 + Note over CEO: 创建: 公司 OKR(如:30天粉丝破万)
  196 + CEO->>System: POST /api/company/:id/pipelines/create
  197 + Note over CEO: 定义: 每日内容产出 SOP 流水线
  198 +
  199 + CEO-->>Master: "团队组建完毕,流水线已就绪,开始自主运行"
  200 +```
  201 +
  202 +### 4.2 公司日常运行流程
  203 +
  204 +```mermaid
  205 +sequenceDiagram
  206 + participant HB as Heartbeat Service
  207 + participant CEO as CEO Agent
  208 + participant Writer as Content Writer
  209 + participant Editor as Editor
  210 + participant Pub as Publisher
  211 + participant DA as Data Analyst
  212 +
  213 + loop 每日循环 (自动触发)
  214 + HB->>CEO: [SYSTEM HEARTBEAT] 早间巡检
  215 + CEO->>DA: "分析昨日数据,给出今日选题建议"
  216 + DA-->>CEO: "昨日阅读量 Top3 关键词: AI教程, 提效工具, 副业"
  217 +
  218 + CEO->>Writer: "今日选题: AI提效工具盘点, 要求3000字"
  219 + Writer-->>Editor: "初稿完成"
  220 + Editor-->>Writer: "修改意见:开头太平,增加 hook"
  221 + Writer-->>Editor: "修改稿完成"
  222 + Editor-->>Pub: "审核通过,可发布"
  223 + Pub->>Pub: 排版 + 定时发布
  224 + Pub-->>CEO: "已发布,预计 18:00 推送"
  225 +
  226 + HB->>CEO: [SYSTEM HEARTBEAT] 晚间复盘
  227 + CEO->>DA: "拉取今日文章数据"
  228 + DA-->>CEO: "阅读 2340, 点赞 186, 新增关注 28"
  229 + CEO->>CEO: 写入 memory → "AI提效选题表现良好,继续跟进"
  230 + end
  231 +```
  232 +
  233 +### 4.3 多公司并行
  234 +
  235 +```
  236 +用户对 Master 的操作:
  237 +
  238 +"帮我查看所有公司的运营状况"
  239 + → Master 调用: GET /api/company/list
  240 + → 返回: [ wechat-media-co (运行中, 今日发布1篇), manga-studio (筹建中) ]
  241 +
  242 +"漫剧公司的 CEO 表现怎么样?"
  243 + → Master 调用: GET /api/company/manga-studio/report
  244 + → 返回: CEO 近7天日报汇总
  245 +
  246 +"关闭自媒体公司"
  247 + → Master 调用: POST /api/company/wechat-media-co/shutdown
  248 + → CEO 收到关停指令 → 善后清理
  249 +```
  250 +
  251 +---
  252 +
  253 +## 五、API 设计
  254 +
  255 +### 5.1 Company CRUD
  256 +
  257 +| 方法 | 路径 | 说明 |
  258 +|------|------|------|
  259 +| `POST` | `/api/company/create` | 创建新公司 |
  260 +| `GET` | `/api/company/list` | 列出所有公司 |
  261 +| `GET` | `/api/company/:companyId` | 获取公司详情 |
  262 +| `PUT` | `/api/company/:companyId` | 更新公司信息 |
  263 +| `POST` | `/api/company/:companyId/shutdown` | 关停公司 |
  264 +
  265 +### 5.2 Company 内部:Agent 管理
  266 +
  267 +| 方法 | 路径 | 说明 |
  268 +|------|------|------|
  269 +| `POST` | `/api/company/:companyId/agents/create` | 在公司内创建 Agent |
  270 +| `GET` | `/api/company/:companyId/agents` | 列出公司内所有 Agent |
  271 +| `POST` | `/api/company/:companyId/hire-ceo` | 为公司任命 CEO |
  272 +
  273 +### 5.3 Company 内部:OKR 管理
  274 +
  275 +| 方法 | 路径 | 说明 |
  276 +|------|------|------|
  277 +| `POST` | `/api/company/:companyId/goals/create` | 创建公司级 OKR |
  278 +| `GET` | `/api/company/:companyId/goals` | 获取公司 OKR 列表 |
  279 +
  280 +### 5.4 Company 运营
  281 +
  282 +| 方法 | 路径 | 说明 |
  283 +|------|------|------|
  284 +| `GET` | `/api/company/:companyId/report` | 获取公司运营报告 |
  285 +| `POST` | `/api/company/:companyId/heartbeat` | 手动触发公司心跳 |
  286 +
  287 +---
  288 +
  289 +## 六、与现有系统的兼容设计
  290 +
  291 +### 6.1 Agent 寻址变化
  292 +
  293 +当前系统的 Agent 通过 `agentId` 全局唯一寻址(如 `ceo`)。
  294 +引入 Company 后,Agent 的寻址变为 **Company 限定**:
  295 +
  296 +```javascript
  297 +// 旧: 全局 Agent
  298 +const agentDir = path.join(DATA_DIR, agentId);
  299 +// 即: data/agents/ceo/
  300 +
  301 +// 新: 公司内 Agent
  302 +const agentDir = path.join(COMPANIES_DIR, companyId, 'agents', agentId);
  303 +// 即: data/companies/wechat-media-co/agents/ceo-wechat/
  304 +
  305 +// 新: 全局 Agent(不属于任何公司)
  306 +const agentDir = path.join(DATA_DIR, agentId);
  307 +// 即: data/agents/master/ ← 不变
  308 +```
  309 +
  310 +**兼容策略**:
  311 +- `config.json` 增加 `companyId` 字段(可选)。
  312 +- **有 `companyId`** → 在 `data/companies/{companyId}/agents/` 下。
  313 +- **无 `companyId`** → 在 `data/agents/` 下(全局)。
  314 +- 路由层通过 resolveAgentDir(agentId) 统一封装,向上层透明化。
  315 +
  316 +### 6.2 OKR/Goals 隔离
  317 +
  318 +```
  319 +data/goals/ ← 全局大盘(跨公司的顶级战略目标)
  320 +data/companies/{co}/goals/ ← 公司内部的执行类 OKR
  321 +```
  322 +
  323 +GoalsService 增加一个 `scope` 参数:
  324 +- `scope = 'global'` → 读写 `data/goals/`
  325 +- `scope = companyId` → 读写 `data/companies/{companyId}/goals/`
  326 +
  327 +### 6.3 Memory 隔离
  328 +
  329 +Memory 天然隔离:因为 Memory 存储在各个 Agent 的目录下(`agents/{id}/memory/`)。
  330 +当公司内的 Agent 在 `data/companies/{co}/agents/{id}/memory/` 下时,自动与全局 Agent 的记忆完全隔离。无代码改动。
  331 +
  332 +### 6.4 Heartbeat 集成
  333 +
  334 +HeartbeatService 扩展扫描范围:
  335 +- 遍历 `data/agents/` 下有 `heartbeat.enabled` 的全局 Agent。
  336 +- 遍历 `data/companies/*/agents/` 下有 `heartbeat.enabled` 的公司内 Agent。
  337 +- 可以在 `company.json` 层级设置整个公司的心跳开关。
  338 +
  339 +---
  340 +
  341 +## 七、实现计划 — Todo List
  342 +
  343 +### Phase 1: 数据结构基础
  344 +
  345 +- [ ] **1.1** 创建 `data/companies/` 目录和 `company-service.js`
  346 +- [ ] **1.2** 实现 Company CRUD:create / get / list / update / shutdown
  347 +- [ ] **1.3** 实现 `resolveAgentDir(agentId, companyId?)` 统一寻址函数
  348 +- [ ] **1.4** 修改 `agent-chat.js` 路由支持 `companyId` 上下文
  349 +
  350 +### Phase 2: CEO 自动建制
  351 +
  352 +- [ ] **2.1** 实现 `POST /api/company/:id/hire-ceo`(调用 agent-creator 并自动填充上下文)
  353 +- [ ] **2.2** CEO 的 `agent.md` 模板:包含公司使命、员工创建权限、SOP 设计权限
  354 +- [ ] **2.3** CEO 首次运行后自动规划(通过 TaskDispatch 触发"规划战略并组建团队")
  355 +
  356 +### Phase 3: SOP 流水线
  357 +
  358 +- [ ] **3.1** 设计 Pipeline 数据结构(`pipelines/*.json`)
  359 +- [ ] **3.2** 实现 Pipeline 执行引擎(按步骤自动触发对应 Agent)
  360 +- [ ] **3.3** CEO 可以通过工具动态调整 Pipeline
  361 +
  362 +### Phase 4: 前端 Dashboard
  363 +
  364 +- [ ] **4.1** 公司列表页(展示所有公司卡片 + 运行状态)
  365 +- [ ] **4.2** 公司详情页(组织架构图 + OKR 大盘 + Agent 列表)
  366 +- [ ] **4.3** 公司日报/周报自动生成与展示
  367 +
  368 +---
  369 +
  370 +## 八、关键技术决策
  371 +
  372 +| # | 问题 | 决策 | 说明 |
  373 +|---|------|------|------|
  374 +| 1 | Agent ID 全局唯一还是公司内唯一? | **全局唯一** | 使用 `{role}-{companySlug}` 命名法,如 `ceo-wechat` |
  375 +| 2 | 原有的 `data/agents/ceo` 怎么处理? | **渐进迁移** | 旧的全局 Agent 保留不动,新建公司时在 companies 下创建 |
  376 +| 3 | Company 的 CEO 是新建还是复用? | **每家公司新建独立 CEO** | 避免记忆污染和注意力分散 |
  377 +| 4 | Company 可以嵌套 Company 吗? | **v1.0 不支持** | 先做单层,未来有需求再做集团架构 |
  378 +| 5 | 跨公司 Agent 共享(如 innovator)| **全局 Agent 池** | `data/agents/` 下的 Agent 可以被任何公司调用 |
  379 +| 6 | 公司的"关停"语义 | **软关停** | 标记 status=shutdown,停止心跳,保留数据 |
... ...