规划与推理 (Planning & Reasoning)
如果说 LLM 是大脑,Planning 就是它的"前额叶皮层"。在面对非平凡(Non-trivial)任务时,Agent 必须具备先思考,后行动的能力。
[PROMPT_LAB_BANNER]
1. 为什么需要 Planning?
当用户指令是“帮我写一个贪吃蛇游戏”时,直接生成代码通常会得到一个半成品。 Agent 需要:
- 设计游戏规则和 UI 布局。
- 规划文件结构 (html, css, js)。
- 逐步编写并测试每个模块。
Planning 解决了复杂任务的不可预测性问题。
2. 任务分解 (Decomposition)
将一个模糊的高层目标 (Goal) 拆解为一系列可执行的原子步骤 (Steps)。
方法 A:LLM 分解
直接让 LLM 生成计划列表。
"请将‘写一个贪吃蛇游戏’拆解为 5 个开发步骤。"
方法 B:分层规划 (Hierarchical Planning)
- Top-Level Agent: 负责生成高层计划(如:1.UI设计, 2.逻辑实现)。
- Sub-Agents: 认领子任务,并将其进一步拆解(如:1.1 画布布景, 1.2 蛇的绘制)。
3. 推理模式 (Reasoning Patterns)
Chain of Thought (CoT)
最基础的推理。让模型在给出最终答案前,先输出中间推理步骤。
Input: ... Model: Step 1..., Step 2..., Therefore the answer is...
Tree of Thoughts (ToT)
对于需要探索和回溯的任务(如写创意文案、解数学题),Agent 维护一棵思维树。
- 生成:针对当前状态,生成 3 个可能的下一步。
- 评估:给这 3 个下一步打分。
- 选择:选择最高分路径继续,若走不通则回溯。
graph TD
subgraph "Chain of Thought (线性)"
A[Step 1] --> B[Step 2] --> C[Step 3]
end
subgraph "Tree of Thoughts (树状)"
Root[初始状态] --> P1[路径 A]
Root --> P2[路径 B]
Root --> P3[路径 C]
P1 --> P1_1[A的下一步]
P2 --> P2_1[B的下一步 (评估分低,剪枝)]
P3 --> P3_1[C的下一步]
end
4. 自我反思 (Self-Reflection / Reflexion)
这是 Agent 具备“成长性”的关键。Agent 不仅仅执行,还会检查自己的执行结果。
Reflexion 工作流:
- Actor: 尝试执行任务(如写代码)。
- Evaluator: 运行测试用例,发现失败。
- Self-Reflection: 分析失败原因(“我忘记处理边界情况了”),生成一段自然语言的“教训”。
- Actor (Retry): 带着“教训”重新尝试执行。
实战价值:Reflexion 能够显著提升 Coding Agent 的一次通过率(Pass@1)。
5. 实战中的 Planning 技巧
- Plan-and-Solve: 强制 Agent 在开头输出一个
<plan>标签,列出待办事项,每做完一步打个勾。 - 外部计划器:对于极其复杂的流程(如订机票),不要完全依赖 LLM 幻觉,使用传统的算法(如 Dijkstra 算法)辅助规划路线,再由 LLM 解释。
- 动态调整:计划不是死的。Agent 应当具备在执行过程中根据新发现(Observation)修改后续计划的能力(Replanning)。
小结
- 简单任务:直接 CoT 即可。
- 复杂任务:必须显式地进行 Task Decomposition。
- 高精度任务:引入 Self-Reflection 循环。
- 创造性任务:尝试 Tree of Thoughts 搜索最优解。