24-company-layer-architecture.md 22.5 KB

24. Company Layer — 公司实例化架构

版本: v2.0 (已实现) 日期: 2026-03-26 状态: ✅ 已实现 (Phase 1-5 全部完成) 前置: 四层 Agent 架构 (02 号文档)、OKR 目标体系、Memory 系统、Heartbeat 系统


一、核心问题

当前架构的瓶颈

现有的 LemonBoss 采用扁平化的单公司模型:

data/agents/
├── master          ← 用户唯一的交互入口
├── ceo             ← 单一 CEO
├── qa-judge        ← 单一 QA
├── poet            ← 扁平挂在全局下
├── innovator       ← 扁平挂在全局下
└── ...

问题:

  1. 耦合:所有 Agent 共存于同一个 data/agents/ 目录,无法区分"做自媒体的编辑"和"做游戏的编辑"。
  2. CEO 单例:只有一个 CEO,如果同时要经营两家公司(自媒体 + 漫剧),CEO 要同时管两条完全不同的业务线,OKR 冲突、记忆污染。
  3. 无法独立闭环:没有"公司"这个边界,Agent 无法形成一个可以 24 小时自主运转、独立迭代的闭合体。
  4. 无法并行扩展:用户想创建第二家、第三家公司时,只能不断往同一个池里加人,而非开辟独立的组织空间。

设计目标

用户对 Master 说:"帮我创建一家做公众号运营的公司",系统应该:

  1. 创建一个独立的 Company 实例(如 wechat-media-co)
  2. 为该公司分配(或新建)一个 CEO Agent
  3. CEO 自主规划战略、定义 SOP、创建所需的 Role Agent
  4. 公司内部形成独立闭环:从内容策划 → 创作 → 审核 → 发布 → 数据回收 → 策略调整
  5. 用户后续再说"帮我创建一家做漫剧的公司",系统创建第二个完全隔离的 Company 实例

二、架构演进:从扁平到层级

2.1 演进前 vs 演进后

 【演进前】扁平模型                 【演进后】Company 模型
 ─────────────────                ──────────────────────

 User (你)                        User (你)
   │                                │
   └── Master                       └── Master (唯一, 全局)
        │                                │
        ├── CEO                          ├── Company: 自媒体公司
        ├── qa-judge                     │   ├── CEO (该公司专属)
        ├── poet                         │   ├── qa-judge
        ├── innovator                    │   ├── content-writer
        └── ...                          │   ├── editor
                                         │   ├── publisher
        (所有人在同一个池子)               │   └── data-analyst
                                         │
                                         ├── Company: 漫剧工作室
                                         │   ├── CEO (另一个专属)
                                         │   ├── scriptwriter
                                         │   ├── artist
                                         │   └── ...
                                         │
                                         └── 全局 Agent (跨公司复用)
                                             ├── innovator
                                             └── agent-creator

2.2 核心原则

原则 说明
Master 是老板,不是 CEO Master 只管"开公司"和"战略校准",不深入执行
Company 是隔离边界 每家公司有独立的 Agent 池、OKR 树、Memory 空间
CEO 是公司的内核 公司创建后,CEO 是第一个被雇佣的人,由 CEO 自主规划一切
独立闭环运行 一个 Company 从创建到运营,不依赖人类持续干预
多实例并行 多个 Company 并行运转,互不干扰

三、数据结构设计

3.1 目录结构

data/
├── system/                    ← 系统级数据(跨公司共享)
│   ├── agents/                ← 全局 Agent(Master + 跨公司基础设施 Agent)
│   │   ├── master/
│   │   ├── innovator/
│   │   ├── agent-creator/
│   │   ├── trend-hunter/
│   │   └── ...
│   │
│   └── templates/             ← 📦 Agent 模板库(招聘时优先查找)
│       ├── _registry.json     ← 模板注册表
│       ├── _company_bootstrap/ ← 公司自举清单 (manifest.json)
│       ├── ceo/               ← CEO 通用模板
│       ├── cto/               ← CTO 通用模板
│       ├── coo/               ← COO 通用模板
│       ├── hr/                ← HR 通用模板
│       ├── qa-judge/          ← 质量仲裁模板
│       ├── agent_creator/     ← Agent Creator 模板
│       └── scrapling_crawler/ ← 爬虫模板
│
├── {company-id}/              ← 公司实例(顶层目录,扁平化)
│   ├── company.json           ← 公司元数据 + 状态 + 配置
│   ├── agents/                ← 该公司的专属 Agent 池
│   │   ├── ceo/
│   │   ├── cto/
│   │   ├── coo/
│   │   └── {role}/
│   ├── goals/                 ← 该公司的 OKR 树
│   │   └── _index.json
│   ├── pipelines/             ← 该公司的 SOP 流水线定义
│   └── workspace/             ← 该公司的共享工作区
│       └── {agentId}/
│
├── goals/                     ← 全局 OKR 目标
│   ├── _index.json
│   └── G-{NNN}/
│
└── agents/                    ← (兼容) 全局 tasks
    └── .tasks/

