Files
sanguo_moziplus_v2/docs/design/01-four-phase-loop.md
T
2026-05-29 00:47:23 +08:00

375 lines
16 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.
# #01 四相循环实施方案
**序号**: #01
**名称**: 四相循环 — PRD Phase 1~4 完整实现方案
**版本**: v1.0
**基于**: PRD-v3.0 §4 四相架构 + architecture-v3.0.md
**作者**: 庞统(副军师)🐦
**日期**: 2026-05-29
**状态**: 待评审
**评审**: 司马懿
---
## §1. 背景和问题
### 1.1 当前状态
moziplus v2.0 已实现:
- Blackboard 黑板(SQLite 14 表)
- Comment + @mention 系统
- Agent 认领(claim API + CAS
- Daemon 30s tick 调度循环
- Guardrail 安全红线
- SubTask 模型 + Mail Tab
### 1.2 核心问题
PRD-v3.0 定义了四相架构(需求探索 → 动态规划 → 自主执行 → 主动汇报),但当前代码只实现了"Phase 3 的后半段"——Daemon 调度 Agent 执行。缺失:
1. **Phase 2 的讨论涌现**:Agent 不在黑板上讨论,不自主创建任务,完全依赖 Daemon 调度
2. **Phase 3 的持续指挥**:庞统不在一轮结束时 review,没有方向校正机制
3. **司马懿全维度质量门控**:当前只有代码评审 skill,缺少需求覆盖、方向一致性、产出物验证等维度
4. **Phase 3 的完整闭环**:每个 Agent 完成后过司马懿 review(已实现),但一轮结束后的庞统 review + 动态调整 + 循环未实现
### 1.3 设计原则
> PRD 是目标,T 阶段不是。不按 T 阶段拆分,四相循环一起实现。
---
## §2. 核心模型:四相循环
```
Phase 1: 需求探索
用户 + 庞统苏格拉底对话 → 明确 goal
庞统创建 parent taskgoal 写入 must_haves
Phase 2: 动态规划(讨论涌现)
庞统把 goal 写到黑板 → spawn 各 Agent 读黑板
各 Agent 在黑板上讨论(comment / @mention
讨论过程中庞统无形中对齐方向(回答 @ 的问题)
讨论收敛 → 各 Agent 自主创建 sub task
不确定时 @ 庞统 进行目标对齐
Phase 3: 自主执行(循环)
┌─────────────────────────────────────────────┐
│ │
│ Daemon tick 派发 pending sub tasks │
│ 各 Agent 自主执行 │
│ Agent 完成 → 司马懿 review(已有机制) │
│ review 通过 → sub task done │
│ review 不通过 → Agent 修改 → 再 review │
│ │
│ 一轮结束(parent 下所有 sub 终态) │
│ ↓ │
│ 庞统 review 三问: │
│ 1. Goal 还清晰吗? │
│ 2. 成果物覆盖 goal 了吗? │
│ 3. 下一轮需要做什么? │
│ ↓ │
│ 庞统决定: │
│ - 创建新一轮 sub tasks → 回到执行 │
│ - goal 达成 → 进入 Phase 4 │
│ - 方向偏离 → 调整 goal + 新一轮 │
│ │
└─────────────────────────────────────────────┘
Phase 4: 主动汇报
庞统推送成果物摘要 + 关键发现
用户验收
```
### 2.1 关键设计决策
| 决策 | 选择 | 理由 |
|------|------|------|
| "一轮"定义 | parent 下所有 sub task 均为终态(done/failed/cancelled | 方案 A,简洁可靠 |
| 庞统参与方式 | 讨论阶段通过 @mention 回答问题,一轮结束时 spawn review | 不全程在线(OpenClaw 限制),但关键节点在场 |
| Agent 自主度 | Auftragstaktik + Autonomy Directive | 给目标不给步骤,Agent 自主决定怎么协作 |
| 司马懿 review 时机 | 每个 Agent 完成任务后 | 已有机制,不变 |
| 庞统 review 时机 | 一轮结束时 | 检查整体方向,不介入每个 sub task |
| 讨论时机 | 随时,不僵化分阶段 | Phase 2 和 Phase 3 都可以在黑板上讨论 |
### 2.2 人的参与密度(PRD B4
| Phase | 人的参与 | AI 自主 |
|-------|---------|--------|
| Phase 1 | 高(和庞统对话) | 庞统主动提问 |
| Phase 2 | 可选(可旁观讨论) | Agent 自主讨论、创建任务 |
| Phase 3 | 几乎不参与 | 只有安全红线才拉人 |
| Phase 4 | 验收 | AI 主动推送 |
---
## §3. Agent Spawn Prompt 设计
### 3.1 设计理念
不是"固定步骤",不是"庞统规划流程",而是:
1. 告诉 Agent 目标和约束(Auftragstaktik
2. 告诉 Agent 黑板 API 能力
3. 告诉 Agent 你是自主的(Autonomy Directive
4. 告诉 Agent 行为边界(Boids 四条)
5. 让 Agent 自己决定怎么协作和讨论
### 3.2 优秀实践来源
| 实践 | 来源 | 启示 |
|------|------|------|
| **Autonomy Directive** | oh-my-codex 实践 #12 | Agent 自主执行,遇阻才问 |
| **Auftragstaktik 任务式指挥** | moziplus-agent-lifecycle #4 | Intent→End State→Constraints,不指定步骤 |
| **Boids 群体智能** | moziplus-agent-lifecycle #6 | Separation/Alignment/Cohesion/Boundary |
| **元认知自评** | moziplus-agent-lifecycle #5 | Agent 产出自带 confidence |
| **Agent API 契约自描述** | moziplus-agent-lifecycle #9 | API 返回可操作错误信息 |
| **约束分级**(高/中/低自由) | quality-gate-patterns #2 | 不同场景用不同严格度 |
### 3.3 Spawn Prompt 框架
```
## 你的任务
{goal_snapshot}
## 约束
{constraints}
## 黑板 API
你可以随时:
- 读黑板:GET /api/projects/{pid}/tasks/{tid}(含 comments、outputs
- 写 commentPOST /api/projects/{pid}/tasks/{tid}/comments
body: { "author": "{agent_id}", "body": "内容", "mentions": ["agent_id"] }
- 创建 sub taskPOST /api/projects/{pid}/tasks
- 认领任务:POST /api/projects/{pid}/tasks/{tid}/claim
## 行为准则
1. 你是自主的。读黑板、思考、行动,不要等指令。
2. 不确定时 @pangtong-fujunshi 对齐目标。
3. 需要协作时 @ 对应 Agent。
4. 讨论是随时灵活的,执行过程中也可以在黑板上讨论。
5. 产出写入 output,完成时通知。
## 完成标准
{success_criteria}
```
### 3.4 @mention 通知机制
Agent 写 comment 时指定 mentions → Daemon tick 扫描新 comments → spawn 被 @ 的 Agent 读黑板。
---
## §4. 庞统 Review 机制
### 4.1 触发条件
Daemon 30s tick 检测:parent task 下所有 sub task 均为终态(done/failed/cancelled)。
### 4.2 Review 三问(框架,不是限制)
庞统被 spawn 后拿到:
- goal_snapshot:原始 goal
- round_outputs:本轮所有 sub task 产出物聚合
- round_comments:本轮黑板讨论记录
庞统自主判断,不限于三问,但三问是核心框架:
1. **Goal 还清晰吗?** — 是否被静默修改(goal drift)
2. **成果物覆盖 goal 了吗?** — 逐条检查验收标准
3. **下一轮需要做什么?** — 创建新一轮 sub tasks / 标记完成 / 调整方向
### 4.3 调整能力
庞统 review 后可执行的操作(不限制,以下是已知操作类型):
| 操作 | 说明 | 优秀实践来源 |
|------|------|-------------|
| 创建新 sub tasks | 补充遗漏工作 | open-multi-agent Goal→DAG |
| 拆分过大任务 | 任务太大则拆 | moziplus 实践模板骨架+AI填充 |
| 标记偏离 | 需求被静默丢弃 | GSD Scope Reduction Detection |
| 调整优先级 | 根据执行进展重排 | Hermes `/goal` 持续锁定 |
| 修改 goal | 用户改主意时 | PRD B2 "计划可演进" |
| 终止/重来 | 方向完全偏了 | TradingAgents 动态图构建 |
---
## §5. 司马懿 Review 扩展
### 5.1 机制不变
每个 Agent 完成任务后 → 司马懿 review → 通过才算 done。这是已有机制,**不变**。
### 5.2 质量维度扩展
当前只有代码评审,需要扩展到全维度质量把控。司马懿根据优秀实践自行设计 review skill,以下是调研结果供参考:
#### 可用优秀实践
| 实践 | 来源 | 司马懿可用场景 |
|------|------|--------------|
| **三阶段评估门控**(机械→语义→共识) | quality-gate-patterns #1 | 代码用机械+语义,方向一致性用共识 |
| **Scope Reduction Detection** | GSD 实践 #2 | 检查需求是否被静默丢弃 |
| **反合理化表** | quality-gate-patterns #3 | 每个 Skill 内置"常见借口+反驳" |
| **约束分级**(高/中/低自由) | quality-gate-patterns #2 | brainstorming 高自由,部署低自由 |
| **Auftragstaktik 三元组** | moziplus-agent-lifecycle #4 | 检查 Intent→End State→Constraints 是否完整 |
| **元认知自评** | moziplus-agent-lifecycle #5 | Agent 产出自带 confidence,司马懿决定是否升级 |
| **决策覆盖门禁** | GSD 实践 #5 | 讨论中的决策是否落地到产出 |
| **产出物验证** | Hermes 幻觉门控 | 产出物是否真实存在、可验证 |
#### 建议的 Review 维度
| 维度 | 检查内容 | 约束等级 |
|------|---------|---------|
| 需求覆盖 | 产出是否覆盖 task 的 must_haves | 中自由 |
| 设计-代码一致性 | 代码是否和设计文档对齐 | 中自由 |
| 代码质量 | 规范、安全、边界条件(现有) | 低自由 |
| 方向一致性 | 是否偏离 parent goal | 中自由 |
| 产出物真实性 | 文件是否存在、可验证 | 低自由 |
### 5.3 司马懿角色定义建议
AGENTS.md 中的角色从"质量总监:代码评审、多空辩论、最终验收"调整为:
> **质量总监:全维度质量把控**
> - 需求一致性检查
> - 设计-代码一致性检查
> - 代码质量评审
> - 方向一致性检查
> - 产出物验证
> - 不同维度使用不同的 review skill
> - 反合理化:不做"建议优化",必须说"第X行有问题,应该改为Y,因为Z"
---
## §6. 代码改动清单
### 6.1 Daemon 层
| 文件 | 改动 | 说明 |
|------|------|------|
| `ticker.py` | 新增 `_check_round_complete()` | 检测 parent 下所有 sub 终态 |
| `ticker.py` | 新增 `_spawn_pangtong_review()` | 一轮结束时 spawn 庞统 review |
| `ticker.py` | 新增 `_process_mentions()` | 扫描新 comments 的 mentions → spawn 被 @ 的 Agent |
| `dispatcher.py` | 扩展 spawn 类型 | 支持 "discussion" spawnPhase 2+ "review" spawn(一轮结束) |
| `bootstrap.py` | 扩展上下文构建 | 构建 goal + 一轮成果物聚合 + 讨论 history |
| `spawner.py` | 更新 prompt 模板 | 使用 §3.3 的 spawn prompt 框架 |
### 6.2 API 层
| 文件 | 改动 | 说明 |
|------|------|------|
| `blackboard_routes.py` | 新增成果物聚合端点 | `GET /tasks/{id}/outputs/aggregate` 聚合 parent 下所有 sub 的 outputs |
### 6.3 Model 层
| 文件 | 改动 | 说明 |
|------|------|------|
| `operations.py` | 新增 `get_subtasks_status()` | 批量查询 parent 下所有 sub 状态 |
| `operations.py` | 新增 `get_mentioned_agents()` | 从 comments 中提取未通知的 mentions |
### 6.4 Skill 层
| 位置 | 内容 | 说明 |
|------|------|------|
| 司马懿 workspace | review skill 文件 | 司马懿基于 §5.2 优秀实践自行设计 |
| 庞统 bootstrap | review prompt 模板 | 庞统 review 的三问框架 |
### 6.5 前端(可选,后续)
| 改动 | 说明 |
|------|------|
| 黑板讨论面板增强 | 实时显示 comments、@mention 高亮 |
| 一轮进度指示 | 显示当前轮次、已完成/总计 sub task |
---
## §7. 安全红线(不变)
现有 `guardrails.yaml` 的 6 条红线不变。Phase 3 循环中:
- 非红线操作 → AI 自主决策,不拉人
- 红线触发 → `block_and_notify` / `pause_and_escalate`
---
## §8. 风险和缓解
| 风险 | 缓解 |
|------|------|
| Agent 讨论不收敛,无限循环 | 庞统兜底:讨论超过 N 轮未收敛 → 庞统裁决创建任务 |
| 庞统 review 产出质量不稳定 | 司马懿可以 challenge 庞统的 review 结果(rebuttal 机制) |
| @mention 风暴(互相 @ 导致 spawn 爆炸) | Daemon 去重:同一 Agent 在同一 task 的 pending mention 合并为一次 spawn |
| 一轮结束检测延迟(最长 30s) | 可接受,30s tick 是当前设计约束 |
| Agent 创建 sub task 不规范 | 庞统 review 时检查,不合规的 sub task 打回 |
---
## §9. 验证标准
| 标准 | 验证方式 |
|------|---------|
| Phase 2 讨论:Agent 能在黑板上写 comment + @mention | E2Espawn Agent → 检查 comment 写入 |
| Phase 2 涌现:Agent 能自主创建 sub task | E2EAgent 通过 API 创建 sub task |
| @mention 通知:被 @ 的 Agent 能被 spawn | E2E:写 comment @zhaoyun-data → Daemon spawn 赵云 |
| 一轮结束检测:parent 下所有 sub 终态 → 触发庞统 review | E2E:创建 parent + subs → 完成 subs → 检测庞统 spawn |
| 庞统 review:能创建新一轮 sub tasks 或标记完成 | E2E:庞统 review 后检查新 sub task 创建 |
| 司马懿 review:每个 Agent 完成后必须过 review | 已有机制,回归测试 |
| 安全红线不触发时 AI 全自主 | E2E:正常任务不触发 guardrail |
---
## 附录 A:讨论过程记忆
### A.1 讨论背景
基于 PRD-v3.0 四相架构(需求探索→动态规划→自主执行→主动汇报),讨论如何将 PRD 的设计落地到实际代码中。
### A.2 关键讨论节点
1. **B8/B9 确认移除**:经代码验证,BUG-7planning 暂停失败)和 BUG-8cancel→resume 空图完成)是 v1.0 (mozi) 的 bugmoziplus v2.0 没有 `planning` 状态和 `execute_graph`,从 T2 中移除。
2. **持续指挥 vs 庞统 native**:初始方案是"庞统全程在场持续指挥",用户指出风险——"搞不好就是庞统 native"。改为:**Agent 在黑板上讨论涌现**,庞统通过 @mention 回答问题和一轮结束时 review 来参与,不是独裁者而是引导者。
3. **"一轮"定义**:确认方案 A——parent task 下所有 sub task 均为终态(done/failed/cancelled)。
4. **司马懿角色扩展**:从"代码评审"扩展为"全维度质量把控"(需求覆盖、设计一致性、代码质量、方向一致性、产出物验证)。用户强调"质量包括更广义的范围"。
5. **司马懿 review skill 设计方式**:用户要求"基于优秀实践",不要庞统拍脑袋设计。调研了 quality-gate-patterns、GSD、moziplus-agent-lifecycle 等实践,整理成参考材料供司马懿自行设计。
6. **讨论时机灵活化**:用户强调"讨论是随时灵活的,哪怕任务执行过程中也可以随时讨论,不要僵化"。Phase 2 和 Phase 3 的讨论不硬分,黑板讨论贯穿全程。
7. **用户不参与触发**:确认 PRD B4 原则——AI 能决定就 AI 决定,人只在安全红线和最终验收时介入。当前 `guardrails.yaml` 已实现 6 条红线。
8. **T 阶段不是目标**:用户明确"别被 T2 限制,T2 不是目标,PRD 才是"。四相循环一起实现,不按 T 阶段拆分。
9. **评审机制强调**:用户要求庞统和司马懿可以 rebuttal,"我需要更优的方案,不是谁服从谁"。
### A.3 优秀实践引用
| 来源 | 关键实践 | 引用位置 |
|------|---------|---------|
| oh-my-codex | Autonomy Directive | §3.3 Spawn Prompt |
| moziplus-agent-lifecycle | Auftragstaktik 任务式指挥 | §3.1, §4.3 |
| moziplus-agent-lifecycle | Boids 群体智能四条 | §3.3 |
| moziplus-agent-lifecycle | 元认知自评 confidence | §5.2 |
| moziplus-agent-lifecycle | Agent API 契约自描述 | §3.3 |
| quality-gate-patterns | 三阶段评估门控 | §5.2 |
| quality-gate-patterns | 反合理化表 | §5.2 |
| quality-gate-patterns | 约束分级 | §5.2 |
| GSD | Scope Reduction Detection | §4.3, §5.2 |
| GSD | 决策覆盖门禁 | §5.2 |
| Hermes | 幻觉门控(产出物验证) | §5.2 |
| PRD-v3.0 | B4 人退到边缘 | §2.2 |
| PRD-v3.0 | 四相架构 | §2 |
| architecture-v2.6 | 黑板讨论示例 | §3.3 |
### A.4 待确认事项
无。本方案为完整设计方案,待司马懿评审后决定下一步。