Tree of Thoughts 解读:让大语言模型从“线性推理”走向“搜索式思考”

大语言模型已经可以完成很多复杂任务,例如数学推理、代码生成、写作规划和多步骤问答。但如果仔细观察模型的推理过程,会发现一个很关键的问题:很多时候,模型并不是真的在“搜索答案”,而是在沿着一条生成路径不断往下写。

这就是传统 Chain-of-Thought(CoT)方法的局限。

CoT 能让模型写出中间推理过程,但它本质上仍然是一条线性的推理链:

问题 → 思考1 → 思考2 → 思考3 → 答案

如果第一步走错了,后面往往会沿着错误继续推导,最终形成“一步错,步步错”的累计误差。

Tree of Thoughts(ToT)这篇论文提出的核心思想,就是把大模型的推理过程从“一条链”扩展成“一棵树”:

问题
├── 思路A
│   ├── A1
│   └── A2
├── 思路B
│   ├── B1
│   └── B2
└── 思路C

一句话概括:

Tree of Thoughts 不是让模型一次性生成答案,而是让模型像搜索算法一样,在多条推理路径中探索、评估、筛选和回溯。


1. 为什么 CoT 还不够?

Chain-of-Thought 的贡献在于,它让模型不再直接输出答案,而是先写出中间推理步骤。

例如一个数学问题,传统 Input-Output Prompting 是:

输入问题 → 直接输出答案

CoT 则是:

输入问题 → 写出推理步骤 → 输出答案

形式上,CoT 可以理解为:

zi ~ pθ^CoT(zi | x, z1:i-1)

也就是说,第 i 个中间思考步骤 zi,依赖于原始输入 x 和前面已经生成的思考步骤 z1:i-1

最终答案则由完整推理链生成:

y ~ pθ^CoT(y | x, z1:n)

这比直接回答更强,但问题也很明显:

问题 说明
单路径 每次只沿一条推理链往下走
无法回溯 前面错了,后面通常无法主动退回
缺少比较 不会同时比较多个中间思路
容易累计误差 早期错误会影响后续全部推理

所以,CoT 更像是“写出一条推理链”,而不是“系统地搜索解题空间”。


2. CoT-SC:多想几次,但仍然不够

为了解决单条 CoT 不稳定的问题,研究者提出了 Self-Consistency,也就是 CoT-SC。

它的思路是:不只生成一条 CoT,而是生成 k 条独立的 CoT,然后让最终答案投票。

形式上可以写成:

[z1:n^(i), y^(i)] ~ pθ^CoT

其中:

符号 含义
i 第 i 条独立推理链
z1:n^(i) 第 i 条推理链中的所有中间步骤
y^(i) 第 i 条推理链得到的答案
k 独立采样的推理链数量

最终选择出现次数最多的答案:

y = arg max_y #{i | y^(i) = y}

通俗来说,就是让模型“多想几次”,然后看哪个答案出现最多。

例如:

编号 推理路径 答案
1 一条思路 A
2 一条思路 B
3 一条思路 A

最终选择答案 A。

CoT-SC 的确比单条 CoT 更稳定,但它仍然有一个根本问题:这些路径之间没有过程级交互。

CoT-SC 的问题 解释
每条链仍然是单路径 每条 CoT 内部还是一路走到底
没有路径交互 不同推理链之间不能互相借鉴
没有中途比较 不能在中间步骤判断哪条更好
没有局部优化 只能最终投票,不能过程筛选

所以,CoT-SC 是“多条链最后投票”,但不是“多条路径动态搜索”。


3. Tree of Thoughts 的核心思想

Tree of Thoughts 进一步推进了这个思路。

它不只是生成多条完整答案,而是在每一步都生成多个候选思路,并对这些中间状态进行评估,再决定哪些路径继续探索,哪些路径应该剪掉。

ToT 的基本流程可以概括为:

生成多个候选思路
↓
评估当前状态
↓
保留更有希望的路径
↓
继续扩展
↓
遇到死路则回溯

也就是说,ToT 把大语言模型变成了三个角色的组合:

角色 作用
Generator 生成多个候选思路
Evaluator 判断哪些路径更有希望
Searcher 控制搜索、筛选和回溯

4. ToT 的三个核心概念:Thought、State、Tree

要理解 ToT,需要先理解三个概念。

4.1 Thought:一步想法

Thought 是模型生成的一个中间思考步骤。它可以是一个词、一句话、一行算式,也可以是一段写作计划。

例如在 24 点任务中,输入是:

4, 9, 10, 13

可能的 Thought 包括:

13 - 9 = 4
10 - 4 = 6
13 - 10 = 3
9 + 4 = 13