3.2 company.json 结构

{
  "id": "wechat-media-co",
  "name": "柠檬自媒体",
  "description": "专注微信公众号内容运营,以 AI 驱动的内容工厂模式实现日更",
  "status": "running",
  "createdAt": "2026-03-25T17:00:00Z",
  "createdBy": "master",

  "ceo": "ceo",

  "sop": {
    "pipeline": "daily-content",
    "description": "选题 → 写稿 → 审核 → 排版 → 发布 → 数据回收"
  },

  "agents": ["ceo", "content-writer", "editor", "publisher", "data-analyst"],

  "heartbeat": {
    "enabled": true,
    "intervalMinutes": 30
  },

  "config": {
    "timezone": "Asia/Shanghai",
    "maxAgents": 10,
    "budget": {
      "dailyTokenLimit": 500000,
      "monthlyBudget": 100
    }
  }
}

四、Agent 招聘系统 (Hiring Pipeline)

核心理念: 公司需要某个角色时,不是凭空创造,而是走一套完整的招聘流程—— 先从人才市场(模板库)找现成的,找不到就培养一个新人,培训合格后才能上岗。

4.1 招聘流程总览

flowchart TD
    A["CEO 需要一个角色<br>(如: 热点搜索员)"] --> B{"在 templates/ 中<br>查找匹配模板?"}

    B -->|"✅ 找到模板"| C["复制模板到<br>公司 agents/ 目录"]
    C --> D["注入公司上下文<br>(改写 agent.md, soul.md, user.md)"]
    D --> E["直接上岗 ✅"]

    B -->|"❌ 模板库无此角色"| F["调用 agent-creator<br>从零创建 Agent 骨架"]
    F --> G["调用 innovator<br>进入 FDE 训练流水线"]
    G --> H{"Benchmark<br>评分 ≥ 95?"}

    H -->|"❌ 不合格"| I["继续 Evolve 迭代<br>(自动重训)"]
    I --> H

    H -->|"✅ 合格"| J["毕业 → 存入 templates/<br>(供未来复用)"]
    J --> C

4.2 招聘三阶段详解

阶段 A: 模板库查找 (Template Lookup)

// 伪代码: hire(roleName, companyId)
function hire(roleName, companyId) {
  const templateDir = path.join(DATA_DIR, 'templates', roleName);

  if (fs.existsSync(templateDir)) {
    // ✅ 模板存在 → 直接复制 + 定制
    copyDir(templateDir, `data/${companyId}/agents/${roleName}/`);
    injectCompanyContext(companyId, roleName);
    return { status: 'hired_from_template', ready: true };
  } else {
    // ❌ 模板不存在 → 进入培养流程
    return trainNewAgent(roleName, companyId);
  }
}

模板库是不断扩充的人才市场:

  • 初始模板:ceo, qa-judge, content-writer, editor 等通用角色
  • 每次从零培养的新角色,训练合格后自动沉淀回 templates/,下次招聘同类角色时就能直接使用
  • 模板只保存骨架(agent.md, soul.md, skills/, config.json),不带记忆和工作区

阶段 B: 从零培养 (Create + Train)

当模板库中没有对应角色时,进入培养流水线:

Step 1: agent-creator 创建骨架
  → 生成 agent.md, soul.md, identity.md, config.json
  → 定义角色的核心职责和工具清单
  → 此时 Agent 状态为 "training"(不可执行正式任务)

Step 2: innovator 执行 FDE 训练
  → F (Find):    调研该角色领域的最佳实践和行业知识
  → D (Digest):  消化知识转化为 Agent 的技能定义 (SKILL.md)
  → E (Evolve):  循环迭代优化,直到技能评分达标

Step 3: Benchmark 评估
  → 运行标准化的能力测试用例
  → 评分维度:任务完成度、输出质量、工具使用准确性、响应时间
  → 合格线:综合评分 ≥ 95 分

阶段 C: 合格上岗 + 模板沉淀

