Agent 的"规划(Planning)"能力与规划失败
一句话概括
规划(Planning)是 Agent 把"一个大目标"拆解成"一串有序、可执行的小步骤"的能力——它决定了 Agent 是"有章法地干活"还是"东一榔头西一棒子"。规划一旦失败,Agent 最常见的下场是**“迷路”:要么拆错步骤、要么顺序颠倒、要么中途跑偏,最终看似很努力,却完不成目标**。
一、先理解"规划"到底是什么
规划 = 目标 → 步骤序列的转化过程。
类比:目标是"去北京",规划是"买票 → 打车去机场 → 过安检 → 登机 → 落地"。没有规划,Agent 只知道"要去北京",却不知道第一步该干什么。
规划要回答三个问题:
- 拆什么:把大目标拆成哪些子任务?
- 按什么顺序:哪些先做、哪些后做(依赖关系)?
- 怎么验证:每步做完怎么知道"做对了"?
二、规划的两种主流模式
| 模式 | 特点 | 适合场景 | 类比 |
|---|---|---|---|
| ReAct(边想边做) | 思考→行动→观察交替,每步根据结果调整 | 动态、不确定的任务 | 走一步看一步 |
| Plan-and-Execute(先规划再执行) | 先一次性生成完整计划,再逐步执行 | 结构清晰、步骤固定 | 先画图纸再施工 |
关键点:ReAct 是"动态规划",Plan-and-Execute 是"静态规划"。现实中常混合使用——先粗规划,执行中再细调。
三、规划失败会导致哪些典型问题?
这是核心。规划失败不是"一种"问题,而是一串连锁反应。按严重程度排列:
1. 步骤缺失(Missing Steps)——“漏了关键一步”
- 表现:拆解时漏掉某个必要步骤,导致任务做不完整。
- 后果:Agent 自信地"完成"了,但结果缺胳膊少腿。
- 例:写代码任务漏了"跑测试"这一步,Agent 以为写完了,实际代码有 bug。
2. 顺序错误(Wrong Order)——“步骤颠倒”
- 表现:步骤之间有依赖关系,但 Agent 排错了顺序。
- 后果:后面的步骤依赖前面的结果,顺序错了就全乱。
- 例:先"生成图表"再"读取数据"——数据都没有,图表从哪来?
3. 过度拆解 / 拆解不足(Over/Under-decomposition)
- 过度拆解:把简单任务拆成海量小步,浪费资源、容易迷路。
- 拆解不足:把复杂任务当成一步,一步做不完、上下文爆炸。
- 后果:要么低效,要么失败。
4. 目标漂移(Goal Drift)——“越做越偏”
- 表现:执行中 Agent 被"看起来相关"的细节带偏,偏离原始目标。
- 后果:做了很多事,但都不是用户真正要的。
- 例:目标是"优化登录性能",Agent 却花大量时间重构了整个 UI。
5. 死循环 / 原地打转(Looping)——“卡在一步出不来”
- 表现:某一步反复失败,Agent 不断重试同一动作,不换策略。
- 后果:消耗大量预算和时间,任务停滞。
- 例:测试一直失败,Agent 反复跑同一个测试,不分析失败原因。
6. 计划僵化(Rigid Plan)——“不懂变通”
- 表现:执行中发现计划有误,但 Agent 死守原计划,不调整。
- 后果:环境变了,计划过时了,Agent 还在按旧计划走。
- 例:计划假设"文件存在",实际文件被删了,Agent 不重新规划。
7. 上下文爆炸(Context Explosion)——“记不住中间结果”
- 表现:步骤太多,中间结果塞满上下文,超出窗口。
- 后果:Agent 丢失早期信息,后续决策"失忆"。
- 例:长任务做到一半,Agent 忘了最初的目标和约束。
四、规划失败的根因(为什么会失败)
| 根因 | 说明 |
|---|---|
| 目标本身模糊 | 目标不清,规划自然无从下手(承接上一轮"目标"话题) |
| 领域知识不足 | Agent 不了解任务领域,拆不出正确的步骤 |
| 上下文有限 | 步骤太多,规划器"看不到全局" |
| 缺乏反馈 | 规划后不根据执行结果调整,计划僵化 |
| 工具能力误判 | Agent 高估/低估了工具能做什么,规划脱离实际 |
核心洞察:规划失败往往不是"规划器笨",而是"输入信息不足"或"缺乏反馈调整"。
五、如何缓解规划失败?(工程手段)
1. 分层规划(Hierarchical Planning)
- 先做粗规划(大步骤),执行中再对每步细规划。
- 避免"一步规划到底"导致的僵化和上下文爆炸。
2. 反馈驱动调整(Feedback-driven Replanning)
- 每步执行后检查结果,发现偏差就重新规划。
- 这是 ReAct 模式的核心——规划不是一次性的,是动态的。
3. 设置检查点(Checkpoints)
- 在关键步骤后暂停验证,确认方向正确再继续。
- 防止"一路错到底"。
4. 步数/预算上限(Step & Budget Limit)
- 限制最大步数,防止死循环和无限消耗。
- 达到上限就停下来求助,而不是硬撑。
5. 目标锚定(Goal Anchoring)
- 定期把"当前进度"和"原始目标"对比,发现漂移就拉回来。
- 防止"越做越偏"。
6. 工具能力校准(Tool Capability Calibration)
- 让 Agent 清楚每个工具能做什么、不能做什么,规划才切合实际。
六、一个完整例子串起来
任务:让 Agent “分析销售数据并生成一份带图表的报告”。
规划失败的表现(对比):
| 失败类型 | 表现 |
|---|---|
| 步骤缺失 | 生成了报告,但忘了"生成图表" |
| 顺序错误 | 先"生成图表"再"读取数据",图表是空的 |
| 目标漂移 | 花大量时间美化图表样式,忽略了数据分析本身 |
| 死循环 | 图表一直生成失败,反复重试同一命令 |
| 计划僵化 | 数据文件被删了,仍按原计划读文件,不重新规划 |
好的规划:
1. 读取数据文件 → 2. 检查数据完整性 → 3. 统计分析 → 4. 生成图表 → 5. 汇总成报告 → 6. 验证报告完整 (每步完成后检查结果,发现偏差及时调整)关键点:好的规划让 Agent “有章法”,坏的规划让 Agent “看似努力却完不成”。
七、规划能力与"自主性"的关系
- 自主性越高,越依赖 Agent 自己的规划能力(没人帮它拆步骤)。
- 规划能力越强,Agent 越能"放手"自主执行。
- 规划能力弱,只能靠频繁问用户"下一步做什么"来补,自主性被迫降低。
一句话:规划能力是"高自主性"的引擎。规划不好,Agent 只能当"提线木偶"。
一句话总结
规划是 Agent 把目标拆解成"有序、可执行步骤"的能力,分为"边想边做(ReAct)"和"先规划再执行(Plan-and-Execute)"两种模式。规划失败会导致步骤缺失、顺序错误、过度/不足拆解、目标漂移、死循环、计划僵化、上下文爆炸等一系列连锁问题,根因多为目标模糊、领域知识不足、缺乏反馈调整。缓解之道在于分层规划、反馈驱动调整、设置检查点、步数上限、目标锚定——让 Agent 从"东一榔头西一棒子"变成"有章法地完成任务"。
如果你愿意,我可以继续深入:
- ReAct 与 Plan-and-Execute 的详细对比(各自的 prompt 设计、适用场景、优缺点);
- 分层规划(Hierarchical Planning)的实现细节(粗规划如何细化为子规划);
- 规划与"目标"“状态”"记忆"如何协同(四者如何构成 Agent 的完整决策闭环)。