diff --git a/docs/design/11-context-layers-redesign.md b/docs/design/11-context-layers-redesign.md index 8886871..6a17236 100644 --- a/docs/design/11-context-layers-redesign.md +++ b/docs/design/11-context-layers-redesign.md @@ -1,9 +1,9 @@ # #11 上下文四层架构重新定位方案 -> 版本: v2.0 +> 版本: v2.1 > 日期: 2026-06-04 > 作者: 庞统(副军师) -> 状态: **待确认** +> 状态: **实施中** > 来源: 用户设计思路 + NAS 知识库调研(ClawTeam/Superpowers/GSD/Hermes/oh-my-claudecode) --- @@ -169,7 +169,9 @@ Shared Memory → Boids Rules(仅 team>1) → Task → Context → Coordination - ❌ 经验/知识 → L3 D 类 Skill - ❌ `prompt_templates/` 目录 → **废弃**,操作规范从 Skill 文件读 -**token 预算**:~600 tokens(任务上下文 ~200 + 操作规范 ~300 + 硬约束 ~100) +**token 预算**:~800 tokens(任务上下文 ~200 + 操作规范 ~500 + 硬约束 ~100) + +> **注**: A 类 Skill 实际约 500-800 tokens(远超原始估计的 300),已调整总预算。build() 中加 token 计数 + 日志告警(超出预算时 warn 但不截断)。 **设计理由**: 1. **A 类 Skill 引擎直接注入**:操作规范是每次执行必须遵守的,不能靠 Agent 自主触发,必须确定性注入 @@ -392,7 +394,7 @@ Shared Memory → Boids Rules(仅 team>1) → Task → Context → Coordination 2. B/C/D 类是辅助性的,按需加载可节省 context 3. 分类清晰,开发者一眼就知道新 Skill 该归哪类、走哪种注入方式 -### D6: L1 SOUL.md 决策模式中加"执行任务前,先读 skill-router" +### D6: L1 SOUL.md 决策模式中加"执行任务前,先读 skill-router Skill 查找相关操作规范和方法论" **设计**:在所有 Agent 的 SOUL.md 决策模式中加一条引导规则,让 Agent 养成"先查路由表再定位 Skill"的习惯。 @@ -405,30 +407,30 @@ Shared Memory → Boids Rules(仅 team>1) → Task → Context → Coordination ## 六、实施路线 -### Phase 2: L3 Skill 创建 + L2 BootstrapBuilder 改造(已完成) +### Phase 2: L3 Skill 创建 + L2 BootstrapBuilder 改造 | Step | 内容 | 状态 | |------|------|------| -| Step 1 | 创建 `skill-router` 路由速查表 Skill | ✅ 待实施 | -| Step 2 | 改 L1 SOUL.md 决策模式加"执行任务前先读 skill-router" | ✅ 待实施 | -| Step 3 | 创建 A 类 Skill(6个操作规范型) | ✅ 待实施 | -| Step 4 | 创建 B 类 Skill(4个方法论型) | ✅ 待实施 | -| Step 5 | 创建 C 类 Skill(1个审查协议型)+ D 类 Skill(3个经验型) | ✅ 待实施 | +| Step 1 | 创建 `skill-router` 路由速查表 Skill | ✅ 已创建 | +| Step 2 | 改 L1 SOUL.md 决策模式加"执行任务前先读 skill-router" | ✅ 已完成 | +| Step 3 | 创建 A 类 Skill(6个操作规范型) | ⏳ 待实施 | +| Step 4 | 创建 B 类 Skill(4个方法论型) | ⏳ 待实施 | +| Step 5 | 创建 C 类 Skill(1个审查协议型)+ D 类 Skill(3个经验型) | ⏳ 待实施 | ### Phase 3: L2 BootstrapBuilder 代码改造(依赖 Phase 2) | Step | 内容 | 状态 | |------|------|------| -| Step 6 | 改 BootstrapBuilder:ROLE_SKILL_MAP + _read_skill + _format_constraints | ✅ 待实施 | -| Step 7 | 改 spawner build_message() 走 BootstrapBuilder 路径 | ✅ 待实施 | -| Step 8 | 清理 prompt_templates/ 目录(操作规范已从 Skill 文件读) | ✅ 待实施 | +| Step 6 | 改 BootstrapBuilder:ROLE_SKILL_MAP + _read_skill + _format_constraints | ⏳ 待实施 | +| Step 7 | 改 spawner build_message() 走 BootstrapBuilder 路径 | ⏳ 待实施 | +| Step 8 | 清理 prompt_templates/ 目录(操作规范已从 Skill 文件读) | ⏳ 待实施 | ### Phase 4: E2E 验证 + 清理(依赖 Phase 3) | Step | 内容 | 状态 | |------|------|------| -| Step 9 | E2E 全流程验证:单任务 spawn → 检查注入内容精简 | ✅ 待实施 | -| Step 10 | 清理废弃代码(skill_system.py / SkillRegistry / experiences 表) | ✅ 待实施 | +| Step 9 | E2E 全流程验证:单任务 spawn → 检查注入内容精简 | ⏳ 待实施 | +| Step 10 | 清理废弃代码(skill_system.py / SkillRegistry / experiences 表) | ⏳ 待实施 | --- @@ -996,8 +998,22 @@ class BootstrapBuilder: def _read_skill(self, skill_name: str) -> str: """从 Skill 文件读取全文""" path = os.path.join(self.SKILL_BASE_PATH, skill_name, "SKILL.md") - with open(path) as f: - return f.read() + try: + with open(path) as f: + return f.read() + except FileNotFoundError: + logger.error("Skill file not found: %s", path) + return "" + + # v2.1: 仲达评审 Q4.1 — role 未映射时 warn + def build(self, task: dict, role: str) -> str: + ... + skill_name = self.ROLE_SKILL_MAP.get(role) + if skill_name: + skill_content = self._read_skill(skill_name) + sections.append(skill_content) + elif role not in ("discussion",): # discussion 不走 build() + logger.warning("No skill mapping for role: %s", role) def _format_constraints(self, role: str) -> str: """格式化硬约束"""