训练合格后:
  1. Agent 状态从 "training" → "ready"
  2. 复制干净骨架到 templates/ (不含训练过程中的 memory 和 workspace)
  3. 注入公司上下文到公司实例
  4. 正式加入公司 agents/ 池
  5. 更新 company.json 的 agents 列表
  6. CEO 收到通知:"新员工 {roleName} 已入职"

4.3 Agent 状态机

                 ┌── training ──► ready ──► active
                 │                           │
  (从零培养)     │                           │ (公司暂停/开除)
                 │                           ▼
                 │                        suspended
                 │
  (模板复制)     └── ready ─────────────► active
状态 含义 能否接任务
training 正在被 Innovator 训练中,Benchmark 尚未达标 ❌ 不能
ready 训练完毕或模板复制完毕,等待上岗 ❌ 等待分配
active 已加入公司,处于正式工作状态 ✅ 能
suspended 被 CEO 暂停(表现不佳或公司调整) ❌ 暂停

4.4 模板库管理

模板库 data/system/templates/ 是一个不断进化的人才市场:

data/system/templates/
├── _registry.json             ← 模板注册表(索引所有可用模板)
├── _company_bootstrap/        ← 公司自举清单
│   └── manifest.json          ← 定义初始组织架构 (CEO/CTO/COO/HR)
│
├── ceo/                       ← 通用 CEO 模板
│   ├── agent.md              ← 通用的 CEO 职责(不含特定公司信息)
│   ├── soul.md               ← CEO 通用思维模式
│   ├── identity.md
│   ├── heartbeat.md
│   ├── tools.md
│   ├── user.md
│   └── config.json           ← type: "cxo"
│
├── cto/                       ← CTO 模板
├── coo/                       ← COO 模板
├── hr/                        ← HR 模板
├── qa-judge/                  ← 质量仲裁模板
├── agent_creator/             ← Agent Creator 模板
└── scrapling_crawler/         ← 爬虫模板

_registry.json 结构 (实际内容):

[
  {
    "id": "ceo",
    "name": "CEO / 首席执行官",
    "type": "cxo",
    "description": "公司战略规划、团队管理、OKR 制定、任务委派",
    "benchmarkScore": 97,
    "trainedAt": "2026-03-20",
    "usedCount": 9
  },
  {
    "id": "qa-judge",
    "name": "QA 仲裁者",
    "type": "specialist",
    "description": "质量验收、OKR 进度审查、标准化仲裁",
    "benchmarkScore": 95,
    "trainedAt": "2026-03-25",
    "usedCount": 6
  }
]

4.5 复制时的上下文注入

从模板复制到公司后,必须改写以下文件:

文件 注入内容
agent.md 追加:所属公司名称、公司使命、公司特定的约束规则
soul.md 追加:公司文化和价值观(如"我们是一家注重数据驱动的自媒体")
user.md 重写:上级是该公司的 CEO(而非 Master),写入 CEO 的偏好
config.json 添加 companyId 字段,更新 parent_id
memory/memory.md 初始化为空白(新公司、新记忆,不继承模板记忆)

五、生命周期流程

5.1 公司创建 + 招聘全流程

sequenceDiagram
    participant User as 用户
    participant Master as Master Agent
    participant System as 系统 API
    participant AC as agent-creator
    participant Inno as innovator
    participant CEO as 新 CEO Agent

    User->>Master: "帮我创建一家做公众号运营的公司"
    Master->>Master: 理解意图 → 确定公司定位和核心 SOP
    Master->>System: POST /api/company/create
    Note over System: 1. mkdir data/wechat-media-co/<br>2. 生成 company.json<br>3. 初始化 agents/, goals/, workspace/
    System-->>Master: ✅ 公司创建成功

    Master->>System: POST /api/company/:id/hire { role: "ceo" }
    Note over System: 在 templates/ 查找 "ceo" → ✅ 找到
    System->>System: 复制 templates/ceo → wechat-media-co/agents/ceo/
    System->>System: 注入公司上下文 (agent.md, user.md)
    System-->>Master: ✅ CEO 已入职

    Master->>CEO: TaskDispatch: "你是这家公司的 CEO,请规划战略并组建团队"

    CEO->>CEO: 分析公司定位 → 确定需要哪些角色
    CEO->>System: POST /api/company/:id/hire { role: "content-writer" }
    Note over System: templates/ 查找 → ✅ 找到 → 复制 + 注入
    CEO->>System: POST /api/company/:id/hire { role: "hot-topic-hunter" }
    Note over System: templates/ 查找 → ❌ 没有
    System->>AC: 创建 "hot-topic-hunter" Agent 骨架
    AC-->>System: 骨架已就绪
    System->>Inno: 启动 FDE 训练 (hot-topic-hunter)
    Inno->>Inno: Find → Digest → Evolve (循环至 ≥95)
    Inno-->>System: ✅ Benchmark 97 分,训练合格
    System->>System: 沉淀到 templates/hot-topic-hunter/
    System->>System: 复制到 wechat-media-co/agents/ + 注入上下文
    System-->>CEO: ✅ 热点搜索员已入职

    CEO->>System: POST /api/company/:id/goals/create
    CEO->>System: POST /api/company/:id/pipelines/create
    CEO-->>Master: "团队组建完毕,流水线已就绪,开始自主运行"

