LATS

前面几种范式都只探索一条轨迹——LATS 把左到右的一次性生成换成可回溯、价值引导的树搜索,并把 ReAct、Reflexion 收成其中的两个部件。

模型侧背景,取自 LATS 原论文(Zhou et al., 2023,arXiv:2310.04406,“Language Agent Tree Search Unifies Reasoning, Acting and Planning in Language Models”,ICML 2024)。它是 foundations 这一组范式的合流点——把 CoTReActReflexion 装进一个 MCTS 框架,因此本章可当作前几章的综合, 与 harness 综述“把各机制组合成控制系统”的视角对读。

方法

LATS 针对的问题,比“推理器 vs 行动者”那层老对立更深一层。此前的语言 agent——无论是 ReAct 的单条轨迹、 还是 Reflexion 的线性重试——本质上都是从左到右一次性把一条路走到底:走错了要么将错就错,要么整条推倒重来, 没有在中途保留多个候选分支、按价值择优、并在需要时回溯到更早节点的能力。这正是棋类 AI 早已解决、而语言 agent 一直缺席的东西:深思式搜索(deliberate search)。 LATS 的主张就是把蒙特卡洛树搜索(MCTS)搬进“推理+真实行动”的联合空间,让 agent 像 AlphaGo 权衡落子那样权衡下一步。

树里每个节点是一条部分轨迹(状态 s)——从 root 到该节点的一串 thought / action / observation。一次迭代循环执行六个操作:

  1. 选择(selection):从 root 出发,反复选置信上界(UCT)最高的子节点,直到到达一个可扩展节点。UCT 在“已知高价值”与“探索少访问分支”之间平衡:

    UCT(s) = V(s) + w · sqrt( ln N(p) / N(s) )        # w = 1(全部实验)

    其中 V(s) 是节点价值,N(s)N(p) 是该节点/其父节点的访问次数。

  2. 扩展(expansion):以 ReAct 式 reasoning + acting 从当前状态采样 n 个候选动作(论文常取 n=5), 每个都在环境中实际执行、收集真实 observation,生成 n 个子节点。

  3. 评估(evaluation):给新状态打分。价值函数由两部分线性组合——LM 自评与自洽频次:

    V(s) = λ · V_LM(s) + (1−λ) · V_SC(s)              # λ = 0.5(推理)/ 0.8(编码、WebShop)

    V_LM(s) 是让 LM 推理该状态、在推理末尾吐出一个“这条轨迹有多可能正确”的分数;V_SC(s) 是自洽启发式——在同一状态被反复采样到的动作得分更高。 与 Tree-of-Thought 的关键差别:LATS 这个价值是在拿到环境反馈之后才给的,因而对交互决策任务更准。

  4. 模拟(simulation):从选中节点按“价值优先”一路 rollout 到终止状态,得到回报 r。命中成功即终止搜索。

  5. 回传(backpropagation):把回报沿路径回传,逐节点更新访问次数与均值价值:

    N(s) ← N(s) + 1
    V(s) ← ( V(s)·N_old(s) + r ) / N(s)
  6. 反思(reflection):失败轨迹触发 Reflexion 式语言反思——用“轨迹 + 最终回报”提示 LM 写出一段 “错在哪、下次怎么改”的复盘,存入记忆,作为额外上下文注入后续迭代,指导整棵树的走向。

一次搜索的动态长什么样

以 LATS 的头号战场编程任务(HumanEval)为例,勾勒一轮循环的动态(示意,非论文原图):

root: 函数规格(docstring + 签名)
  │  expansion:采样 n=5 个「思路 + 首版实现」候选 A…E
  │  evaluation:LM 价值 + 自洽 → A:0.7  B:0.4  C:0.8  D:0.5  E:0.3

  ├─ 选择 UCT 最高的 C(0.8) → simulation:补全实现 → 跑自生成单元测试
  │     Observation: 3/5 测试失败(环境反馈)→ 回报 r 低
  │     reflection: 「边界情况 n=0 未处理,且把索引从 1 起算了」→ 写入记忆
  │     backpropagation: C 子树价值被下调,root 下 C 分支不再最优

  └─ 下一轮 selection 转向 A(0.7);带着上一条反思,A 的补全避开了同类错误
        Observation: 5/5 测试通过 → 命中,搜索终止

三处是纯 ReActReflexion 都拿不到的:一是同时保留 A…E 五个候选而非押注一条; 二是C 走死后能回溯到兄弟节点 A,而不是从头重来;三是价值函数让搜索有方向——不是盲目枚举,而是优先展开被判为有前景的分支。

本质:把左到右生成换成价值引导的深思搜索

LATS 最容易被读成“ReAct 上面套个树”。它真正的洞见是:把语言 agent 的生成方式从“贪心地把一条轨迹走到底”改成“在一棵显式的树上做价值引导的搜索与回溯”—— 这是给语言 agent 补上一套“System 2”。看懂这一点,前面几章就在这里各就各位。它把 foundations 的四个范式收成四个可组合部件:

范式在 LATS 里承担的角色
CoT节点内部的显式推理链
ReAct扩展一步的原语:reasoning + acting,并在环境中真实执行取得 observation
Reflexion失败轨迹触发的语言反思,作为跨迭代记忆注入后续搜索
树搜索(MCTS)把上述三者组织成可回溯、价值引导的深思搜索——LATS 的外骨架

