课题六:复杂任务规划与动态分解

Layer 1 | 基础设施层 | P1 调研日期:2026-05-30

问题定义

当前 GenericAgent 的 agent_loop.py(118行)基于纯 ReAct 循环,每轮只从 LLM 获取下一步 tool call,没有任何预先规划能力。

当前模式(ReAct):
  观察当前状态 → LLM决定下一步 → 执行 → 观察新状态 → LLM决定下一步 → ...

从”问答工具”到”自主执行者”,规划是关键的跨越。没有规划,Agent 只能做简单的工具串联;有规划,才能处理多步骤、有依赖、有分支的复杂任务。

项目已有规划能力

memory/plan_sop.md(262行)已实现元层次的规划流程——探索→规划→执行→验证,包含子任务委托([D])、并行([P])、条件分支([?])、对抗性验证等。但这是Agent编排层的SOP,不是LLM推理层的规划能力。两者可串联:plan_sop.md 管理”如何规划”的流程,LLM 层规划决定”规划什么”。


三大规划范式对比

Plan-then-Execute(一次性规划)

维度描述
核心执行前完整规划,然后按计划执行
代表Plan-and-Solve, ReWOO, LLM+P
优点全局可见性、易于优化执行顺序
缺点无法应对执行中意外
适用目标明确、环境稳定的任务

在项目中的可行性: plan_sop.md 的规划态本就是 Plan-then-Execute。增强方向是让 LLM 自动生成 plan.md,并自动跟踪执行进度。

RePlan(渐进式重规划)

维度描述
核心分段规划→执行→观察→重规划下一段
代表ReAct→RePlan, SayCan, SwiftSage
优点灵活适应变化
缺点可能局部最优
适用环境动态的任务

在项目中的可行性: agent_loop.pytool_after_callback / turn_end_callback 钩子天然支持注入重规划判断。触发条件包括:执行失败、中间结果不符预期、用户打断。

Hierarchical Planning(层次规划)

维度描述
核心高层策略→中层子任务→底层动作,每层独立重规划
代表HiAgent, HTN, Voyager
优点复杂任务可管理
缺点层级接口设计困难
适用超长任务链、多 Agent

在项目中的对应关系:

抽象层(LLM推理层)           ← 空缺
  └─ 策略规划:分解用户目标
执行层(plan_sop.md)         ← 已有
  └─ 任务编排 + 委托 + 验证
动作层(9个原子工具)          ← 已有
  └─ 具体工具调用

项目现状深度评估

已有能力

  • ✅ plan_sop.md — 完整执行流程(探索→规划→执行→验证)
  • ✅ [D] 委托标注 — 子任务派给 subagent
  • ✅ [P] 并行标注 / [?] 条件分支
  • ✅ VERIFY subagent — 独立对抗性验证
  • ✅ 失败重试 — 最多3次指数退避
  • ✅ agent_loop.py 的钩子系统

空缺

  • ❌ 自动生成 plan — 当前需手动写 plan.md
  • ❌ 自动推断依赖 — 需手动标注 [P]/[?]/依赖
  • ❌ 执行中重规划 — 失败时只能重试不能调整后续计划
  • ❌ 规划粒度自适应 — 简单/复杂任务用同一套流程
  • ❌ 执行前验证 — 写 plan.md 后无自动检查
  • ❌ 备选路径 — 无预定义 fallback

推荐演进路线

Phase 1 — 自动规划生成(Plan-then-Execute)

  • agent_loop.py 增加 PLAN 阶段 prompt,LLM 输出结构化 plan
  • 自动转为 plan_sop.md 格式 → plan.md
  • 复用现有执行流程
  • 工作量:~200行代码

Phase 2 — 执行中重规划(RePlan)

  • tool_after_callback 增加失败检测 → 触发 replan
  • turn_end_callback 增加重规划判断
  • 工作量:~150行代码

Phase 3 — 层次规划 + 粒度自适应

  • LLM 输出分层:子目标分解 → 独立执行
  • 粒度自适应:根据任务特征选择规划深度
  • 备选路径预定义
  • 工作量:~300行代码

扩展方向

规划漂移(Planning Drift)

问题: Agent 执行长任务时,逐步偏离原始目标。不是突然失败,而是每一步微小偏移累积成方向性错误。

