人工智能实践(语言智能)
第7讲:Agent

7.3 规划与推理

从 CoT 到 Tree Search:任务分解、Plan-and-Solve、ReWOO、Tree of Thoughts、LATS、Reflexion;以及规划失败的常见根因

为什么 Agent 需要"规划"

LLM 的默认模式是"自回归逐 token 生成"——它没有显式的搜索与回溯。一旦任务需要多步动作,或者中途某步失败,单纯的 prompt response 就会崩盘。规划(Planning) 的本质是给 LLM 的推理加上结构:要么拆分任务,要么探索多条路径,要么失败后总结教训。

本节把规划方法分为三类:

  1. 任务分解(Task Decomposition)——CoT、Plan-and-Solve、Least-to-Most、ReWOO
  2. 搜索式规划(Search-based)——Tree of Thoughts、Graph of Thoughts、LATS
  3. 反思式改进(Reflection-based)——Reflexion、Self-Refine

任务分解

Chain-of-Thought(CoT)

最朴素的分解:让 LLM 先"想一想再回答"。Wei 等人(NeurIPS 2022)发现,对于足够大的模型(PaLM-540B 以上),只要在 few-shot 示例里展示"中间推理步骤",模型就会在测试时自发生成类似的推理链。一句神奇的 zero-shot 咒语 "Let's think step by step"(Kojima et al., NeurIPS 2022)也能触发同样效果。

CoT 的局限:线性单路径——一旦中间某步走错,整条链一错到底。

Plan-and-Solve

Wang 等人(ACL 2023)提出 Plan-and-Solve Prompting,把推理拆成两步:

Plan

让 LLM 先输出一个"解题计划"(不含具体计算)

Solve

让 LLM 按照计划逐步执行,得到最终答案

这种"先总后分"比裸 CoT 在 zero-shot 数学推理上有显著提升。核心启发:显式的 plan 比隐式的 thought chain 更可控

Least-to-Most

Zhou 等人(ICLR 2023)的 Least-to-Most Prompting:让 LLM 把问题分解为从易到难的子问题序列,然后前一个子问题的答案作为下一个的上下文。这一方法在"长度泛化"问题上特别有效(训练时见过 3 步,测试时能做 7 步)。

ReWOO:解耦规划与执行

Xu 等人(2023)提出 ReWOO(Reasoning WithOut Observation),对 ReAct 做了一个关键改进:先一次性生成完整 plan(含所有工具调用),再并行执行工具,最后让 solver 综合答案

相比 ReAct 的 Thought → Action → Observation 循环每步都过一次 LLM,ReWOO 只在开头和结尾用 LLM,token 消耗减少约 5 倍。代价是:一旦 plan 早期错了,后续纠错困难。

选型建议:任务路径可预测(如数据分析管道)→ ReWOO;任务需要根据中间结果调整(如网页浏览、调试代码)→ ReAct。


搜索式规划

Tree of Thoughts(ToT)

Yao 等人(NeurIPS 2023)把 CoT 从"线性链"扩展为"树搜索"。每个节点是一个"thought"(中间推理状态),每个分支是一个可能的下一步。ToT 用 BFS / DFS + 自评估来探索:

在 24 点游戏上,标准 CoT 成功率仅 4%,ToT 达到 74%。代价是:需要多次 LLM 调用(一次采样多个分支 + 一次评估每个分支)。

Graph of Thoughts(GoT)

Besta 等人(AAAI 2024)进一步把树扩展为任意图——允许节点合并、路径聚合。在排序任务上比 ToT 质量高 62%,同时成本降低 31%。思想是把中间结果当作可重用的 "thought 节点"。

Zhou 等人(2023)把 蒙特卡洛树搜索(MCTS) 搬进 LLM Agent。每个节点是一个 agent 状态(含历史 action + observation),节点扩展通过 LLM 采样多个候选动作,用 value 函数(也是 LLM 打分)做 UCB 选择,遇到失败 trajectory 触发 reflection。这是目前公认最"强"的 agent 规划方法之一。代价显而易见:慢且贵


反思式改进

Reflexion:语言强化学习

Shinn 等人(NeurIPS 2023)的 Reflexion 提出一个绝妙想法:当 agent 失败时,让它用自然语言总结"教训"并存进 episodic memory;下次重试时把教训加入 prompt。这相当于把梯度下降替换为语言反馈。

在 HumanEval 编码任务上,Reflexion 让 GPT-4 的 pass@1 从 80% 提升到 91%——不更新任何权重。

Self-Refine

Madaan 等人(NeurIPS 2023)的 Self-Refine 更简单:同一个 LLM 做 Generate → Feedback → Refine 的循环,直到 feedback 说"足够好"。在七项任务(数学、代码、情感反转、缩写等)上平均提升约 20%。


规划失败的常见根因

在实战中,agent 规划崩盘往往不是因为 LLM"不够聪明",而是踩了下面几个经典的坑:

失败模式症状对策
Plan drift(计划漂移)中途忘了原目标,开始跑偏每步在 prompt 里重申原目标;用 LangGraph 显式管理 state
Tool hallucination调用不存在的 tool 或编造参数在 system prompt 列明 tool schema;启用结构化输出
Infinite loop反复调用同一个 tool设置 max_steps;检测重复 action 并跳出
过早放弃遇到一次失败就直接 Finish加 retry 策略;Reflexion 式失败总结
过度规划简单任务也生成 20 步 plan在 prompt 里给"step budget"
Observation 爆炸工具返回大段文本,把 context 撑爆对 observation 截断/摘要;用 memory 抽取关键信息
Context 截断超过 LLM window,早期信息被吃掉MemGPT 式分层记忆;每步做 summary

τ-bench 的警示:Yao 等人(ICLR 2025)发现 GPT-4o 在客服对话任务上,对同一任务重复 8 次,一致性仅约 25%。这个"pass^k"指标揭示了一个根本问题——agent 的可靠性远低于它的能力上限。一次成功的 demo 不代表它能稳定生产部署。


如何选择规划方法

一张决策表:

场景推荐方法
任务路径完全确定(如 "fetch → parse → save")直接写代码,不要用 agent
任务路径可预测、结果需要汇总ReWOO
任务需要根据中间观察动态调整ReAct
任务有明显搜索/组合空间(数学、推理游戏)Tree of Thoughts / LATS
任务支持多次试错、有 ground truth 评价Reflexion
单步生成质量差、但可反复打磨Self-Refine

本节小结

  • 规划 = 给 LLM 的推理加上结构:任务分解 / 搜索 / 反思
  • ReAct vs ReWOO:前者循环每步过 LLM,后者只在头尾用 LLM;按任务可预测性选
  • ToT / GoT / LATS:以多倍 token 成本换取搜索空间的深度
  • Reflexion / Self-Refine:不更新权重、只靠语言反馈改进
  • 规划失败的根因往往是工程问题(plan drift、infinite loop、context 截断),而不是 LLM 能力问题