4.2 公司日常运行流程

sequenceDiagram
    participant HB as Heartbeat Service
    participant CEO as CEO Agent
    participant Writer as Content Writer
    participant Editor as Editor
    participant Pub as Publisher
    participant DA as Data Analyst

    loop 每日循环 (自动触发)
        HB->>CEO: [SYSTEM HEARTBEAT] 早间巡检
        CEO->>DA: "分析昨日数据,给出今日选题建议"
        DA-->>CEO: "昨日阅读量 Top3 关键词: AI教程, 提效工具, 副业"

        CEO->>Writer: "今日选题: AI提效工具盘点, 要求3000字"
        Writer-->>Editor: "初稿完成"
        Editor-->>Writer: "修改意见:开头太平,增加 hook"
        Writer-->>Editor: "修改稿完成"
        Editor-->>Pub: "审核通过,可发布"
        Pub->>Pub: 排版 + 定时发布
        Pub-->>CEO: "已发布,预计 18:00 推送"

        HB->>CEO: [SYSTEM HEARTBEAT] 晚间复盘
        CEO->>DA: "拉取今日文章数据"
        DA-->>CEO: "阅读 2340, 点赞 186, 新增关注 28"
        CEO->>CEO: 写入 memory → "AI提效选题表现良好,继续跟进"
    end

4.3 多公司并行

用户对 Master 的操作:

"帮我查看所有公司的运营状况"
  → Master 调用: GET /api/company/list
  → 返回: [ wechat-media-co (运行中, 今日发布1篇), manga-studio (筹建中) ]

"漫剧公司的 CEO 表现怎么样?"
  → Master 调用: GET /api/company/manga-studio/report
  → 返回: CEO 近7天日报汇总

"关闭自媒体公司"
  → Master 调用: POST /api/company/wechat-media-co/shutdown
  → CEO 收到关停指令 → 善后清理

六、API 设计

6.1 Company CRUD

方法 路径 说明
POST /api/company/create 创建新公司
GET /api/company/list 列出所有公司
GET /api/company/:companyId 获取公司详情
PUT /api/company/:companyId 更新公司信息
POST /api/company/:companyId/shutdown 关停公司

6.2 招聘与 Agent 管理

方法 路径 说明
POST /api/company/:companyId/hire 招聘 Agent (模板优先 → 培养兜底)
GET /api/company/:companyId/agents 列出公司内所有 Agent
POST /api/company/:companyId/agent/:agentId/chat 与公司内 Agent 对话
POST /api/company/:companyId/fire 解雇 Agent (suspend)

6.3 模板库

方法 路径 说明
GET /api/templates 列出所有可用模板
GET /api/templates/:templateId 查看模板详情

6.4 Company 内部:OKR 管理

方法 路径 说明
POST /api/company/:companyId/goals/create 创建公司 OKR
GET /api/company/:companyId/goals 获取公司 OKR 列表
PUT /api/company/:companyId/goals/:goalId 更新 OKR 节点

6.5 Company 运营

方法 路径 说明
GET /api/company/:companyId/report 获取公司运营报告
POST /api/company/:companyId/heartbeat 手动触发公司心跳

七、与现有系统的兼容设计

7.1 Agent 寻址变化

引入 Company 后,Agent 的寻址变为 Company 限定:

// 全局 Agent(不属于任何公司, companyId = 'system')
const agentDir = path.join(DATA_DIR, 'system', 'agents', agentId);
// 即: data/system/agents/master/

// 公司内 Agent
const agentDir = path.join(DATA_DIR, companyId, 'agents', agentId);
// 即: data/wechatai/agents/ceo/

实际策略:

  • config.json 含 companyId 字段。
  • companyId: "system" → 在 data/system/agents/ 下(全局 Agent)。
  • companyId: "{id}" → 在 data/{companyId}/agents/ 下(公司 Agent)。
  • 路由层通过 resolveAgentDir(companyId, agentId) 统一封装,向上层透明化。

7.2 OKR/Goals — 全部归属 Company

