Files
sanguo_moziplus_v2/docs/design/topic4-decomposition-skill-proposal.md
T
2026-05-15 22:00:22 +08:00

488 lines
18 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 课题4 设计方案:智能拆解机制 + Skill 体系工程落地
**作者**: 庞统士元
**日期**: 2026-05-15
**状态**: 方案待确认
**前置**: 课题1/2/3 已结题
**调研报告**: `docs/research/v2.6-research-04-decomposition-skills.md`
---
## Part A:智能拆解机制
### 1. 设计目标
v1.0 的拆解是"关键词匹配 → 固定 DAG 模板",问题是:
- 模板太死板(5个固定DAG),无法根据需求动态调整
- 关键词匹配粗糙,复杂需求容易匹配错模板
- 庞统拆解时靠 LLM 理解,没有结构化引导
课题4要解决:**庞统收到用户需求后,如何把它变成黑板上的任务(含依赖关系、角色分配、风险等级)。**
### 2. 和课题1/2/3的关系
课题1-3 已经定义了"任务在黑板上长什么样"tasks 表 schema、状态机、reviews 表、Guardrail 配置)。课题4定义的是"任务怎么被创建出来"。
```
课题4(创建) → 课题2(触发执行) → 课题3(审查) → 课题1(失败处理)
```
### 3. 设计决策
#### D4-1:模板组件库替代固定 DAG
> **参考实践**
> - **MetaGPT**SOP 自动链 + `_watch` 声明式订阅,不是固定 DAG
> - **get-shit-done**discuss→plan→execute→verify→ship 五阶段,但每阶段内部灵活
> - **open-multi-agent**Goal → DAG 自动分解,按 complexity 决定粒度
> - **v1.0**5 个固定模板(full_role_development / circular_review_test / multi_stage_review / data_acquisition / multi_edge_discussion
**方案**:不是 5 个完整 DAG,而是**模板组件库(Phase Components**。庞统按需组合。
```yaml
# template_components.yaml
components:
research:
trigger: "需要调研/分析"
mandatory: false
steps:
- id: lit_search
name: "资料调研"
agent: zhaoyun-data
output: "research_report.md"
- id: analysis
name: "分析总结"
agent: pangtong-fujunshi
output: "analysis.md"
design:
trigger: "需要架构/设计"
mandatory: false
steps:
- id: arch_design
name: "架构设计"
agent: pangtong-fujunshi
output: "design.md"
- id: design_review
name: "设计评审"
agent: simayi-challenger
review_type: plan_review
coding:
trigger: "需要编码/实现"
mandatory: false
steps:
- id: implement
name: "编码实现"
agent: zhangfei-dev
output: "code/"
- id: code_review
name: "代码评审"
agent: simayi-challenger
review_type: output_review
data:
trigger: "需要数据获取/处理"
mandatory: false
steps:
- id: data_acquire
name: "数据获取"
agent: zhaoyun-data
output: "data/"
- id: data_validate
name: "数据验证"
agent: zhaoyun-data
deploy:
trigger: "需要部署"
mandatory: false
steps:
- id: deploy
name: "部署"
agent: jiangwei-infra
output: "deploy_log.md"
- id: deploy_verify
name: "部署验证"
agent: jiangwei-infra
risk_control:
trigger: "涉及实盘/资金/策略"
mandatory: true # 触发条件满足时强制包含
steps:
- id: risk_check
name: "风控检查"
agent: guanyu-dev
review:
trigger: "always"
mandatory: true # 铁律 IR-1
steps:
- id: final_review
name: "最终审查"
agent: simayi-challenger
review_type: final_review
```
**庞统的拆解流程**
```
Step 1:需求结构化
- 分析用户输入,提取需求列表
- 每个需求标注类型(数据/编码/分析/部署/风控)
- 评估复杂度(简单/中等/复杂)
- 隐含需求挖掘(如用户说"回测"→ 隐含需要数据获取)
- 产出:structured_requirements → 写入黑板 decisions 表
Step 2:组件选择 + 组合
- 根据需求类型,从组件库选择需要的 phases
- 检查 mandatory 组件是否被遗漏
- 组合 phases,排列依赖关系
- AI 增强:增删调整(如"这次数据已有,跳过 data_acquire"
- 产出:draft_plan → 写入黑板 decisions 表
Step 3Plan Checker 验证
- 独立验证(不是庞统自己验证自己)
- 检查项:
- 覆盖性:每个需求是否被至少一个 step 覆盖
- 依赖性:step 依赖是否合理(无环、无遗漏前置)
- 粒度性:step 是否过大/过小
- 铁律:IR-1(每任务至少2 Agent)是否满足
- 风险:risk_level 是否合理,高风险任务是否有对抗审查
- 不通过 → 回 Step 2 调整(最多 2 轮)
- 通过 → 进入 Step 4
Step 4:任务创建
- 将 plan 转为黑板 tasks
- 每个 step → 一个 task(含 truths / artifacts / constraints / risk_level / assigned_to
- 依赖关系 → tasks 的 depends_on 字段
- 庞统在黑板上写 scope_declaration
- 产出:tasks 写入黑板 → Daemon 检测 → 开始执行
```
#### D4-2:需求结构化的输出格式
庞统分析用户需求后,输出结构化需求到黑板:
```json
{
"original_input": "实现一个双均线策略的回测",
"requirements": [
{
"id": "req-001",
"description": "获取标的分钟线数据",
"type": "data",
"acceptance_criteria": "数据文件存在于 NAS 指定路径",
"complexity": "simple",
"implicit": true
},
{
"id": "req-002",
"description": "编写双均线策略逻辑",
"type": "coding",
"acceptance_criteria": "策略代码通过单元测试",
"complexity": "medium",
"implicit": false
},
{
"id": "req-003",
"description": "回测并生成报告",
"type": "analysis",
"acceptance_criteria": "回测报告包含收益曲线和关键指标",
"complexity": "medium",
"implicit": false
}
],
"inferred_components": ["data", "coding", "analysis"],
"risk_level": "standard",
"estimated_tasks": 3
}
```
#### D4-3Plan Checker 独立验证
> **参考实践**
> - **superpowers**plan-document-reviewer subagent 独立验证方案
> - **oh-my-claudecode Critic**:预判→验证→自审五阶段
> - **get-shit-done**Scope Reduction Detection(完成后反向检查覆盖)
Plan Checker 是一个 Subagent(不需要 Agent 身份),Daemon spawn 后执行:
```yaml
# review_protocols/plan_check.yaml
name: plan_check
description: "验证庞统的拆解方案是否合理"
dimensions:
- id: coverage
description: "每个需求是否被至少一个 task 覆盖"
weight: critical
method: "需求 ID → task ID 映射矩阵,检查是否有遗漏"
- id: dependency
description: "依赖是否合理"
weight: critical
method: "拓扑排序检查无环,前置是否完整"
- id: granularity
description: "粒度是否合适"
weight: major
method: "检查每个 task 的 truths 是否是一个 Agent 一次 spawn 能完成的"
- id: iron_rules
description: "铁律是否满足"
weight: critical
method: "IR-1: 至少 2 Agent 参与;IR-2: 每个 task 有 truths"
- id: risk_alignment
description: "风险等级是否合理"
weight: major
method: "涉及资金/部署 → high;纯分析 → research"
output_schema: "schemas/plan-check-output.schema.json"
verdict_options: ["approved", "needs_revision"]
```
#### D4-4:复杂度驱动的粒度控制
> **参考实践**
> - **open-multi-agent**:按 complexity 决定是否拆分子任务
> - **wanman**Token 预算控制执行深度
| 复杂度 | 判断标准 | 拆解策略 | truths 定义 |
|--------|---------|---------|------------|
| **simple** | 单一文件、单一操作、< 50 行 | 1 个 task | 1-2 条 truths |
| **medium** | 多文件、有依赖、需要验证 | 1-3 个 task + 依赖 | 每个 2-3 条 truths |
| **complex** | 跨模块、多角色、需要调研 | 多 phase 组件组合 | 每个 3-5 条 truths |
**粒度自检规则**(庞统的 Skill 中定义):
- 一个 task 的 truths > 5 条 → 拆分
- 一个 task 需要跨 3+ 角色 → 拆分
- 一个 task 预计 > 30 分钟 → 拆分
#### D4-5:用户确认点
> **参考实践**
> - **get-shit-done**discuss phase 是必须的用户确认步骤
> - **v2.0 PRD**Phase 1 需求探索(苏格拉底对话)
不是每步都问用户,但在关键节点确认:
| 检查点 | 触发条件 | 用户看到什么 |
|--------|---------|------------|
| 需求确认 | Step 1 完成后 | 结构化需求列表 + 隐含需求 |
| 方案确认 | Step 2 完成后(complex 任务) | 任务列表 + 依赖关系 + 预估时间 |
simple 任务跳过方案确认,直接创建。complex 任务必须确认。
---
## Part BSkill 体系工程落地
### 4. 设计目标
三个课题产出了大量"Agent 需要知道怎么做"的内容(28 项 Skill TODO),需要一个系统的 Skill 体系来承载。
### 5. 设计决策
#### D4-6:五层 Skill 架构
> **参考实践**
> - **Claude Code**4 层渐进式加载(Discovery → Matching → Full Load → Overflow
> - **oh-my-claudecode**:三层组合(Execution + Enhancement + Guarantee
> - **nuwa-skill**5 阶段蒸馏 + 检查点 + 诚实边界
> - **v3.1 Skill 体系设计**(已确认):Hook 铁律 + Agent 角色 + 通用 Skill + moziplus 注入
```
┌─────────────────────────────────────────────────────────────┐
│ Layer 0: 铁律(Iron Rules
│ 机制: OpenClaw Hook before_prompt_build │
│ 自由度: 无 | 每轮强制注入 │
│ 内容: IR-1~IR-5(每个 Agent 可定制) │
│ Token: ~500 │
├─────────────────────────────────────────────────────────────┤
│ Layer 1: 角色(Agent Identity
│ 机制: SOUL.md + IDENTITY.md + AGENTS.md │
│ 自由度: 无 | 全量加载 │
│ 内容: 角色定义 + 行为准则 + 记忆 │
│ Token: ~2000 │
├─────────────────────────────────────────────────────────────┤
│ Layer 2: 准则(Guidelines
│ 机制: SKILL.md (type=guideline) │
│ 自由度: 中 | 按需加载(Discovery → Full Load
│ 内容: 检查清单 + 边界 + 诚实边界 │
│ Token: 列表 ~100, 全文 ~500 │
├─────────────────────────────────────────────────────────────┤
│ Layer 3: 技能(Procedures
│ 机制: SKILL.md (type=procedure) │
│ 自由度: 高 | 按需加载 │
│ 内容: 具体步骤 + 模板 + 脚本 + 示例 │
│ Token: 列表 ~100, 全文 ~2000 │
├─────────────────────────────────────────────────────────────┤
│ Layer 4: 引擎注入(Engine Context
│ 机制: Daemon 构造 L1 bootstrap 消息 │
│ 自由度: 无 | 每次 spawn 强制注入 │
│ 内容: 任务上下文 + Review Protocol + Guardrail 配置 │
│ Token: ~1000 │
└─────────────────────────────────────────────────────────────┘
```
#### D4-7:两种 Skill 类型
> **参考实践**
> - **oh-my-claudecode**:区分 ralplan(规划型)和 ralph(执行型)
> - **nuwa-skill**:每个 Skill 有 Agentic Protocol(定义"怎么做"
| 类型 | 作用 | 加载时机 | 示例 |
|------|------|---------|------|
| **guideline(准则型)** | 定义"应该考虑什么"、"边界在哪" | Agent 判断需要时 | 审查准则、编码规范、风控边界 |
| **procedure(过程型)** | 定义"具体怎么操作" | Agent 判断需要时 | 回测流程、数据获取、部署步骤 |
**区分标准**
- guideline 回答"应该注意什么"
- procedure 回答"具体怎么做"
#### D4-8Skill 注册和发现
> **参考实践**
> - **GSD**:文件系统扫描 + SKILL.md frontmatter + trigger hints
> - **Claude Code**skillListingBudgetFraction 控制 Skill 列表 token 占比
```yaml
# SKILL.md frontmatter 规范
---
name: quant-backtest
description: "量化策略回测执行流程。触发:回测、backtest。"
type: procedure # procedure | guideline
version: "1.0.0"
agents: [zhangfei-dev, jiangwei-infra] # 可选,空=所有 Agent 可见
triggers: [回测, backtest, 策略测试] # 可选,辅助匹配
related_skills: [data-acquisition, risk-assessment] # 可选,松耦合推荐
---
```
**发现机制**
1. 系统启动时扫描 skills/ 目录
2. 读取 frontmatter 构建索引
3. Agent 每轮推理时注入 Skill 列表(只有 name + description~100 token/skill
4. Agent 用 `read` 工具按需加载全文
#### D4-9Skill 诚实边界
> **参考实践**nuwa-skill 的 Agentic Protocol 要求每个 Skill 声明自己做不到什么
每个 Skill 必须包含 `## 诚实边界` section
```markdown
## 诚实边界
- 本 Skill 不覆盖实盘交易逻辑(实盘请参考 live-trading Skill
- 性能问题需要实际测试数据,纯代码审查无法确认
- 复杂策略可能需要拆分为多个 task
```
#### D4-10moziplus 专用 Skill 目录
moziplus 的 Skill 不是放在 OpenClaw 的 skills/ 下,而是放在 moziplus 项目内部:
```
sanguo_moziplus/
skills/
moziplus/
blackboard-operations/ # S-01: blackboard.py CLI 使用
SKILL.md
handoff-write/ # S-03: 写 Handoff Comment
SKILL.md
handoff-read/ # S-04: 读 Handoff Comment
SKILL.md
scope-declaration/ # S-10: claim 后写 scope_declaration
SKILL.md
review-output/ # S-15/17/18/19: 审查者全套
SKILL.md
review-protocol/ # S-13/14/18/19/20: 审查协议
SKILL.md
task-creation/ # S-21/22/23: 庞统创建任务
SKILL.md
task-decomposition/ # S-27: 庞统拆解方法
SKILL.md
l1-bootstrap/ # S-28: L1 消息构建
SKILL.md
review_protocols/ # D3-9: 审查协议 YAML
plan_review.yaml
output_review.yaml
guardrail_l2.yaml
analysis_review.yaml
plan_check.yaml # D4-3: Plan Checker 协议
schemas/ # D2-12: Schema 文件
handoff.schema.json
output.schema.json
decide.schema.json
observe.schema.json
review-output.schema.json
template_components.yaml # D4-1: 模板组件库
guardrails.yaml # D3-8: 声明式 Guardrail
```
#### D4-11Layer 4 引擎注入的具体内容
Daemon 每次 spawn Agent 时,在 L1 bootstrap 消息中注入:
```
[任务上下文]
任务 ID: task-001
任务标题: 双均线策略回测
任务状态: pending
风险等级: standard
truths: ["回测报告包含收益曲线", "策略代码通过单元测试"]
artifacts: ["task-001/output.md", "task-001/backtest_report.pdf"]
constraints: ["使用 vnpy 框架", "不超过 500 行"]
[Review Protocol](如果是审查者角色)
协议: output_review
审查维度: [requirement_traceability, scope_alignment, correctness, completeness]
审查方法: pre_commitment → verification → multi_perspective → gap_analysis → self_audit
多视角: 安全 / 新人 / 运维
对抗性指令: [DO NOT trust the report, ...]
输出 Schema: review-output.schema.json
[Guardrail 配置](如果是执行者角色)
output_guardrails:
- file_exists (blocking)
- json_valid (blocking)
- artifacts_exist (blocking)
[前序信息]
最近 3 条 comments:
[pangtong] 任务已创建,请开始工作
[zhangfei] ## Handoff: 完成了策略编码,产出 task-001/strategy.py
最新 output: task-001/strategy.py (summary: 双均线策略实现)
```
这些内容是 Daemon 根据 tasks 表 + reviews 表 + comments 表 + guardrails.yaml + review_protocols/ 动态拼装的。Agent 不需要自己找这些信息。
---
## 6. 和现有设计的对齐检查
| 已有设计 | 课题4 补充 | 一致性 |
|---------|-----------|--------|
| §3.2 tasks 表 schema | D4-1 模板组件输出 → tasks 写入 | ✅ truths/artifacts/constraints/risk_level/depends_on 对齐 |
| §9.2 分级审查矩阵 | D4-4 复杂度→粒度控制 | ✅ risk_level 在创建时标注 |
| §4.2 Tick+Inbox | D4-1 Step 4 创建任务后 Daemon tick 检测 | ✅ 创建是事件源 |
| §9.4 Review Protocol Registry | D4-10 moziplus Skill 目录 | ✅ review_protocols/ 在 Skill 目录下 |
| §9.9 Agent vs Subagent | D4-3 Plan Checker 走 Subagent | ✅ 无身份一次性检查 |
| Skill TODO 28项 | D4-10 Skill 目录结构 | ✅ S-01~S-28 有归属目录 |
## 7. 遗留 TODO
| # | 待解决事项 | 归属 | 说明 |
|---|----------|------|------|
| T4-1 | template_components.yaml 完整定义 | Phase 2 | 所有 phase 组件的详细定义 |
| T4-2 | Plan Checker 的 subagent 实现 | Phase 2 | plan_check.yaml + spawn 逻辑 |
| T4-3 | 需求结构化的 Skill(庞统) | Phase 2 | S-21 task-creation Skill |
| T4-4 | 拆解方法的 Skill(庞统) | Phase 2 | S-27 task-decomposition Skill |
| T4-5 | L1 bootstrap 消息拼装逻辑(Daemon | Phase 1 | S-28 + Daemon 代码 |
| T4-6 | Skill 注册/发现机制工程化 | Phase 2 | frontmatter 扫描 + 索引构建 |
| T4-7 | 铁律 Hook 实现 | Phase 1 | OpenClaw Plugin Hook |
| T4-8 | 现有 42 个 Skill 打标(guideline/procedure | Phase 2 | 分类 + 加 type 字段 |
| T4-9 | Skill 诚实边界补充 | Phase 2 | 每个 Skill 加 ## 诚实边界 |
| T4-10 | Skill 测试框架 | Phase 3 | 结构测试 + 干跑测试 + 场景测试 |