24-company-layer-architecture.md
14.1 KB
24. Company Layer — 公司实例化架构
版本: v1.0 (需求分析 & 设计稿) 日期: 2026-03-25 状态: 规划中 前置: 四层 Agent 架构 (02 号文档)、OKR 目标体系、Memory 系统、Heartbeat 系统
一、核心问题
当前架构的瓶颈
现有的 LemonBoss 采用扁平化的单公司模型:
data/agents/
├── master ← 用户唯一的交互入口
├── ceo ← 单一 CEO
├── qa-judge ← 单一 QA
├── poet ← 扁平挂在全局下
├── innovator ← 扁平挂在全局下
└── ...
问题:
- 耦合:所有 Agent 共存于同一个
data/agents/目录,无法区分"做自媒体的编辑"和"做游戏的编辑"。 - CEO 单例:只有一个 CEO,如果同时要经营两家公司(自媒体 + 漫剧),CEO 要同时管两条完全不同的业务线,OKR 冲突、记忆污染。
- 无法独立闭环:没有"公司"这个边界,Agent 无法形成一个可以 24 小时自主运转、独立迭代的闭合体。
- 无法并行扩展:用户想创建第二家、第三家公司时,只能不断往同一个池里加人,而非开辟独立的组织空间。
设计目标
用户对 Master 说:"帮我创建一家做公众号运营的公司",系统应该:
- 创建一个独立的 Company 实例(如
wechat-media-co) - 为该公司分配(或新建)一个 CEO Agent
- CEO 自主规划战略、定义 SOP、创建所需的 Role Agent
- 公司内部形成独立闭环:从内容策划 → 创作 → 审核 → 发布 → 数据回收 → 策略调整
- 用户后续再说"帮我创建一家做漫剧的公司",系统创建第二个完全隔离的 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/
├── agents/ ← 全局 Agent(Master + 跨公司工具类 Agent)
│ ├── master/
│ ├── agent-creator/
│ └── innovator/
│
├── companies/ ← 📦 新增:公司实例目录
│ ├── wechat-media-co/ ← 公司实例 1
│ │ ├── company.json ← 公司元数据
│ │ ├── sop.md ← 公司 SOP(运营标准流程)
│ │ ├── agents/ ← 该公司的专属 Agent 池
│ │ │ ├── ceo/
│ │ │ ├── content-writer/
│ │ │ ├── editor/
│ │ │ ├── publisher/
│ │ │ └── data-analyst/
│ │ ├── goals/ ← 该公司的 OKR 树
│ │ │ └── G-001/
│ │ ├── pipelines/ ← 该公司的 SOP 流水线定义
│ │ │ └── daily-content.json
│ │ └── workspace/ ← 该公司的共享工作区
│ │ ├── content/
│ │ └── assets/
│ │
│ └── manga-studio/ ← 公司实例 2
│ ├── company.json
│ ├── agents/
│ ├── goals/
│ └── ...
│
└── goals/ ← 全局 OKR (跨公司的顶层战略目标)
3.2 company.json 结构
{
"id": "wechat-media-co",
"name": "柠檬自媒体",
"description": "专注微信公众号内容运营,以 AI 驱动的内容工厂模式实现日更",
"status": "running",
"createdAt": "2026-03-25T17:00:00Z",
"createdBy": "master",
"ceo": "ceo-wechat",
"sop": {
"pipeline": "daily-content",
"description": "选题 → 写稿 → 审核 → 排版 → 发布 → 数据回收"
},
"agents": [
"ceo-wechat",
"content-writer-01",
"editor-01",
"publisher-01",
"data-analyst-01"
],
"heartbeat": {
"enabled": true,
"intervalMinutes": 30
},
"config": {
"timezone": "Asia/Shanghai",
"maxAgents": 10,
"budget": {
"dailyTokenLimit": 500000,
"monthlyBudget": 100
}
}
}
四、生命周期流程
4.1 公司创建流程
sequenceDiagram
participant User as 用户
participant Master as Master Agent
participant System as 系统 API
participant CEO as 新 CEO Agent
User->>Master: "帮我创建一家做公众号运营的公司"
Master->>Master: 理解意图 → 确定公司定位和核心 SOP
Master->>System: POST /api/company/create
Note over System: 1. mkdir data/companies/wechat-media-co/<br>2. 生成 company.json<br>3. 初始化 agents/, goals/, workspace/
System-->>Master: ✅ 公司创建成功
Master->>System: POST /api/company/:id/hire-ceo
Note over System: 1. 使用 agent-creator 创建 CEO Agent<br>2. CEO agent.md 写入公司使命<br>3. CEO user.md 写入:上级是 Master
System-->>Master: ✅ CEO 已上任
Master->>CEO: TaskDispatch: "你是这家公司的 CEO,请规划战略并组建团队"
CEO->>CEO: 分析公司定位 → 设计内容流水线 SOP
CEO->>System: POST /api/company/:id/agents/create (批量创建)
Note over CEO: 创建: 内容策划、写手、编辑、发布、数据分析
CEO->>System: POST /api/company/:id/goals/create
Note over CEO: 创建: 公司 OKR(如:30天粉丝破万)
CEO->>System: POST /api/company/:id/pipelines/create
Note over CEO: 定义: 每日内容产出 SOP 流水线
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 设计
5.1 Company CRUD
| 方法 | 路径 | 说明 |
|---|---|---|
POST |
/api/company/create |
创建新公司 |
GET |
/api/company/list |
列出所有公司 |
GET |
/api/company/:companyId |
获取公司详情 |
PUT |
/api/company/:companyId |
更新公司信息 |
POST |
/api/company/:companyId/shutdown |
关停公司 |
5.2 Company 内部:Agent 管理
| 方法 | 路径 | 说明 |
|---|---|---|
POST |
/api/company/:companyId/agents/create |
在公司内创建 Agent |
GET |
/api/company/:companyId/agents |
列出公司内所有 Agent |
POST |
/api/company/:companyId/hire-ceo |
为公司任命 CEO |
5.3 Company 内部:OKR 管理
| 方法 | 路径 | 说明 |
|---|---|---|
POST |
/api/company/:companyId/goals/create |
创建公司级 OKR |
GET |
/api/company/:companyId/goals |
获取公司 OKR 列表 |
5.4 Company 运营
| 方法 | 路径 | 说明 |
|---|---|---|
GET |
/api/company/:companyId/report |
获取公司运营报告 |
POST |
/api/company/:companyId/heartbeat |
手动触发公司心跳 |
六、与现有系统的兼容设计
6.1 Agent 寻址变化
当前系统的 Agent 通过 agentId 全局唯一寻址(如 ceo)。
引入 Company 后,Agent 的寻址变为 Company 限定:
// 旧: 全局 Agent
const agentDir = path.join(DATA_DIR, agentId);
// 即: data/agents/ceo/
// 新: 公司内 Agent
const agentDir = path.join(COMPANIES_DIR, companyId, 'agents', agentId);
// 即: data/companies/wechat-media-co/agents/ceo-wechat/
// 新: 全局 Agent(不属于任何公司)
const agentDir = path.join(DATA_DIR, agentId);
// 即: data/agents/master/ ← 不变
兼容策略:
config.json增加companyId字段(可选)。- 有
companyId→ 在data/companies/{companyId}/agents/下。 - 无
companyId→ 在data/agents/下(全局)。 - 路由层通过 resolveAgentDir(agentId) 统一封装,向上层透明化。
6.2 OKR/Goals 隔离
data/goals/ ← 全局大盘(跨公司的顶级战略目标)
data/companies/{co}/goals/ ← 公司内部的执行类 OKR
GoalsService 增加一个 scope 参数:
scope = 'global'→ 读写data/goals/scope = companyId→ 读写data/companies/{companyId}/goals/
6.3 Memory 隔离
Memory 天然隔离:因为 Memory 存储在各个 Agent 的目录下(agents/{id}/memory/)。
当公司内的 Agent 在 data/companies/{co}/agents/{id}/memory/ 下时,自动与全局 Agent 的记忆完全隔离。无代码改动。
6.4 Heartbeat 集成
HeartbeatService 扩展扫描范围:
- 遍历
data/agents/下有heartbeat.enabled的全局 Agent。 - 遍历
data/companies/*/agents/下有heartbeat.enabled的公司内 Agent。 - 可以在
company.json层级设置整个公司的心跳开关。
七、实现计划 — Todo List
Phase 1: 数据结构基础
- [ ] 1.1 创建
data/companies/目录和company-service.js - [ ] 1.2 实现 Company CRUD:create / get / list / update / shutdown
- [ ] 1.3 实现
resolveAgentDir(agentId, companyId?)统一寻址函数 - [ ] 1.4 修改
agent-chat.js路由支持companyId上下文
Phase 2: CEO 自动建制
- [ ] 2.1 实现
POST /api/company/:id/hire-ceo(调用 agent-creator 并自动填充上下文) - [ ] 2.2 CEO 的
agent.md模板:包含公司使命、员工创建权限、SOP 设计权限 - [ ] 2.3 CEO 首次运行后自动规划(通过 TaskDispatch 触发"规划战略并组建团队")
Phase 3: SOP 流水线
- [ ] 3.1 设计 Pipeline 数据结构(
pipelines/*.json) - [ ] 3.2 实现 Pipeline 执行引擎(按步骤自动触发对应 Agent)
- [ ] 3.3 CEO 可以通过工具动态调整 Pipeline
Phase 4: 前端 Dashboard
- [ ] 4.1 公司列表页(展示所有公司卡片 + 运行状态)
- [ ] 4.2 公司详情页(组织架构图 + OKR 大盘 + Agent 列表)
- [ ] 4.3 公司日报/周报自动生成与展示
八、关键技术决策
| # | 问题 | 决策 | 说明 |
|---|---|---|---|
| 1 | Agent ID 全局唯一还是公司内唯一? | 全局唯一 | 使用 {role}-{companySlug} 命名法,如 ceo-wechat |
| 2 | 原有的 data/agents/ceo 怎么处理? |
渐进迁移 | 旧的全局 Agent 保留不动,新建公司时在 companies 下创建 |
| 3 | Company 的 CEO 是新建还是复用? | 每家公司新建独立 CEO | 避免记忆污染和注意力分散 |
| 4 | Company 可以嵌套 Company 吗? | v1.0 不支持 | 先做单层,未来有需求再做集团架构 |
| 5 | 跨公司 Agent 共享(如 innovator) | 全局 Agent 池 | data/agents/ 下的 Agent 可以被任何公司调用 |
| 6 | 公司的"关停"语义 | 软关停 | 标记 status=shutdown,停止心跳,保留数据 |