每一个 Thought 都是一个局部解法。

4.2 State:当前状态

State 表示当前解题进度。

可以理解为:

State = 原始输入 + 已经生成的思考步骤

形式上:

s = [x, z1, z2, ...]

例如 24 点中:

初始状态:4, 9, 10, 13

如果第一步选择:

13 - 9 = 4

那么新的状态就是:

剩余数字:4, 4, 10
已做操作:13 - 9 = 4

状态不是简单的一堆候选答案,而是搜索树中的一个节点。每个节点都包含当前已经走过的路径。

4.3 Tree:所有可能路径

Tree 就是由多个状态组成的分支结构。

s0
├── s1
│   ├── s11
│   └── s12
├── s2
│   └── s21
└── s3

其中:

  • s0 是初始状态;
  • s1、s2、s3 是第一层候选状态;
  • s11、s12、s21 是继续扩展后的状态。

ToT 的核心,就是在这棵树上进行搜索。


5. ToT 的四个模块

论文中,ToT 可以拆成四个模块。

模块 作用 类比
Thought generation 生成多个候选步骤 扩展节点
State evaluation 判断状态好坏 启发式函数 heuristic
Search algorithm 控制探索路径 BFS / DFS / MCTS
Backtracking 回退错误路径 搜索剪枝

5.1 Thought Generation:生成多个候选步骤

CoT 每一步通常只生成一个中间步骤,而 ToT 会生成多个候选步骤。

例如 24 点中,从 4, 9, 10, 13 可以生成:

13 - 9 = 4
10 - 4 = 6
13 - 10 = 3
9 + 4 = 13

这一步相当于搜索算法中的“扩展节点”。

5.2 State Evaluation:状态评估

生成多个候选后,ToT 需要判断哪些候选更值得继续探索。

评估方式可以包括:

形式 说明
直接打分 例如 1-10 分
分类判断 sure / likely / impossible
相对排序 比较几个候选哪个更好
规则检查 如 24 点中判断是否还能凑成 24
多次投票 多次评估后综合结果

在搜索算法中,这相当于启发式函数 heuristic function。

5.3 Search Algorithm:搜索策略

ToT 可以使用不同搜索策略。论文中主要讨论 BFS 和 DFS。

方法 中文名 特点
BFS 广度优先搜索 多个候选路径同步推进
DFS 深度优先搜索 先深入一条路径,失败后回溯

5.4 Backtracking:回溯

如果某条路径被判断为没有希望,就停止继续扩展,回退到上一个状态,尝试其他路径。

这就是 ToT 相比 CoT 很关键的升级点:它不是一条路走到底,而是可以及时止损。


6. BFS 与 DFS:ToT 如何搜索?

BFS 和 DFS 是 ToT 中常用的两种搜索方式。

6.1 BFS:多条路径同步推进

BFS 的流程可以理解为:

从当前状态出发
↓
生成所有下一步候选
↓
给所有候选打分
↓
保留 top-b 个状态
↓
继续扩展这些状态

BFS 更适合开放性任务和多方案比较任务,比如创意写作、规划问题。

6.2 DFS:一条路径深入探索

DFS 的流程可以理解为:

从当前状态出发
↓
生成下一步候选
↓
选择最有希望的候选深入
↓
如果失败,则回溯

DFS 更适合逻辑性强、可以快速判断死路的任务,比如填字游戏、数学推理、约束满足问题。

6.3 BFS 与 DFS 对比

步骤 BFS(ToT-BFS) DFS(ToT-DFS)
Step 1 从一个状态出发 从一个状态出发
Step 2 生成所有下一步候选 生成下一步候选
Step 3 给所有候选打分 逐个判断是否值得深入
Step 4 保留 top-b 个状态 只选最优或可行路径继续
Step 5 扩展所有保留节点 递归进入当前路径
Step 6 进入下一层 失败则回溯

一句话区分:

BFS 是“多个候选路径同步推进”,DFS 是“一个候选路径深入探索,失败后回退”。


7. 不同任务如何选择搜索策略?

不同任务适合不同的搜索方式。

任务类型 BFS更适合 DFS更适合
24点游戏 适合,规则明确且有多种组合 不太适合纯DFS
创意写作 适合,多方案比较 一般
填字游戏 一般 适合,逐步填并回溯
数学推理 一般 适合,链式推导和剪枝
规划问题 适合,多方案评估 一般

这说明 ToT 不是固定算法,而是一个可组合框架。它可以根据任务特点选择不同搜索方式。


8. 24点实验:ToT 为什么明显更强?

