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 是让模型在多条推理路径中搜索答案。
或者更进一步说:
推理不是简单生成,而是有目标的搜索。
浙公网安备 33010602011771号