问题:技能爆炸
当 AI Agent 从 5 个技能增长到 30 个技能时,会出现一个经典的架构问题:
技能之间开始打架。
具体表现:
- 用户说"分析这个会议"——3 个技能都想响应
meeting-copilot写回了people/log.md,chat-analyst也要写同一个文件- 某个技能修改了需求状态,下游技能不知道
- 用户改了一处数据,两个技能各自维护了不一致的副本
这不是"再加个协调层"能解决的——这是架构问题。
4 层架构
经过 3 个月迭代(从 5 个到 30 个),我最终收敛出 4 层:
各层职责
| 层 | 职责 | 原则 |
|---|---|---|
| 入口层 | 识别用户意图,路由到正确技能 | 快速、确定性、不做业务逻辑 |
| 领域层 | 执行业务逻辑(会议/项目/团队/沟通) | 拥有数据写入权,遵循 SoT |
| 基座层 | 提供底层能力(飞书 API/Git/索引) | 无业务逻辑,被调用 |
| 质量层 | 门禁和验证(执行前/执行后) | 可中止流程,不做修改 |
路由:Entry Router 的设计
Entry Router 是最关键也最简单的组件——它只做分发,不做处理。
设计决策:路由基于关键词匹配 + 优先级裁定,不用 LLM 做意图分类。原因:
- 确定性 > 灵活性(用户说"帮我准备 1:1",100% 路由到 team-pulse,不要"可能是...")
- 快(毫秒级),不消耗 token
- 可审计(规则表可以 grep 检查)
数据协作:SoT 原则
30 个技能最大的风险是数据不一致。我的解法:
每个事实只有一个写入点(Single Source of Truth)。
规则很简单:
meetings/的 SoT 是 meeting-copilot(只有它能创建/修改会议实体)people/{account}/README.md的状态是 team-pulse 管的- 其他技能可以追加
log.md(R1 协议),但不能修改 README frontmatter - 所有追加必须带
source标签(谁写的、什么时候)
质量层:Gate 机制
质量层不做业务——它做拦截。
在领域技能执行前后,质量层的 Gate 会检查:
| Gate 位置 | 谁触发 | 检查什么 |
|---|---|---|
| 执行前 | spec-audit | 输入质量:需求是否定义清晰 |
| 执行前 | anti-fabrication | AI 是否在硬凑内容 |
| 执行后 | review-validation | 产出是否符合预期 |
| 执行后 | crystallization | 结论是否已回写 SoT |
| 执行后 | artifact-purity | 产物是否有会话痕迹 |
关键设计: Gate 可以中止流程。如果 spec-audit 发现需求定义不清,直接中止,让用户补充——而不是"带着不确定性继续执行"。
技能治理:从发现到退役
30 个技能不是一次性设计出来的——是 3 个月渐进式增长的结果。治理靠三个机制:
1. private-catalog.yaml
所有技能的注册表,记录每个技能的:
- 层级归属
- 关系图(谁调用谁、谁共享数据给谁)
- 状态(active / deprecated / planned)
2. skill-scout
发现新需求时:
- 判断现有技能是否能覆盖
- 如果不能 → 评估是新建还是扩展
- 注册到 catalog
3. skill-squadron
编队巡逻——周期性检查所有技能的:
- 关系图是否完整(缺失的 edge)
- 是否有冗余功能
- Gate 覆盖是否充分
关键设计决策
| 决策 | 选择 | 替代方案 | 理由 |
|---|---|---|---|
| 路由方式 | 关键词规则 | LLM intent classify | 确定性、速度、可审计 |
| 数据协作 | SoT + 追加协议 | 事件总线 | 简单、可 grep 追踪 |
| 质量保证 | Gate 中止 | 事后修复 | 防止错误扩散 |
| 治理方式 | YAML catalog | 数据库 | 可 git diff、可 review |
| 技能粒度 | 单一职责 | 大而全 | 可组合、可替换 |
教训
3 个月 30 个技能,最大的三个教训:
- 层级边界要刚性 — 基座层绝不做业务判断。一旦破例,就会变成所有技能都依赖的"上帝类"
- 写入权必须明确 — "大家都能写"等于"没人负责一致性"。SoT 原则是救命的
- Gate 比修复便宜 — 在错误发生前拦住,成本是事后补救的 1/10
最终理解:AI Agent 的能力上限不取决于单个技能有多强——取决于技能之间如何不打架。架构不是让系统变复杂的东西,是让复杂系统依然可控的东西。