Goals/OKR 不再有全局作用域。每个 Goal 都必须隶属于一个 Company:

data/wechat-media-co/goals/G-001/   ← 自媒体公司的 OKR
data/manga-studio/goals/G-001/      ← 漫剧公司的 OKR(ID 互不冲突)

GoalsService 改造:

  • 构造时必须传入 companyId:new GoalsService(companyId)
  • 数据路径变为 data/{companyId}/goals/
  • _index.json 也随之放在公司目录下

7.3 Memory 隔离

Memory 天然隔离:因为 Memory 存储在各个 Agent 的目录下。 公司内的 Agent 在 data/{companyId}/agents/{agentId}/memory/ 下,自动与其他公司和全局 Agent 的记忆完全隔离。无额外代码改动。

7.4 Heartbeat 集成

HeartbeatService 扩展扫描范围:

  • 遍历 data/agents/ 下有 heartbeat.enabled 的全局 Agent(如 master)。
  • 遍历每个 data/{companyId}/ 下,读取 company.json 的心跳配置。
  • 若公司心跳开启,唤醒该公司的 CEO 作为入口(CEO 自行决定唤醒下属)。

八、实现计划 — Todo List

✅ Phase 1: 数据结构 + 模板库基础 (已完成)

  • [x] 1.1 创建 data/system/templates/ 目录,迁移现有 Agent 为模板(ceo, cto, coo, hr, qa-judge 等)
  • [x] 1.2 实现 company-service.js:Company CRUD (create / get / list / shutdown / start)
  • [x] 1.3 实现 resolveAgentDir(companyId, agentId) 统一寻址函数
  • [x] 1.4 实现 _registry.json 模板注册表,记录模板的 benchmarkScore、usedCount

✅ Phase 2: Agent 招聘系统 (Hiring Pipeline) (已完成)

  • [x] 2.1 实现 POST /api/company/:id/hire — 模板查找 → 复制 → 上下文注入
  • [x] 2.2 招聘兜底:模板不存在时自动调用 agent-creator 创建 + innovator FDE 训练
  • [x] 2.3 Benchmark 质量门禁:评分 ≥ 95 才允许上岗,不合格自动 re-evolve
  • [x] 2.4 训练合格后自动沉淀骨架到 templates/,更新 _registry.json

✅ Phase 3: CEO 自动建制 + OKR (已完成)

  • [x] 3.1 公司创建后自动招聘 CEO(从模板),CEO agent.md 注入公司使命
  • [x] 3.2 Bootstrap 自举机制:_company_bootstrap/manifest.json 定义初始组织 → 自动批量招聘 CEO/CTO/COO/HR
  • [x] 3.3 GoalsService 改造:OKR 支持全局 (data/goals/) + 公司级 (data/{companyId}/goals/)

✅ Phase 4: SOP 流水线 (已完成)

  • [x] 4.1 设计 Pipeline 数据结构({companyId}/pipelines/*.json)
  • [x] 4.2 实现 Pipeline 执行引擎 (pipeline-service.js):创建/运行/推进/驳回 全流程
  • [x] 4.3 CEO 可以通过 API 动态创建和调整 Pipeline

✅ Phase 5: 前端 Dashboard (已完成)

  • [x] 5.1 CompanyDashboard.vue — 公司仪表盘 (Agent 列表 + 运行状态 + 心跳控制)
  • [x] 5.2 公司详情页(Agent 列表 + 操作按钮: Chat/Skills/Train + per-agent 心跳开关)
  • [x] 5.3 OkrDashboard.vue — OKR 目标看板
  • [x] 5.4 MasterChatDrawer.vue — Master Agent 侧边抽屉对话

九、关键技术决策

# 问题 决策 说明
1 Agent ID 全局唯一还是公司内唯一? 公司内唯一 如 ceo 在每家公司内都叫 ceo,通过 companyId + agentId 联合定位
2 原有 data/agents/ 里的 Agent 迁移为模板 ceo、qa-judge 等迁入 data/templates/,master/innovator 保留为全局
3 招聘时模板不存在怎么办? agent-creator 创建 + innovator 训练到 ≥95 训练合格后自动沉淀为新模板,下次复用
4 Company 可以嵌套 Company 吗? v1.0 不支持 先做单层,未来有需求再做集团架构
5 跨公司 Agent 共享(如 innovator) 全局 Agent 池 data/agents/ 下的 Agent 可被任何公司调用
6 公司的"关停"语义 软关停 status=shutdown,停止心跳,保留数据
7 Goals/OKR 作用域 全部归属 Company 不设全局 OKR,每个目标都隶属于一个具体公司