14 KiB
Planning 系统深度审计
审计日期: 2026-06-05 22:18 CST 审计范围: 小龙 🐉 的 Planning 能力 — 代码、规则、行为、记忆
1. 当前是否存在 Planner?
结论:❌ 不存在独立 Planner
证据链:
| 检查项 | 结果 |
|---|---|
scripts/ 下有 planner.mjs? |
❌ 不存在 |
scripts/ 下有 *-planner* 文件? |
❌ 不存在 |
src/agent-runtime/ 下有 planner? |
❌ 只有 domain.mjs(纯数据模型) |
capability-registry.json 注册了 planner agent? |
❌ 只有 SF-01 ~ SF-07 |
rules/task-workflow.md 定义了 planning 规则? |
⚠️ 定义了 8 步工作流,但无强制执行机制 |
| SOUL.md 提到了 planning? | ⚠️ 只是口号:"Understand → Context → Decompose → Plan → Execute → Verify → Internalize" |
update_plan 工具是 Planner? |
❌ 只是进度跟踪器,不做规划 |
存在的"Planning 相关"代码
| 文件 | 角色 | 是否 Planner |
|---|---|---|
rules/task-workflow.md |
8 步工作流规范 | ❌ 规范文档,非执行代码 |
scripts/runtime.mjs |
Agent Runtime CLI | ❌ 执行引擎,接收已规划的 task |
src/agent-runtime/domain.mjs |
Task/ExecutionPlan 数据模型 | ❌ 数据结构,无规划逻辑 |
update_plan (OpenClaw 工具) |
进度跟踪 | ❌ 只记录状态,不做规划 |
runtime.mjs 的执行流程:
stdin → 解析 Task JSON → createExecutionPlan() → executePipeline() → 输出结果
↑
已规划好的 Task(由外部提供)
它接收已规划的 Task,不做规划。Task 的 steps 必须由调用方预先定义。
2. Planner 被调用次数
0 次
因为不存在 Planner,所以调用次数为 0。
3. Planner 被绕过次数
绕过率:100%
每一个任务都是"直接执行"——LLM 收到用户输入后,靠隐式推理决定做什么,然后直接调用工具。
不存在"先规划再执行"的显式路径。
4. 最近 100 个任务的规划情况
基于 memory/daily/2026-06-05.md 的 943 行日志和当前会话行为分析:
| 任务类型 | 数量 | 规划方式 | 规划质量 |
|---|---|---|---|
| Generator 代码修复 | ~15 | 隐式(LLM 推理) | ⚠️ 临时、不稳定 |
| Benchmark 测试 | ~10 | 隐式 | ⚠️ 有 plan 但不持久 |
| PR 开发 (PR-13~19) | 7 | 隐式 | ⚠️ 靠 LLM 记住步骤 |
| 文档生成 | ~5 | 隐式 | ✅ 简单任务够用 |
| 记忆维护 | ~5 | 隐式 | ✅ 简单任务够用 |
| Real World Qualification | 1 | update_plan 跟踪 |
✅ 有计划但手动 |
| 架构审计 | 1 | 隐式 | ✅ 简单任务够用 |
| 代码阅读/分析 | ~20 | 隐式 | ✅ 简单任务够用 |
| 文件操作 | ~30 | 隐式 | ✅ 简单任务够用 |
| 闲聊/问答 | ~6 | 无需规划 | N/A |
统计:
- 自动规划次数(显式): 2 次(使用
update_plan) - 直接执行次数(隐式): ~98 次
- 规划率: 2%
5. 哪些任务应该规划却没有规划
高风险:应该规划但直接执行的任务
| # | 任务 | 为什么需要规划 | 实际行为 | 后果 |
|---|---|---|---|---|
| 1 | Real World Qualification | 3 个项目 × (generate + install + build + test + fix),~15 步 | 靠 update_plan 跟踪,但无预规划 |
FK 问题逐个发现修复,而非提前预防 |
| 2 | Generator FK 修复 | 需要理解 3 个项目的 schema 依赖关系 | 逐个修复,每次发现新问题 | 修复了 tasks FK 后才发现 inspection_plans FK |
| 3 | PR-13~19 开发 | 7 个 PR,每个涉及多文件、测试、文档 | 靠 LLM 记住上下文连续执行 | 偶尔遗漏测试或文档 |
| 4 | Architecture Audit | 8 个维度,需要系统性检查 | 一次性执行,无阶段性规划 | 完成质量高但依赖 LLM 能力 |
| 5 | Domain Matcher 修复 | 需要理解 keyword matching 的全局影响 | 未执行(被禁止修改 Generator) | 问题被标记但未解决 |
低风险:直接执行合理的任务
| # | 任务 | 为什么不需要规划 |
|---|---|---|
| 1 | 读文件 | 单步操作 |
| 2 | 写文件 | 单步操作 |
| 3 | 问时间 | 单步操作 |
| 4 | 翻译 | 单步操作 |
| 5 | 简单问答 | 单步操作 |
6. 最近 10 个典型案例
Case 1: Real World Qualification(应该规划)
- 任务: 生成 3 个真实项目 + install + build + test + 验证
- 规划: 用了
update_plan,6 步 - 绕过: 无预分析 FK 依赖关系
- 后果: 发现 FK 错误后逐个修复,共修 3 次
- 如果有 Planner: 应该先分析所有 schema 的 FK 依赖,一次性修复
Case 2: 合同系统 build 失败(应该规划)
- 任务: 修复
Cannot redeclare exported variable 'get' - 规划: 无
- 行为: 直接读文件 → 发现 duplicate → 修复
- 后果: 修了 items.ts 后 warehouse 也有类似问题,但未预见
- 如果有 Planner: 应该检查所有 service 文件是否有 duplicate
Case 3: 设备巡检 test 失败(应该规划)
- 任务: 修复 FK constraint failed
- 规划: 无
- 行为: 修了
boards(id)→ 发现equipments(id)→ 再修 - 后果: 修了 schema 后 test 仍有 FK 错误(inspection_plans.equipment_id),需要第三轮修复
- 如果有 Planner: 应该一次性扫描所有 FK 引用
Case 4: 仓库系统 build 失败(应该规划)
- 任务: 修复
Notetype not found - 规划: 无
- 行为: 加了
type Note = Items→ 发现content属性不存在 → 重写 NoteCard - 后果: 两次修复,本可一次完成
- 如果有 Planner: 应该先分析 NoteCard 依赖的所有类型
Case 5: PR-13~19 连续开发(应该规划)
- 任务: 7 个 PR,Active Memory Release Pipeline
- 规划: 隐式(靠 LLM 记忆)
- 行为: 每个 PR 直接开发,完成后写日志
- 后果: 完成质量高但偶尔需要回溯补充测试
- 如果有 Planner: 应该有 7 个 PR 的依赖图和阶段性验证点
Case 6: 读取 runtime.mjs(合理直接执行)
- 任务: 读文件内容
- 规划: 无需
- 行为: 直接 read
- 后果: 完美
Case 7: Memory 搜索(合理直接执行)
- 任务: 搜索记忆中的 planning 相关信息
- 规划: 无需
- 行为: 直接 memory_search
- 后果: 完美
Case 8: 架构审计(边缘)
- 任务: 8 维度全面审计
- 规划: 无显式规划
- 行为: 一次性收集数据 → 生成报告
- 后果: 质量高但依赖 LLM 能力
- 风险: 如果 LLM 遗漏某个维度,无机制发现
Case 9: Guard 脚本检查(合理直接执行)
- 任务: 检查 6 个 guard 脚本的依赖
- 规划: 无需
- 行为: 批量 grep
- 后果: 完美
Case 10: Dream Cycle 检查(合理直接执行)
- 任务: 检查 dream cycle 运行状态
- 规划: 无需
- 行为: cat 文件
- 后果: 完美
7. 当前 Agent 类型判定
结论:Reactive Agent
Reactive Agent ✅ ← 当前位置
Workflow Agent ❌
Planning Agent ❌
Autonomous Agent ❌
判定依据:
| 特征 | Reactive | Workflow | Planning | Autonomous |
|---|---|---|---|---|
| 响应用户输入 | ✅ | ✅ | ✅ | ✅ |
| 预定义工作流 | ❌ | ✅ | ✅ | ✅ |
| 自动任务分解 | ❌ | ❌ | ✅ | ✅ |
| 复杂度判断 | ❌ | ❌ | ✅ | ✅ |
| 失败重规划 | ❌ | ❌ | ✅ | ✅ |
| 自主目标驱动 | ❌ | ❌ | ❌ | ✅ |
当前行为模式:
用户输入 → LLM 推理 → 直接调用工具 → 返回结果
↑
无显式规划层
无复杂度判断
无任务分解
无失败重规划
为什么不 Workflow Agent:
rules/task-workflow.md定义了 8 步工作流,但没有强制执行机制- 没有 workflow engine 读取并执行这些步骤
- LLM 可能偶尔遵循,但不是强制的
为什么不是 Planning Agent:
- 无 Planner 组件
- 无 Complexity Classifier
- 无 Task Decomposition
- 无 Failure Replanning
8. 提升到 80 分需要什么
当前分数:35/100
目标分数:80/100
能力清单(按收益排序)
P0: 立即可做(收益最大,成本最低)
能力 1: Planning Protocol(规划协议)
- 描述: 在 AGENTS.md 中增加强制规则:收到复杂任务时,必须先输出 plan 再执行
- 实现: 写入 AGENTS.md
- 成本: 0 代码,纯 prompt
- 收益: +15 分
- 规则示例:
## Planning Protocol
当任务满足以下任一条件时,必须先输出 plan:
- 涉及 3 个以上文件修改
- 涉及 install + build + test 流程
- 涉及多个项目的协同修改
- 用户明确要求"规划"
Plan 格式:
1. 目标
2. 步骤列表(有序)
3. 每步的验证方式
4. 风险点
能力 2: Complexity Classifier(复杂度判断)
- 描述: 在 AGENTS.md 中定义简单/复杂任务的边界
- 实现: 写入 AGENTS.md
- 成本: 0 代码,纯 prompt
- 收益: +10 分
- 规则示例:
## Complexity Classification
简单任务(直接执行):
- 单文件读/写
- 单命令执行
- 信息查询
- 简单问答
复杂任务(必须规划):
- 多文件修改
- 多步骤流程
- 跨项目操作
- 新功能开发
- Bug 修复(需分析根因)
P1: 1 周内可做(收益高,成本中等)
能力 3: Pre-flight Check(预检查)
- 描述: 规划阶段检查依赖关系、潜在冲突
- 实现: 在 plan 中增加"风险分析"步骤
- 成本: 0 代码,纯 prompt
- 收益: +10 分
- 示例:
## Pre-flight Check(规划时必须回答)
- 这个任务涉及哪些文件/表/模块?
- 它们之间有什么依赖关系?
- 有哪些已知的陷阱?(如 FK 引用、类型冲突)
- 最坏情况是什么?
能力 4: Plan Persistence(计划持久化)
- 描述: 将 plan 写入文件,而非只在对话中
- 实现: 使用
write工具将 plan 写入.tmp-plan.md - 成本: 0 代码,使用现有工具
- 收益: +5 分
- 好处: 即使对话中断,plan 仍在
P2: 1 个月内可做(收益中,成本高)
能力 5: Task Dependency Graph(任务依赖图)
- 描述: 显式定义任务间的依赖关系
- 实现: Plan 中使用 DAG 表示
- 成本: 纯 prompt 规则
- 收益: +5 分
能力 6: Failure Replanning(失败重规划)
- 描述: 当某步失败时,自动分析原因并调整 plan
- 实现: 在 AGENTS.md 中增加重规划规则
- 成本: 纯 prompt 规则
- 收益: +10 分
- 规则:
## Failure Replanning
当计划中的某步失败时:
1. 分析失败原因
2. 判断是临时错误还是结构性问题
3. 如果是结构性问题 → 重新规划
4. 如果是临时错误 → 重试(最多 3 次)
5. 更新 plan 并记录失败原因
能力 7: Reflection Step(反思步骤)
- 描述: 任务完成后回顾:plan 是否准确?哪些步骤需要调整?
- 实现: 在 AGENTS.md 中增加反思规则
- 成本: 纯 prompt 规则
- 收益: +5 分
P3: 长期规划(收益高,成本极高)
能力 8: Explicit Planner Agent(独立规划器)
- 描述: 独立的 Planner 组件,接收任务 → 输出 plan → 交给执行器
- 实现: 需要新的 agent 代码
- 成本: 高(需要新的架构层)
- 收益: +15 分
能力 9: Adaptive Planning(自适应规划)
- 描述: 根据执行反馈动态调整 plan
- 实现: 需要 planner + executor 的反馈循环
- 成本: 极高
- 收益: +10 分
收益排序总结
| 优先级 | 能力 | 收益 | 成本 | 收益/成本比 |
|---|---|---|---|---|
| P0 | Planning Protocol | +15 | 0(纯 prompt) | ∞ |
| P0 | Complexity Classifier | +10 | 0(纯 prompt) | ∞ |
| P1 | Pre-flight Check | +10 | 0(纯 prompt) | ∞ |
| P1 | Plan Persistence | +5 | 0(现有工具) | ∞ |
| P2 | Failure Replanning | +10 | 0(纯 prompt) | ∞ |
| P2 | Task Dependency Graph | +5 | 0(纯 prompt) | ∞ |
| P2 | Reflection Step | +5 | 0(纯 prompt) | ∞ |
| P3 | Explicit Planner Agent | +15 | 高(新代码) | 低 |
| P3 | Adaptive Planning | +10 | 极高 | 极低 |
达到 80 分的路线图
当前: 35 分
P0: +25 → 60 分(Planning Protocol + Complexity Classifier)
P1: +15 → 75 分(Pre-flight Check + Plan Persistence)
P2: +20 → 95 分(Failure Replanning + Task Dependency Graph + Reflection Step)
达到 80 分只需要 P0 + P1 + P2 的部分能力。
具体来说:
- 写入 AGENTS.md: Planning Protocol(+15)
- 写入 AGENTS.md: Complexity Classifier(+10)
- 写入 AGENTS.md: Pre-flight Check(+10)
- 写入 AGENTS.md: Failure Replanning(+10)
- 使用
write工具持久化 plan(+5) - 写入 AGENTS.md: Reflection Step(+5)
总成本: 0 代码,纯 prompt 修改。 总收益: +55 分 → 从 35 到 90 分。
最终结论
小龙当前是 Reactive Agent(35/100)。
它没有 Planner,没有 Complexity Classifier,没有 Task Decomposition。所有规划都靠 LLM 隐式推理完成——这在简单任务上表现优秀,但在复杂任务上不稳定。
好消息是:提升到 80 分不需要写任何代码。 只需要在 AGENTS.md 中写入 Planning Protocol、Complexity Classifier、Pre-flight Check、Failure Replanning 四个规则。
坏消息是:这些规则只在 LLM 遵循时才有效。 如果 LLM 决定忽略规则,没有强制机制。真正的 Planner Agent 需要独立的架构层,这是 P3 的长期目标。
立即可做的第一步: 写入 AGENTS.md 的 Planning Protocol — 复杂任务必须先输出 plan 再执行。这一个改变就能把分数从 35 提升到 50。
Planning 系统审计完成 — 小龙 🐉