原始目标:"分析用户反馈数据,输出 Top 5 改进方向"
  Step 1: ✅ 读取数据 → 正确
  Step 2: ✅ 清洗、分类 → 正确
  Step 3: ⚠️ 发现某个分类特别多 → 开始深入这个分类
  Step 4: ❌ 深入分析单个分类的细节 → 偏离了"Top 5 改进方向"
  Step 5: ❌ 写了这个分类的完整分析报告 → 完全偏离原始目标

关键特征:

  • 每步单独看都是合理的(模型没有”犯错”)
  • 偏离是累积的,没有单点回退触发点
  • 任务越长、中间结果越丰富,漂移概率越高

可能的应对策略:

  • 规划锚点:每步检查当前进度是否与原始规划一致,偏离超过阈值则回退
  • milestone 验证:关键节点要求 LLM 判断”当前仍在原规划路径上吗”
  • 反向对齐:每 N 步让 LLM 从当前状态反向推导”这和我最初要做的还是一件事吗”
  • PlanB marker:标记规划中的关键决策点,一旦路径偏离则触发 replan 而非继续纠偏

错误传播

问题: 规划中某一步的轻微错误不是被纠正,而是被后续步骤放大。不同于漂移(方向偏移),传播是错误结果的级联。

正确路径: A → B → C → D
错误路径: A → B'(B 执行轻微错误)→ C'(C 基于 B' 继续错)→ D'(最终结果完全错误)

关键特征:

  • 早期错误不可见(每步输出格式正确、内容合理)
  • 后续步骤无法检测上游错误(模型假设上游是正确的)
  • 验证点在终点才知道错了——代价最大

可能的应对策略:

  • 检查点验证:每步输出做快速合理性检查(不依赖 LLM,用规则/工具验证)
  • 前向验证:某步输出异常时,不仅检查当前步,还反向检查上一步的输入前提
  • 隔离执行:关键路径的子任务在独立上下文中执行,错误不污染主上下文

规划漂移 vs 错误传播

两者经常同时发生:漂移导致方向偏了,错误传播让偏了的方向上越走越远。应对的核心机制相同——增加验证检查点,但阶段不同:

阶段漂移传播
发生原因注意力偏移错误级联
检测时机方向性 check(每 N 步)正确性 check(每步)
恢复方式replan 回正确方向回退到错误前的状态重试
代价通常可恢复越晚代价越大

经典理论映射

人月神话的串行依赖不可压缩性解释了规划的根本困境:有些子任务必须顺序完成,你无法通过”增加 Agent 并行度”来加速。这与 Hofstadter 定律共同作用——“它总是比你预期的时间长,就算你考虑了 Hofstadter 定律”——意味着 Agent 的时间预估在本质上存在系统性偏差。规划系统需要具备时间缓冲和动态调整能力,而非追求精确预估。

钱学森工程控制论(1954)对 Plan-then-Execute 与 RePlan 的区分提供了理论根基:前者是开环控制(前馈路径,无反馈修正),后者是闭环控制(反馈路径,基于观测修正)。开环控制结构简单但无抗干扰能力,闭环控制增加复杂度但能收敛到目标。工程控制论的核心洞见在于——反馈是克服不确定性的唯一通用方法。Agent 规划中遇到的执行偏差、环境变化、上下文漂移,本质都是不确定性,只能通过建立有效的反馈回路来解决,不能靠更精确的前馈规划。使用反馈不是对规划失败的补救,而是解决”有限信息下行动”这个根本问题的唯一工程途径。


关联课题

参考资料

  1. Plan-and-Solve Prompting (Wang et al., 2023)
  2. Tree-of-Thought (Yao et al., 2023)
  3. LLM+P: Empowering LLMs with Optimal Planning (2023)
  4. ReWOO: Decoupling Reasoning from Observations (2023)
  5. Voyager: LLM-powered Agents in Minecraft (2023)
  6. SayCan: Do As I Can, Not As I Say (2023)
  7. SwiftSage: Fast-Thinking + Slow-Thinking (2023)
  8. HiAgent 层次分解框架
  9. LangGraph — 图式任务编排,条件边+检查点
  10. OpenHands — 规划-执行闭环 + 对抗性验证(72K★)
  11. HTN (Hierarchical Task Network) — 机器人领域层次规划
  12. plan_sop.md — GenericAgent 项目现有 SOP(memory/plan_sop.md)
  13. agent_loop.py — GenericAgent 现有 ReAct 循环(agent_loop.py)