Files
16gagent/output/planning-system-audit.md
2026-06-06 10:40:48 +08:00

398 lines
14 KiB
Markdown
Raw Permalink 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.
# 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 失败(应该规划)
- **任务:** 修复 `Note` type not found
- **规划:** 无
- **行为:** 加了 `type Note = Items` → 发现 `content` 属性不存在 → 重写 NoteCard
- **后果:** 两次修复,本可一次完成
- **如果有 Planner:** 应该先分析 NoteCard 依赖的所有类型
### Case 5: PR-13~19 连续开发(应该规划)
- **任务:** 7 个 PRActive 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 分
- **规则示例:**
```markdown
## Planning Protocol
当任务满足以下任一条件时,必须先输出 plan:
- 涉及 3 个以上文件修改
- 涉及 install + build + test 流程
- 涉及多个项目的协同修改
- 用户明确要求"规划"
Plan 格式:
1. 目标
2. 步骤列表(有序)
3. 每步的验证方式
4. 风险点
```
**能力 2: Complexity Classifier(复杂度判断)**
- **描述:** 在 AGENTS.md 中定义简单/复杂任务的边界
- **实现:** 写入 AGENTS.md
- **成本:** 0 代码,纯 prompt
- **收益:** +10 分
- **规则示例:**
```markdown
## Complexity Classification
简单任务(直接执行):
- 单文件读/写
- 单命令执行
- 信息查询
- 简单问答
复杂任务(必须规划):
- 多文件修改
- 多步骤流程
- 跨项目操作
- 新功能开发
- Bug 修复(需分析根因)
```
#### P1: 1 周内可做(收益高,成本中等)
**能力 3: Pre-flight Check(预检查)**
- **描述:** 规划阶段检查依赖关系、潜在冲突
- **实现:** 在 plan 中增加"风险分析"步骤
- **成本:** 0 代码,纯 prompt
- **收益:** +10 分
- **示例:**
```markdown
## 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 分
- **规则:**
```markdown
## 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 的部分能力。**
具体来说:
1. 写入 AGENTS.md: Planning Protocol+15
2. 写入 AGENTS.md: Complexity Classifier+10
3. 写入 AGENTS.md: Pre-flight Check+10
4. 写入 AGENTS.md: Failure Replanning+10
5. 使用 `write` 工具持久化 plan+5
6. 写入 AGENTS.md: Reflection Step+5
**总成本: 0 代码,纯 prompt 修改。**
**总收益: +55 分 → 从 35 到 90 分。**
---
## 最终结论
> **小龙当前是 Reactive Agent35/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 系统审计完成 — 小龙 🐉*