Commit 49e795a7efcdf59fa7448031fc867a2cceb7205f
1 parent
f1ece951
docs: add Agent Hiring Pipeline, template system, Company-scoped OKR to design doc 24
Showing
1 changed file
with
291 additions
and
107 deletions
docs/system-design/24-company-layer-architecture.md
| ... | ... | @@ -89,36 +89,33 @@ data/agents/ |
| 89 | 89 | |
| 90 | 90 | ``` |
| 91 | 91 | data/ |
| 92 | -├── agents/ ← 全局 Agent(Master + 跨公司工具类 Agent) | |
| 92 | +├── agents/ ← 全局 Agent(Master + 跨公司基础设施 Agent) | |
| 93 | 93 | │ ├── master/ |
| 94 | 94 | │ ├── agent-creator/ |
| 95 | 95 | │ └── innovator/ |
| 96 | 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 | -│ └── ... | |
| 97 | +├── templates/ ← 📦 Agent 模板库(招聘时优先查找) | |
| 98 | +│ ├── ceo/ ← CEO 通用模板 | |
| 99 | +│ ├── qa-judge/ ← 质量仲裁模板 | |
| 100 | +│ ├── content-writer/ ← 内容写手模板 | |
| 101 | +│ ├── editor/ ← 编辑模板 | |
| 102 | +│ ├── video-editor/ ← 剪辑师模板 | |
| 103 | +│ ├── hot-topic-hunter/ ← 热点搜索模板 | |
| 104 | +│ └── data-analyst/ ← 数据分析师模板 | |
| 120 | 105 | │ |
| 121 | -└── goals/ ← 全局 OKR (跨公司的顶层战略目标) | |
| 106 | +├── {company-id}/ ← 公司实例(顶层目录,扁平化) | |
| 107 | +│ ├── company.json ← 公司元数据 + 状态 + 配置 | |
| 108 | +│ ├── sop.md ← 公司 SOP(运营标准流程) | |
| 109 | +│ ├── agents/ ← 该公司的专属 Agent 池 | |
| 110 | +│ │ ├── ceo/ | |
| 111 | +│ │ ├── content-writer/ | |
| 112 | +│ │ ├── editor/ | |
| 113 | +│ │ └── data-analyst/ | |
| 114 | +│ ├── goals/ ← 该公司的 OKR 树(所有目标都在公司层级下) | |
| 115 | +│ ├── pipelines/ ← 该公司的 SOP 流水线定义 | |
| 116 | +│ └── workspace/ ← 该公司的共享工作区(成品、品牌资产) | |
| 117 | +│ | |
| 118 | +└── skills/ ← 全局 Skill(可被任何公司的 Agent 调用) | |
| 122 | 119 | ``` |
| 123 | 120 | |
| 124 | 121 | ### 3.2 company.json 结构 |
| ... | ... | @@ -132,20 +129,14 @@ data/ |
| 132 | 129 | "createdAt": "2026-03-25T17:00:00Z", |
| 133 | 130 | "createdBy": "master", |
| 134 | 131 | |
| 135 | - "ceo": "ceo-wechat", | |
| 132 | + "ceo": "ceo", | |
| 136 | 133 | |
| 137 | 134 | "sop": { |
| 138 | 135 | "pipeline": "daily-content", |
| 139 | 136 | "description": "选题 → 写稿 → 审核 → 排版 → 发布 → 数据回收" |
| 140 | 137 | }, |
| 141 | 138 | |
| 142 | - "agents": [ | |
| 143 | - "ceo-wechat", | |
| 144 | - "content-writer-01", | |
| 145 | - "editor-01", | |
| 146 | - "publisher-01", | |
| 147 | - "data-analyst-01" | |
| 148 | - ], | |
| 139 | + "agents": ["ceo", "content-writer", "editor", "publisher", "data-analyst"], | |
| 149 | 140 | |
| 150 | 141 | "heartbeat": { |
| 151 | 142 | "enabled": true, |
| ... | ... | @@ -165,37 +156,213 @@ data/ |
| 165 | 156 | |
| 166 | 157 | --- |
| 167 | 158 | |
| 168 | -## 四、生命周期流程 | |
| 159 | +## 四、Agent 招聘系统 (Hiring Pipeline) | |
| 160 | + | |
| 161 | +> **核心理念**: 公司需要某个角色时,不是凭空创造,而是走一套完整的**招聘流程**—— | |
| 162 | +> 先从人才市场(模板库)找现成的,找不到就培养一个新人,培训合格后才能上岗。 | |
| 169 | 163 | |
| 170 | -### 4.1 公司创建流程 | |
| 164 | +### 4.1 招聘流程总览 | |
| 165 | + | |
| 166 | +```mermaid | |
| 167 | +flowchart TD | |
| 168 | + A["CEO 需要一个角色<br>(如: 热点搜索员)"] --> B{"在 templates/ 中<br>查找匹配模板?"} | |
| 169 | + | |
| 170 | + B -->|"✅ 找到模板"| C["复制模板到<br>公司 agents/ 目录"] | |
| 171 | + C --> D["注入公司上下文<br>(改写 agent.md, soul.md, user.md)"] | |
| 172 | + D --> E["直接上岗 ✅"] | |
| 173 | + | |
| 174 | + B -->|"❌ 模板库无此角色"| F["调用 agent-creator<br>从零创建 Agent 骨架"] | |
| 175 | + F --> G["调用 innovator<br>进入 FDE 训练流水线"] | |
| 176 | + G --> H{"Benchmark<br>评分 ≥ 95?"} | |
| 177 | + | |
| 178 | + H -->|"❌ 不合格"| I["继续 Evolve 迭代<br>(自动重训)"] | |
| 179 | + I --> H | |
| 180 | + | |
| 181 | + H -->|"✅ 合格"| J["毕业 → 存入 templates/<br>(供未来复用)"] | |
| 182 | + J --> C | |
| 183 | +``` | |
| 184 | + | |
| 185 | +### 4.2 招聘三阶段详解 | |
| 186 | + | |
| 187 | +#### 阶段 A: 模板库查找 (Template Lookup) | |
| 188 | + | |
| 189 | +```javascript | |
| 190 | +// 伪代码: hire(roleName, companyId) | |
| 191 | +function hire(roleName, companyId) { | |
| 192 | + const templateDir = path.join(DATA_DIR, 'templates', roleName); | |
| 193 | + | |
| 194 | + if (fs.existsSync(templateDir)) { | |
| 195 | + // ✅ 模板存在 → 直接复制 + 定制 | |
| 196 | + copyDir(templateDir, `data/${companyId}/agents/${roleName}/`); | |
| 197 | + injectCompanyContext(companyId, roleName); | |
| 198 | + return { status: 'hired_from_template', ready: true }; | |
| 199 | + } else { | |
| 200 | + // ❌ 模板不存在 → 进入培养流程 | |
| 201 | + return trainNewAgent(roleName, companyId); | |
| 202 | + } | |
| 203 | +} | |
| 204 | +``` | |
| 205 | + | |
| 206 | +**模板库是不断扩充的人才市场**: | |
| 207 | +- 初始模板:`ceo`, `qa-judge`, `content-writer`, `editor` 等通用角色 | |
| 208 | +- 每次从零培养的新角色,训练合格后**自动沉淀回 `templates/`**,下次招聘同类角色时就能直接使用 | |
| 209 | +- 模板只保存骨架(agent.md, soul.md, skills/, config.json),不带记忆和工作区 | |
| 210 | + | |
| 211 | +#### 阶段 B: 从零培养 (Create + Train) | |
| 212 | + | |
| 213 | +当模板库中没有对应角色时,进入培养流水线: | |
| 214 | + | |
| 215 | +``` | |
| 216 | +Step 1: agent-creator 创建骨架 | |
| 217 | + → 生成 agent.md, soul.md, identity.md, config.json | |
| 218 | + → 定义角色的核心职责和工具清单 | |
| 219 | + → 此时 Agent 状态为 "training"(不可执行正式任务) | |
| 220 | + | |
| 221 | +Step 2: innovator 执行 FDE 训练 | |
| 222 | + → F (Find): 调研该角色领域的最佳实践和行业知识 | |
| 223 | + → D (Digest): 消化知识转化为 Agent 的技能定义 (SKILL.md) | |
| 224 | + → E (Evolve): 循环迭代优化,直到技能评分达标 | |
| 225 | + | |
| 226 | +Step 3: Benchmark 评估 | |
| 227 | + → 运行标准化的能力测试用例 | |
| 228 | + → 评分维度:任务完成度、输出质量、工具使用准确性、响应时间 | |
| 229 | + → 合格线:综合评分 ≥ 95 分 | |
| 230 | +``` | |
| 231 | + | |
| 232 | +#### 阶段 C: 合格上岗 + 模板沉淀 | |
| 233 | + | |
| 234 | +``` | |
| 235 | +训练合格后: | |
| 236 | + 1. Agent 状态从 "training" → "ready" | |
| 237 | + 2. 复制干净骨架到 templates/ (不含训练过程中的 memory 和 workspace) | |
| 238 | + 3. 注入公司上下文到公司实例 | |
| 239 | + 4. 正式加入公司 agents/ 池 | |
| 240 | + 5. 更新 company.json 的 agents 列表 | |
| 241 | + 6. CEO 收到通知:"新员工 {roleName} 已入职" | |
| 242 | +``` | |
| 243 | + | |
| 244 | +### 4.3 Agent 状态机 | |
| 245 | + | |
| 246 | +``` | |
| 247 | + ┌── training ──► ready ──► active | |
| 248 | + │ │ | |
| 249 | + (从零培养) │ │ (公司暂停/开除) | |
| 250 | + │ ▼ | |
| 251 | + │ suspended | |
| 252 | + │ | |
| 253 | + (模板复制) └── ready ─────────────► active | |
| 254 | +``` | |
| 255 | + | |
| 256 | +| 状态 | 含义 | 能否接任务 | | |
| 257 | +|------|------|-----------| | |
| 258 | +| `training` | 正在被 Innovator 训练中,Benchmark 尚未达标 | ❌ 不能 | | |
| 259 | +| `ready` | 训练完毕或模板复制完毕,等待上岗 | ❌ 等待分配 | | |
| 260 | +| `active` | 已加入公司,处于正式工作状态 | ✅ 能 | | |
| 261 | +| `suspended` | 被 CEO 暂停(表现不佳或公司调整) | ❌ 暂停 | | |
| 262 | + | |
| 263 | +### 4.4 模板库管理 | |
| 264 | + | |
| 265 | +模板库 `data/templates/` 是一个**不断进化的人才市场**: | |
| 266 | + | |
| 267 | +``` | |
| 268 | +data/templates/ | |
| 269 | +├── ceo/ ← 通用 CEO 模板 | |
| 270 | +│ ├── agent.md ← 通用的 CEO 职责(不含特定公司信息) | |
| 271 | +│ ├── soul.md ← CEO 通用思维模式 | |
| 272 | +│ ├── identity.md | |
| 273 | +│ ├── config.json ← type: "cxo" | |
| 274 | +│ └── skills/ ← CEO 通用技能 | |
| 275 | +│ | |
| 276 | +├── content-writer/ ← 内容写手模板 | |
| 277 | +├── video-editor/ ← 剪辑师模板 | |
| 278 | +├── hot-topic-hunter/ ← 热点搜索员模板 | |
| 279 | +├── data-analyst/ ← 数据分析师模板 | |
| 280 | +├── qa-judge/ ← 质量仲裁模板 | |
| 281 | +│ | |
| 282 | +└── _registry.json ← 模板注册表(索引所有可用模板) | |
| 283 | +``` | |
| 284 | + | |
| 285 | +**`_registry.json` 结构**: | |
| 286 | +```json | |
| 287 | +[ | |
| 288 | + { | |
| 289 | + "id": "ceo", | |
| 290 | + "name": "CEO / 首席执行官", | |
| 291 | + "type": "cxo", | |
| 292 | + "description": "公司战略规划、团队管理、OKR 制定", | |
| 293 | + "benchmarkScore": 97, | |
| 294 | + "trainedAt": "2026-03-20", | |
| 295 | + "usedCount": 3 | |
| 296 | + }, | |
| 297 | + { | |
| 298 | + "id": "hot-topic-hunter", | |
| 299 | + "name": "热点搜索员", | |
| 300 | + "type": "specialist", | |
| 301 | + "description": "全网热点监控、选题建议、趋势分析", | |
| 302 | + "benchmarkScore": 96, | |
| 303 | + "trainedAt": "2026-03-25", | |
| 304 | + "usedCount": 0 | |
| 305 | + } | |
| 306 | +] | |
| 307 | +``` | |
| 308 | + | |
| 309 | +### 4.5 复制时的上下文注入 | |
| 310 | + | |
| 311 | +从模板复制到公司后,必须改写以下文件: | |
| 312 | + | |
| 313 | +| 文件 | 注入内容 | | |
| 314 | +|------|---------| | |
| 315 | +| `agent.md` | 追加:所属公司名称、公司使命、公司特定的约束规则 | | |
| 316 | +| `soul.md` | 追加:公司文化和价值观(如"我们是一家注重数据驱动的自媒体") | | |
| 317 | +| `user.md` | 重写:上级是该公司的 CEO(而非 Master),写入 CEO 的偏好 | | |
| 318 | +| `config.json` | 添加 `companyId` 字段,更新 `parent_id` | | |
| 319 | +| `memory/memory.md` | 初始化为空白(新公司、新记忆,不继承模板记忆) | | |
| 320 | + | |
| 321 | +--- | |
| 322 | + | |
| 323 | +## 五、生命周期流程 | |
| 324 | + | |
| 325 | +### 5.1 公司创建 + 招聘全流程 | |
| 171 | 326 | |
| 172 | 327 | ```mermaid |
| 173 | 328 | sequenceDiagram |
| 174 | 329 | participant User as 用户 |
| 175 | 330 | participant Master as Master Agent |
| 176 | 331 | participant System as 系统 API |
| 332 | + participant AC as agent-creator | |
| 333 | + participant Inno as innovator | |
| 177 | 334 | participant CEO as 新 CEO Agent |
| 178 | 335 | |
| 179 | 336 | User->>Master: "帮我创建一家做公众号运营的公司" |
| 180 | 337 | Master->>Master: 理解意图 → 确定公司定位和核心 SOP |
| 181 | 338 | 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/ | |
| 339 | + Note over System: 1. mkdir data/wechat-media-co/<br>2. 生成 company.json<br>3. 初始化 agents/, goals/, workspace/ | |
| 183 | 340 | 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 | - | |
| 341 | + | |
| 342 | + Master->>System: POST /api/company/:id/hire { role: "ceo" } | |
| 343 | + Note over System: 在 templates/ 查找 "ceo" → ✅ 找到 | |
| 344 | + System->>System: 复制 templates/ceo → wechat-media-co/agents/ceo/ | |
| 345 | + System->>System: 注入公司上下文 (agent.md, user.md) | |
| 346 | + System-->>Master: ✅ CEO 已入职 | |
| 347 | + | |
| 189 | 348 | Master->>CEO: TaskDispatch: "你是这家公司的 CEO,请规划战略并组建团队" |
| 190 | - | |
| 191 | - CEO->>CEO: 分析公司定位 → 设计内容流水线 SOP | |
| 192 | - CEO->>System: POST /api/company/:id/agents/create (批量创建) | |
| 193 | - Note over CEO: 创建: 内容策划、写手、编辑、发布、数据分析 | |
| 349 | + | |
| 350 | + CEO->>CEO: 分析公司定位 → 确定需要哪些角色 | |
| 351 | + CEO->>System: POST /api/company/:id/hire { role: "content-writer" } | |
| 352 | + Note over System: templates/ 查找 → ✅ 找到 → 复制 + 注入 | |
| 353 | + CEO->>System: POST /api/company/:id/hire { role: "hot-topic-hunter" } | |
| 354 | + Note over System: templates/ 查找 → ❌ 没有 | |
| 355 | + System->>AC: 创建 "hot-topic-hunter" Agent 骨架 | |
| 356 | + AC-->>System: 骨架已就绪 | |
| 357 | + System->>Inno: 启动 FDE 训练 (hot-topic-hunter) | |
| 358 | + Inno->>Inno: Find → Digest → Evolve (循环至 ≥95) | |
| 359 | + Inno-->>System: ✅ Benchmark 97 分,训练合格 | |
| 360 | + System->>System: 沉淀到 templates/hot-topic-hunter/ | |
| 361 | + System->>System: 复制到 wechat-media-co/agents/ + 注入上下文 | |
| 362 | + System-->>CEO: ✅ 热点搜索员已入职 | |
| 363 | + | |
| 194 | 364 | CEO->>System: POST /api/company/:id/goals/create |
| 195 | - Note over CEO: 创建: 公司 OKR(如:30天粉丝破万) | |
| 196 | 365 | CEO->>System: POST /api/company/:id/pipelines/create |
| 197 | - Note over CEO: 定义: 每日内容产出 SOP 流水线 | |
| 198 | - | |
| 199 | 366 | CEO-->>Master: "团队组建完毕,流水线已就绪,开始自主运行" |
| 200 | 367 | ``` |
| 201 | 368 | |
| ... | ... | @@ -250,9 +417,9 @@ sequenceDiagram |
| 250 | 417 | |
| 251 | 418 | --- |
| 252 | 419 | |
| 253 | -## 五、API 设计 | |
| 420 | +## 六、API 设计 | |
| 254 | 421 | |
| 255 | -### 5.1 Company CRUD | |
| 422 | +### 6.1 Company CRUD | |
| 256 | 423 | |
| 257 | 424 | | 方法 | 路径 | 说明 | |
| 258 | 425 | |------|------|------| |
| ... | ... | @@ -262,22 +429,31 @@ sequenceDiagram |
| 262 | 429 | | `PUT` | `/api/company/:companyId` | 更新公司信息 | |
| 263 | 430 | | `POST` | `/api/company/:companyId/shutdown` | 关停公司 | |
| 264 | 431 | |
| 265 | -### 5.2 Company 内部:Agent 管理 | |
| 432 | +### 6.2 招聘与 Agent 管理 | |
| 266 | 433 | |
| 267 | 434 | | 方法 | 路径 | 说明 | |
| 268 | 435 | |------|------|------| |
| 269 | -| `POST` | `/api/company/:companyId/agents/create` | 在公司内创建 Agent | | |
| 436 | +| `POST` | `/api/company/:companyId/hire` | 招聘 Agent (模板优先 → 培养兜底) | | |
| 270 | 437 | | `GET` | `/api/company/:companyId/agents` | 列出公司内所有 Agent | |
| 271 | -| `POST` | `/api/company/:companyId/hire-ceo` | 为公司任命 CEO | | |
| 438 | +| `POST` | `/api/company/:companyId/agent/:agentId/chat` | 与公司内 Agent 对话 | | |
| 439 | +| `POST` | `/api/company/:companyId/fire` | 解雇 Agent (suspend) | | |
| 272 | 440 | |
| 273 | -### 5.3 Company 内部:OKR 管理 | |
| 441 | +### 6.3 模板库 | |
| 274 | 442 | |
| 275 | 443 | | 方法 | 路径 | 说明 | |
| 276 | 444 | |------|------|------| |
| 277 | -| `POST` | `/api/company/:companyId/goals/create` | 创建公司级 OKR | | |
| 445 | +| `GET` | `/api/templates` | 列出所有可用模板 | | |
| 446 | +| `GET` | `/api/templates/:templateId` | 查看模板详情 | | |
| 447 | + | |
| 448 | +### 6.4 Company 内部:OKR 管理 | |
| 449 | + | |
| 450 | +| 方法 | 路径 | 说明 | | |
| 451 | +|------|------|------| | |
| 452 | +| `POST` | `/api/company/:companyId/goals/create` | 创建公司 OKR | | |
| 278 | 453 | | `GET` | `/api/company/:companyId/goals` | 获取公司 OKR 列表 | |
| 454 | +| `PUT` | `/api/company/:companyId/goals/:goalId` | 更新 OKR 节点 | | |
| 279 | 455 | |
| 280 | -### 5.4 Company 运营 | |
| 456 | +### 6.5 Company 运营 | |
| 281 | 457 | |
| 282 | 458 | | 方法 | 路径 | 说明 | |
| 283 | 459 | |------|------|------| |
| ... | ... | @@ -286,94 +462,102 @@ sequenceDiagram |
| 286 | 462 | |
| 287 | 463 | --- |
| 288 | 464 | |
| 289 | -## 六、与现有系统的兼容设计 | |
| 465 | +## 七、与现有系统的兼容设计 | |
| 290 | 466 | |
| 291 | -### 6.1 Agent 寻址变化 | |
| 467 | +### 7.1 Agent 寻址变化 | |
| 292 | 468 | |
| 293 | 469 | 当前系统的 Agent 通过 `agentId` 全局唯一寻址(如 `ceo`)。 |
| 294 | 470 | 引入 Company 后,Agent 的寻址变为 **Company 限定**: |
| 295 | 471 | |
| 296 | 472 | ```javascript |
| 297 | -// 旧: 全局 Agent | |
| 298 | -const agentDir = path.join(DATA_DIR, agentId); | |
| 299 | -// 即: data/agents/ceo/ | |
| 473 | +// 全局 Agent(不属于任何公司) | |
| 474 | +const agentDir = path.join(DATA_DIR, 'agents', agentId); | |
| 475 | +// 即: data/agents/master/ | |
| 300 | 476 | |
| 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/ ← 不变 | |
| 477 | +// 公司内 Agent | |
| 478 | +const agentDir = path.join(DATA_DIR, companyId, 'agents', agentId); | |
| 479 | +// 即: data/wechat-media-co/agents/ceo/ | |
| 308 | 480 | ``` |
| 309 | 481 | |
| 310 | 482 | **兼容策略**: |
| 311 | 483 | - `config.json` 增加 `companyId` 字段(可选)。 |
| 312 | -- **有 `companyId`** → 在 `data/companies/{companyId}/agents/` 下。 | |
| 484 | +- **有 `companyId`** → 在 `data/{companyId}/agents/` 下。 | |
| 313 | 485 | - **无 `companyId`** → 在 `data/agents/` 下(全局)。 |
| 314 | -- 路由层通过 resolveAgentDir(agentId) 统一封装,向上层透明化。 | |
| 486 | +- 路由层通过 `resolveAgentDir(companyId, agentId)` 统一封装,向上层透明化。 | |
| 487 | + | |
| 488 | +### 7.2 OKR/Goals — 全部归属 Company | |
| 315 | 489 | |
| 316 | -### 6.2 OKR/Goals 隔离 | |
| 490 | +Goals/OKR 不再有全局作用域。**每个 Goal 都必须隶属于一个 Company**: | |
| 317 | 491 | |
| 318 | 492 | ``` |
| 319 | -data/goals/ ← 全局大盘(跨公司的顶级战略目标) | |
| 320 | -data/companies/{co}/goals/ ← 公司内部的执行类 OKR | |
| 493 | +data/wechat-media-co/goals/G-001/ ← 自媒体公司的 OKR | |
| 494 | +data/manga-studio/goals/G-001/ ← 漫剧公司的 OKR(ID 互不冲突) | |
| 321 | 495 | ``` |
| 322 | 496 | |
| 323 | -GoalsService 增加一个 `scope` 参数: | |
| 324 | -- `scope = 'global'` → 读写 `data/goals/` | |
| 325 | -- `scope = companyId` → 读写 `data/companies/{companyId}/goals/` | |
| 497 | +GoalsService 改造: | |
| 498 | +- 构造时必须传入 `companyId`:`new GoalsService(companyId)` | |
| 499 | +- 数据路径变为 `data/{companyId}/goals/` | |
| 500 | +- `_index.json` 也随之放在公司目录下 | |
| 326 | 501 | |
| 327 | -### 6.3 Memory 隔离 | |
| 502 | +### 7.3 Memory 隔离 | |
| 328 | 503 | |
| 329 | -Memory 天然隔离:因为 Memory 存储在各个 Agent 的目录下(`agents/{id}/memory/`)。 | |
| 330 | -当公司内的 Agent 在 `data/companies/{co}/agents/{id}/memory/` 下时,自动与全局 Agent 的记忆完全隔离。无代码改动。 | |
| 504 | +Memory 天然隔离:因为 Memory 存储在各个 Agent 的目录下。 | |
| 505 | +公司内的 Agent 在 `data/{companyId}/agents/{agentId}/memory/` 下,自动与其他公司和全局 Agent 的记忆完全隔离。无额外代码改动。 | |
| 331 | 506 | |
| 332 | -### 6.4 Heartbeat 集成 | |
| 507 | +### 7.4 Heartbeat 集成 | |
| 333 | 508 | |
| 334 | 509 | HeartbeatService 扩展扫描范围: |
| 335 | -- 遍历 `data/agents/` 下有 `heartbeat.enabled` 的全局 Agent。 | |
| 336 | -- 遍历 `data/companies/*/agents/` 下有 `heartbeat.enabled` 的公司内 Agent。 | |
| 337 | -- 可以在 `company.json` 层级设置整个公司的心跳开关。 | |
| 510 | +- 遍历 `data/agents/` 下有 `heartbeat.enabled` 的全局 Agent(如 master)。 | |
| 511 | +- 遍历每个 `data/{companyId}/` 下,读取 `company.json` 的心跳配置。 | |
| 512 | +- 若公司心跳开启,唤醒该公司的 CEO 作为入口(CEO 自行决定唤醒下属)。 | |
| 338 | 513 | |
| 339 | 514 | --- |
| 340 | 515 | |
| 341 | -## 七、实现计划 — Todo List | |
| 516 | +## 八、实现计划 — Todo List | |
| 517 | + | |
| 518 | +### Phase 1: 数据结构 + 模板库基础 | |
| 519 | + | |
| 520 | +- [ ] **1.1** 创建 `data/templates/` 目录,迁移现有 Agent 为模板(ceo, qa-judge 等) | |
| 521 | +- [ ] **1.2** 实现 `company-service.js`:Company CRUD (create / get / list / shutdown) | |
| 522 | +- [ ] **1.3** 实现 `resolveAgentDir(companyId, agentId)` 统一寻址函数 | |
| 523 | +- [ ] **1.4** 实现 `_registry.json` 模板注册表,记录模板的 benchmarkScore、usedCount | |
| 342 | 524 | |
| 343 | -### Phase 1: 数据结构基础 | |
| 525 | +### Phase 2: Agent 招聘系统 (Hiring Pipeline) | |
| 344 | 526 | |
| 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` 上下文 | |
| 527 | +- [ ] **2.1** 实现 `POST /api/company/:id/hire` — 模板查找 → 复制 → 上下文注入 | |
| 528 | +- [ ] **2.2** 招聘兜底:模板不存在时自动调用 `agent-creator` 创建 + `innovator` FDE 训练 | |
| 529 | +- [ ] **2.3** Benchmark 质量门禁:评分 ≥ 95 才允许上岗,不合格自动 re-evolve | |
| 530 | +- [ ] **2.4** 训练合格后自动沉淀骨架到 `templates/`,更新 `_registry.json` | |
| 349 | 531 | |
| 350 | -### Phase 2: CEO 自动建制 | |
| 532 | +### Phase 3: CEO 自动建制 + OKR | |
| 351 | 533 | |
| 352 | -- [ ] **2.1** 实现 `POST /api/company/:id/hire-ceo`(调用 agent-creator 并自动填充上下文) | |
| 353 | -- [ ] **2.2** CEO 的 `agent.md` 模板:包含公司使命、员工创建权限、SOP 设计权限 | |
| 354 | -- [ ] **2.3** CEO 首次运行后自动规划(通过 TaskDispatch 触发"规划战略并组建团队") | |
| 534 | +- [ ] **3.1** 公司创建后自动招聘 CEO(从模板),CEO agent.md 注入公司使命 | |
| 535 | +- [ ] **3.2** CEO 首次运行后自主规划:确定角色需求 → 批量调用 hire API → 创建 OKR | |
| 536 | +- [ ] **3.3** GoalsService 改造:所有 OKR 存储在 `data/{companyId}/goals/` 下 | |
| 355 | 537 | |
| 356 | -### Phase 3: SOP 流水线 | |
| 538 | +### Phase 4: SOP 流水线 | |
| 357 | 539 | |
| 358 | -- [ ] **3.1** 设计 Pipeline 数据结构(`pipelines/*.json`) | |
| 359 | -- [ ] **3.2** 实现 Pipeline 执行引擎(按步骤自动触发对应 Agent) | |
| 360 | -- [ ] **3.3** CEO 可以通过工具动态调整 Pipeline | |
| 540 | +- [ ] **4.1** 设计 Pipeline 数据结构(`{companyId}/pipelines/*.json`) | |
| 541 | +- [ ] **4.2** 实现 Pipeline 执行引擎(按步骤自动触发公司内对应 Agent) | |
| 542 | +- [ ] **4.3** CEO 可以通过工具动态调整 Pipeline | |
| 361 | 543 | |
| 362 | -### Phase 4: 前端 Dashboard | |
| 544 | +### Phase 5: 前端 Dashboard | |
| 363 | 545 | |
| 364 | -- [ ] **4.1** 公司列表页(展示所有公司卡片 + 运行状态) | |
| 365 | -- [ ] **4.2** 公司详情页(组织架构图 + OKR 大盘 + Agent 列表) | |
| 366 | -- [ ] **4.3** 公司日报/周报自动生成与展示 | |
| 546 | +- [ ] **5.1** 公司列表页(展示所有公司卡片 + 运行状态 + 员工数) | |
| 547 | +- [ ] **5.2** 公司详情页(组织架构图 + 公司 OKR 大盘 + Agent 列表 + 招聘状态) | |
| 548 | +- [ ] **5.3** 模板库页面(展示所有可用模板、评分、使用次数) | |
| 549 | +- [ ] **5.4** 公司日报/周报自动生成与展示 | |
| 367 | 550 | |
| 368 | 551 | --- |
| 369 | 552 | |
| 370 | -## 八、关键技术决策 | |
| 553 | +## 九、关键技术决策 | |
| 371 | 554 | |
| 372 | 555 | | # | 问题 | 决策 | 说明 | |
| 373 | 556 | |---|------|------|------| |
| 374 | -| 1 | Agent ID 全局唯一还是公司内唯一? | **全局唯一** | 使用 `{role}-{companySlug}` 命名法,如 `ceo-wechat` | | |
| 375 | -| 2 | 原有的 `data/agents/ceo` 怎么处理? | **渐进迁移** | 旧的全局 Agent 保留不动,新建公司时在 companies 下创建 | | |
| 376 | -| 3 | Company 的 CEO 是新建还是复用? | **每家公司新建独立 CEO** | 避免记忆污染和注意力分散 | | |
| 557 | +| 1 | Agent ID 全局唯一还是公司内唯一? | **公司内唯一** | 如 ceo 在每家公司内都叫 ceo,通过 companyId + agentId 联合定位 | | |
| 558 | +| 2 | 原有 `data/agents/` 里的 Agent | **迁移为模板** | ceo、qa-judge 等迁入 `data/templates/`,master/innovator 保留为全局 | | |
| 559 | +| 3 | 招聘时模板不存在怎么办? | **agent-creator 创建 + innovator 训练到 ≥95** | 训练合格后自动沉淀为新模板,下次复用 | | |
| 377 | 560 | | 4 | Company 可以嵌套 Company 吗? | **v1.0 不支持** | 先做单层,未来有需求再做集团架构 | |
| 378 | -| 5 | 跨公司 Agent 共享(如 innovator)| **全局 Agent 池** | `data/agents/` 下的 Agent 可以被任何公司调用 | | |
| 379 | -| 6 | 公司的"关停"语义 | **软关停** | 标记 status=shutdown,停止心跳,保留数据 | | |
| 561 | +| 5 | 跨公司 Agent 共享(如 innovator) | **全局 Agent 池** | `data/agents/` 下的 Agent 可被任何公司调用 | | |
| 562 | +| 6 | 公司的"关停"语义 | **软关停** | status=shutdown,停止心跳,保留数据 | | |
| 563 | +| 7 | Goals/OKR 作用域 | **全部归属 Company** | 不设全局 OKR,每个目标都隶属于一个具体公司 | | ... | ... |