从串行到树搜索:LATS 如何用蒙特卡洛树搜索重构 LLM Agent 决策框架
1. 引言
大型语言模型(LLM)驱动的智能体(Agent)近年来取得了显著进展,其中 ReAct 范式(Reasoning + Acting)因其简洁有效的"思考-行动-观察"循环成为主流。然而,ReAct 本质上是串行决策链:每一步都严格依赖前一步的输出,一旦早期出现错误(如选错参数、误解指令),整个轨迹便无法挽回,导致任务失败。
为解决这一问题,Princeton 团队提出了 LATS(Language Agent Tree Search),将经典的蒙特卡洛树搜索(MCTS)引入 LLM Agent 的决策过程。通过并行探索多条路径、动态回溯与反思,LATS 在 WebShop 和 ALFWorld 等复杂交互基准上将成功率提升了 20~30 个百分点,同时付出了 5~10 倍的 LLM 调用成本。
本文将从技术原理出发,深入剖析 LATS 的设计动机、核心算法、与经典 MCTS 的关键差异,并结合实验结果给出客观的适用性分析。
2. 背景:ReAct 的单链困境
ReAct 的工作流程如下:
Thought → Action → Observation → Thought → Action → ...
每一步都建立在前一步的观察之上,形成一个线性序列。这种设计的优势在于简单直观、token 开销小,但其不可逆性是致命弱点。例如在 WebShop 购物任务中:
- 搜索商品 → 正确
- 进入详情页 → 正确
- 选择尺码 → 误选 M(用户需要 L)
- 点击购买 → 错误延续
- 确认支付 → 最终失败
由于没有回溯机制,Agent 只能沿着错误路径走到黑。ReAct 的失败本质上是因为它放弃了搜索空间中的大部分可能性,仅凭贪婪解码选择一条路径。
3. LATS:将 MCTS 融入 LLM Agent
LATS 的核心洞察是:将 LLM 的每次决策视为搜索树中的一个节点,通过 MCTS 的探索-利用平衡机制,在多个候选动作中并行推进,并通过回溯与反思修正错误。
3.1 树的定义
- 节点 :由
(state, trajectory_history)组成,其中 state 是当前环境状态,trajectory_history 是从根节点到该节点的完整动作序列。 - 边:代表一个具体的动作(Action)。
- 节点价值:由 LLM 自身评估的分数(0~1),表示该节点通往成功的概率估计。
3.2 六步迭代流程
LATS 的每一次迭代严格遵循 MCTS 的经典阶段,并额外加入了反思步骤:
Step 1: Select(选择)
使用 UCB1 公式从根节点开始向下选择最值得探索的叶子节点:
UCB(s)=Q(s)N(s)+cln(N(parent))N(s)UCB(s) = \frac{Q(s)}{N(s)} + c \sqrt{\frac{\ln(N(parent))}{N(s)}}UCB(s)=N(s)Q(s)+cN(s)ln(N(parent))
其中 Q(s)Q(s)Q(s) 是节点 s 的累积回报,N(s)N(s)N(s) 是访问次数,ccc 是探索常数。该公式平衡了"高平均回报"和"低访问次数"两个因素。
Step 2: Expand(扩展)
对选中的叶子节点,调用 LLM 生成 N 个候选动作(通常 N=3~5)。这些动作可以是自然语言指令、API 调用等。
Step 3: Evaluate(评估)
LLM 对每个候选动作进行自我评估,输出一个 0~1 的价值分数。例如提示:"请评估执行该动作后达到目标的概率,给出 0 到 1 之间的分数。"
Step 4: Simulate(模拟)
从得分最高的候选动作开始,让 LLM 进行 Rollout(快速模拟至任务结束),得到一个最终的回报值(成功=1,失败=0,或中间奖励)。
Step 5: Backpropagate(回溯)
将本次模拟获得的回报沿着选择路径反向传播,更新路径上所有节点的 QQQ 值和访问次数 NNN。
Step 6: Reflect(反思)
如果某个分支在模拟中失败,LLM 会生成一段反思文本,解释失败原因(例如:"我选择了错误的尺码,应该优先检查用户偏好")。这段文本会被附加到后续扩展的上下文中,帮助避免重复犯错。
重复以上迭代,直到找到一条成功路径或达到最大预算。
4. LATS 与经典 MCTS 的三个关键差异
| 组件 | 经典 MCTS(如 AlphaGo) | LATS |
|---|---|---|
| 模拟策略 | 随机走子(uniform random rollouts) | LLM 推理(语义丰富的 rollout) |
| 价值函数 | 手工设计的神经网络或规则 | LLM 自我评估(zero-shot 打分) |
| 失败处理 | 仅回传低分 | 额外生成反思文本,显式注入失败经验 |
保留的核心:UCB 公式及其探索-利用权衡机制,这是 MCTS 的理论基石。
这种设计使得 LATS 能够利用 LLM 强大的语义理解能力,替代传统 MCTS 中需要大量领域知识的随机模拟和价值函数,从而适用于开放式的自然语言任务。
5. 实验分析与性能代价
5.1 实验结果
| 基准 | ReAct 成功率 | LATS 成功率 | 提升 |
|---|---|---|---|
| WebShop(在线购物) | ~50% | ~70% | +20 p.p. |
| ALFWorld(家务交互) | ~55% | ~85% | +30 p.p. |
注:p.p. 表示百分点。
5.2 成本分析
LATS 的 LLM 调用次数约为 ReAct 的 5~10 倍。原因在于每棵树节点都需要:
- 扩展阶段的 N 次 LLM 调用(生成候选动作)
- 评估阶段的 N 次 LLM 调用(打分)
- 模拟阶段的多步 rollout
- 反思阶段的 1 次 LLM 调用
假设 ReAct 一次任务平均调用 10 次 LLM,LATS 可能调用 50~100 次。对于 GPT-4 级别的模型,成本会显著上升。
5.3 延迟影响
由于需要多次串行迭代(每次迭代包含多步 LLM 推理),LATS 的端到端延迟远高于 ReAct。因此不适合对实时性要求高的场景(如在线客服、即时控制)。
6. 优点、缺点与适用场景
6.1 优点
- 高鲁棒性:通过树搜索有效避免单点错误导致的全局失败。
- 可解释性:搜索树记录了所有尝试过的路径及反思,便于调试和分析。
- 无需额外训练:完全基于预训练 LLM 的推理能力,无需微调。
6.2 缺点
- 计算成本高:LLM 调用次数剧增,经济和时间成本均较高。
- 依赖 LLM 的自我评估质量:如果 LLM 打分不准,可能导致搜索方向偏差。
- 长尾任务效率低:对于简单任务,树搜索带来的收益可能不足以抵消额外开销。
6.3 适用场景建议
| 场景 | 推荐方案 |
|---|---|
| 简单、确定性高的任务 | ReAct(低成本、低延迟) |
| 复杂、多步骤、容错率低的任务 | LATS(用算力换稳定性) |
| 离线批量处理(如自动化测试、数据标注) | LATS 较优 |
| 实时交互(如聊天机器人) | ReAct 或轻量级变体 |
7. 总结与展望
LATS 证明了将经典搜索算法与 LLM 语义能力结合的强大潜力。其本质是用搜索空间的广度换取决策的稳健性,通过 MCTS 的探索机制弥补 LLM 单步决策的不确定性。
未来方向可能包括:
- 混合策略:根据任务难度动态切换 ReAct / LATS。
- 剪枝优化:引入置信度阈值提前终止低价值分支。
- 缓存复用:对相似状态共享子树,减少重复计算。
对于从事 LLM Agent 开发的工程师而言,LATS 提供了一个重要的设计思路:不要只让 LLM "想",更要让它"搜"。
参考文献:
- Zhou et al., "Language Agent Tree Search Unifies Reasoning, Acting, and Planning in Language Models", 2023.
- Yao et al., "ReAct: Synergizing Reasoning and Acting in Language Models", 2022.
- Browne et al., "A Survey of Monte Carlo Tree Search Methods", 2012.