论文中最直观的实验是 Game of 24。

任务要求:

  • 输入 4 个数字;
  • 每个数字必须使用一次;
  • 可以使用 + - × ÷
  • 最终结果必须等于 24。

例如输入:

4, 9, 10, 13

目标是构造一个等于 24 的表达式。

实验结果如下:

方法 成功率
IO 7.3%
CoT 4.0%
CoT-SC 9.0%
ToT(b=1) 45%
ToT(b=5) 74%

这个结果非常关键。它说明,在这类组合推理任务上,单纯让模型“多生成一些”并不够,真正有效的是引入搜索结构。

CoT 的问题是:如果第一步猜错,后面就会沿着错误路径继续。

ToT 的优势是:它可以同时尝试多种中间计算,并判断哪些状态更有希望到达 24。

所以这篇论文的核心结论可以概括为:

Reasoning is search, not generation.
推理的本质是搜索,而不是单纯生成。


9. 创意写作与填字游戏:ToT 不只适合数学

除了 24 点,论文还测试了创意写作和填字游戏。

9.1 创意写作任务

任务输入:

4 个随机句子

任务输出:

一篇由 4 段组成的文章,并且每一段的结尾必须分别对应输入的 4 个句子。

关键约束:

约束 说明
包含输入句子 4 个句子都必须出现
段落结尾匹配 每段最后一句对应一个输入句子
连贯性 文章不能只是机械拼接句子

ToT 适合这个任务,是因为它可以先生成多个写作计划,再比较哪个计划更连贯。

9.2 填字游戏任务

填字游戏要求模型根据横向和纵向 clues,填出一个完整的 5×5 字母网格。

这个任务类似数独:

  • 一个格子的字母会影响横向单词;
  • 同一个字母也会影响纵向单词;
  • 前面填错会导致后面冲突;
  • 需要不断试错、检查和回溯。

CoT 很难处理这种约束满足问题,因为它无法有效回溯。ToT 则可以逐步尝试、检查冲突,并在错误时退回。


10. ToT 对 Agent 有什么启发?

ToT 不只是一个 prompt 技巧,它更像是 LLM Agent 规划能力的基础结构。

一个智能体在执行任务时,通常需要:

  • 生成多个行动方案;
  • 判断当前方案是否可行;
  • 比较不同方案的收益;
  • 遇到失败时调整策略;
  • 必要时调用工具验证。

这些能力与 ToT 高度一致。

ToT能力 对Agent的作用
多方案规划 同时生成多个行动计划
状态评估 判断当前行动是否有效
路径筛选 保留更优计划
回溯修正 遇到失败后调整策略
工具调用决策 判断何时搜索、计算、调用代码或数据库

因此,ToT 可以看作 Agent 中 planning、reflection、evaluation 和 search 的早期统一框架。


11. ToT 的优势与局限

11.1 优势

优势 说明
推理能力更强 尤其适合复杂、多步骤、组合类任务
无需额外训练 只需要设计合适的提示词和搜索流程
模块化 生成、评估、搜索策略可以独立替换
可解释性更强 能看到中间路径、评估和筛选过程
适合Agent系统 可用于规划、决策和工具调用

11.2 局限

局限 说明
计算成本更高 多路径搜索需要更多模型调用
依赖评估质量 如果 LLM 评估不准,搜索会被误导
任务设计要求更高 需要合理定义 thought、state 和 evaluator
简单任务不划算 普通问答没必要使用复杂搜索

12. 如何通俗理解 ToT?

可以把 CoT 和 ToT 做一个类比。

CoT 像是在考试时只写一套解法:

我想到一个方法 → 一直写下去 → 得到答案

ToT 更像是在草稿纸上同时试几种方法:

方法A看起来可行 → 继续推
方法B明显不行 → 划掉
方法C可能有机会 → 留着
方法A走不通 → 回到方法C

所以,CoT 是“顺着一条路走”,ToT 是“在多条路之间搜索”。


13. 总结

Tree of Thoughts 的核心贡献,是把大语言模型的推理过程从线性生成变成树状搜索。

它让模型从:

单次生成答案

升级为:

生成多个思路 → 评估中间状态 → 保留优质路径 → 回溯错误路径 → 搜索最终答案

这也是为什么 ToT 在 24 点、创意写作、填字游戏等任务上表现更强。

最后可以用一句话总结这篇论文:

CoT 是让模型写出一条推理链;ToT 是让模型在多条推理路径中搜索答案。

或者更进一步说:

推理不是简单生成,而是有目标的搜索。

posted @ 2026-06-15 14:48  yong_2333  阅读(42)  评论(0)    收藏  举报