而“把 MCTS 搬进语言空间”这一步,是一次逐项的对号入座——棋类里每个部件,它都在语言 agent 里找到了对应物:

MCTS(棋类 / AlphaGo)LATS 的语言化对应
状态一条部分轨迹(root→当前的 thought / action / observation 序列)
动作一个 ReAct 式步骤
状态转移在环境中执行动作、追加真实 observation
价值网络LM 价值函数 V(s) = λ·V_LM + (1−λ)·V_SC(无需训练)
随机 rolloutLM 引导、按价值优先的模拟到终止
(棋类没有这一项)reflection——把失败轨迹蒸馏成语言教训注入下一轮

一处反直觉、也最该记住的证据来自消融(见下):在 LATS 里,“会评估”远比“会反思”重要。去掉反思,HotpotQA 只从 0.63 掉到 0.58; 但去掉 LM 价值函数,直接崩到 0.37。这与 Reflexion 强调“诊断比重试重要”恰成对照——因为 LATS 的搜索空间是多路径的, 一个不靠谱的价值函数会让树搜索退化成昂贵的暴力枚举。先有可信的价值信号,搜索才有意义。

论文与实验结果

  • 设置:编程 HumanEval / MBPP、交互问答 HotpotQA、网页交互 WebShop、数学 Game of 24;基座为冻结的 GPT-3.5 / GPT-4,全程无梯度微调

  • 相对基线的增益(LATS 均取 SOTA 或近 SOTA):

    基准(基座)ReActReflexionToT / RAPLATS
    HotpotQA(GPT-3.5,acting)0.320.510.39 / 0.540.63
    HumanEval pass@1(GPT-3.5)56.968.183.8
    HumanEval pass@1(GPT-4)91.092.7
    MBPP(GPT-3.5)70.071.4(RAP)81.1
    WebShop 分 / 成功率(GPT-3.5)53.8 / 28%64.2 / 35%75.9 / 38%
    Game of 24(GPT-3.5)0.20 / 0.400.44

    论文强调这种无梯度表现可与需要梯度微调的方法(如 WebShop 上的 IL / RL agent)相当。HotpotQA 上把 CoT 也叠进来(LATS(CoT+ReAct))可进一步到 0.71

  • 消融(HotpotQA,n=5k=50)——每个部件都不可省

    配置准确率相对满配
    完整 LATS0.63
    去掉反思0.58−0.05
    去掉 LM 价值启发0.37−0.26
    用 DFS 替代 MCTS0.42−0.21
    ToT(ReAct)基线0.39−0.24

    两条结论:价值函数是承重件(去掉掉最多);MCTS 的价值引导回溯本身也是承重件(换成朴素 DFS 掉 0.21)。反思是真实但较小的增量。

  • 贡献:给出一个把规划(搜索)、推理、行动、反思纳入单一 MCTS 框架的通用 agent 算法,借助 LM 的 in-context 能力免于训练,并在多个基准取得 SOTA。

局限

LATS 是这组范式里最强也最贵的一端,代价集中在三处:

  • 算力与延迟:LM 调用次数随分支 n × 迭代 k × 轨迹深度增长,每个节点还要额外一次价值评估、失败还要一次反思。它是“为高价值任务投入算力换可靠性”的重型方案,不适合低延迟或一次性场景。
  • 回溯假设环境状态可复原:树搜索的全部威力来自“走死了退回上一个节点重选”。这在纯推理(Game of 24)、或可重置的沙箱里成立;但带副作用的真实环境(已经发出的邮件、已经写入的数据库、已扣的款)无法回溯——这类环境里 MCTS 的“重来”这一步根本不可用。这是 LATS 在工程落地时最硬的边界,远比“太贵”更根本。
  • 收益上限由价值函数的信噪比决定:价值信号若不可靠,搜索会朝错误方向深挖,越搜越偏;自洽项(V_SC)能缓解但不能根治。这也是它在编程任务(有单元测试这种确定性反馈)上最强的原因。论文亦自陈:LATS 没有成功的形式保证,依赖 LM 的自评估能力。

对 agent 设计的价值

可迁移原则,分四条:

  1. 只在任务价值足以 justify 反复搜索 + 外部验证时才启用。LATS 的每一分收益都用大量 token 与环境交互换来;对一次性、低价值、或延迟敏感的任务,一个 ReAct 循环就够。
  2. 瓶颈是价值信号,不是搜索本身。消融直接证明:没有可信的价值函数,树搜索退化成昂贵枚举(0.63→0.37)。启发:给 agent 加搜索/择优能力前,先把验证 (V) 那一层做扎实——优先接确定性验证器(测试、编译、类型检查)当价值信号,其可靠性直接封顶整个搜索的收益。
  3. 回溯只在状态可复原时可用——这决定了树搜索在 harness 里的适用面。启发:把带副作用的动作(对外发送、写库、扣款)与可回溯的“思考/试算”分离;只在后者上做搜索,前者用别的机制(确认、幂等、补偿)兜底。这与 生命周期 (L) 对副作用与可重放性的处理相扣。
  4. 它示范了“把机制当可组合构件拼装控制器”。LATS 把 ReAct 式行动、Reflexion 式反思与树搜索当作独立部件拼出更强的控制器——这与 harness 综述“把各机制组合成控制系统”的视角一致:单个范式不是终点,组合方式才是。
这页有帮助吗?