mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4
3365 字
10 分钟
Tree of Thoughts:LLM 的树状搜索推理
2025-02-26

2023 年 5 月,普林斯顿大学与 Google DeepMind 的研究团队发表了论文《Tree of Thoughts: Deliberate Problem Solving with Large Language Models》。这篇论文提出了一个看似简单却极其强大的想法:让大语言模型像人类一样,在解决问题时探索多个推理路径,并在遇到死胡同时回溯。

Chain of Thought(CoT)教会了模型”一步步思考”,但它的推理是线性的——一旦走错方向,就无法回头。Tree of Thoughts(ToT)打破了这一限制,将推理过程建模为一棵搜索树,让模型能够分支、评估、回溯,就像国际象棋选手在脑中推演多种走法一样。

Tree of Thoughts 是 LLM 推理能力从”本能反应”到”深思熟虑”的关键跃迁。

本文要点#

  • CoT 的线性推理局限与回溯动机
  • ToT 核心:推理过程建模为搜索树
  • 思维状态(Thought State)的生成与评估
  • BFS 与 DFS 两种搜索策略
  • Game of 24、Creative Writing、Mini Crosswords 三大实验
  • 与 CoT、Self-Consistency 的全面对比
  • 与 OpenAI o1 推理模型的关系
  • 后续发展:Graph of Thoughts、Tree of Thoughts+

一、为什么需要 Tree of Thoughts#

1.1 CoT 的线性困境#

Chain of Thought 让大模型在给出答案前先展示推理步骤,极大提升了复杂任务的准确率。然而,CoT 本质上是一种左到右的线性生成过程

flowchart LR subgraph CoT的线性推理 A["Step 1"] --> B["Step 2"] --> C["Step 3"] --> D["答案"] end subgraph 问题 F["走错方向无法回头"] G["错误逐步传播放大"] H["无法探索其他路径"] end B -.->|"错误传播"| C C -.->|"答案错误"| D style F fill:#f44336,color:#fff style G fill:#f44336,color:#fff style H fill:#f44336,color:#fff

核心问题在于:CoT 没有探索和回溯的能力。 一旦模型在某个推理步骤上做出了错误选择,后续所有步骤都会被拖累。

1.2 人类是如何解决问题的#

认知科学研究表明,人类在解决复杂问题时,通常会:

  1. 探索多种可能的方案,而不是只考虑一条路径
  2. 评估每个方案的可行性,在继续深入前先做判断
  3. 在发现死胡同时回溯,转向其他有希望的方向
  4. 在多个可行方案中选择最优的,而非随意挑选一个

ToT 正是受此启发,试图让 LLM 模仿这种”深思熟虑”的决策过程。

1.3 论文信息#

论文:Tree of Thoughts: Deliberate Problem Solving
with Large Language Models
作者:Shunyu Yao, Dian Yu, Jeffrey Zhao, Izhak Shafran,
Thomas L. Griffiths, Yuan Cao, Karthik Narasimhan
机构:Princeton University, Google DeepMind
发表:NeurIPS 2023 (Oral)
引用:1500+ 次

二、Tree of Thoughts 核心框架#

2.1 从链到树的范式升级#

ToT 将推理过程从线性链条扩展为树状结构。在树中,每个节点代表一个思维状态(Thought),模型可以:

  • 分支:从一个状态生成多个候选下一步
  • 评估:对每个候选状态打分或判断是否可行
  • 搜索:通过 BFS 或 DFS 策略在树中搜索最优路径
  • 回溯:在发现某条路径不通时,返回上一层继续探索
flowchart TB subgraph ToT搜索树 ROOT["初始问题"] ROOT --> A1["思维 A1"] ROOT --> B1["思维 B1"] ROOT --> C1["思维 C1"] A1 --> A2["思维 A2 "] B1 --> B2["思维 B2 "] C1 --> C2["思维 C2 "] C1 --> C3["思维 C3 "] A2 --> A3["答案 A "] C2 --> C3b["答案 C"] C3 --> C3c["答案 C'"] B2 -.->|"回溯"| ROOT end style ROOT fill:#1976d2,color:#fff style B2 fill:#f44336,color:#fff style A3 fill:#4caf50,color:#fff style C3b fill:#ff9800,color:#fff style C3c fill:#ff9800,color:#fff

2.2 四个关键组件#

组件功能示例
Thought 分解将问题分解为多个思维步骤将 24 点游戏分解为逐步填入数字和运算符
Thought 生成从当前状态生成候选下一步给定已有步骤,生成可能的下一步操作
状态评估评估当前状态的好坏判断当前中间结果是否可能达到目标
搜索算法在思维树中搜索最优路径BFS(广度优先)或 DFS(深度优先)

每个组件都可以根据任务特点进行定制。好的思维分解应该让每个步骤足够小以便评估,但又足够有意义以避免搜索空间过于庞大

2.3 Thought 生成策略#

ToT 提供了两种生成候选思维的方式:

策略一:独立采样(i.i.d. Sampling) — 从同一状态独立生成多个思维,每个互不影响。适合创意生成等需要多样性的任务。

策略二:顺序提出(Sequential Propose) — 根据已有的候选依次提出新思维,避免重复。适合有明确约束的任务(如填字游戏)。

2.4 状态评估#

状态评估是 ToT 的关键创新之一:

  • 独立评估:模型对每个状态打分(如 1-10 分),选择得分最高的继续探索
  • 投票评估:多次 LLM 调用对多个状态投票,得票最多的被选中
示例 — Game of 24 的状态评估:
State: 1 + 2 = 3, remaining: 3, 4 → Score: 3 (不太可能达到 24)
State: 1 × 2 = 2, remaining: 3, 4 → Score: 8 (2 × 3 = 6, 6 × 4 = 24 )

三、搜索策略:BFS 与 DFS#

3.1 广度优先搜索(BFS)#

BFS 逐层扩展搜索树,每一层保留最优的 b 个候选:

flowchart TB subgraph BFS搜索过程 L0["Level 0: 初始问题"] L0 --> L1A["候选 A (score: 8)"] L0 --> L1B["候选 B (score: 6)"] L0 --> L1C["候选 C (score: 4)"] L1A --> L2A1["A→1 (score: 9)"] L1A --> L2A2["A→2 (score: 7)"] L1B --> L2B1["B→1 (score: 5)"] L2A1 --> L3[" 答案找到"] end style L1C fill:#ffcdd2 style L2B1 fill:#ffcdd2 style L3 fill:#c8e6c9

BFS 适合解的深度有限且每步选择较少的任务,如 Game of 24。

3.2 深度优先搜索(DFS)#

DFS 沿着一条路径深入探索,在遇到死胡同时回溯到上一层。DFS 适合搜索空间大但解可能很深的任务,如填字游戏。

def dfs_search(state, max_depth, evaluate, threshold):
if is_solution(state):
return state
if depth(state) >= max_depth:
return None
for candidate in generate_thoughts(state):
score = evaluate(candidate)
if score >= threshold: # 只探索有希望的路径
result = dfs_search(candidate, max_depth, evaluate, threshold)
if result is not None:
return result
# score < threshold → 剪枝
return None # 回溯

3.3 BFS vs DFS 对比#

维度BFSDFS
搜索方式逐层扩展,先广后深深入到底,不行回溯
内存开销较高(需存储整层候选)较低(只存储当前路径)
适用场景解的深度有限,分支多解的深度不确定,需剪枝
典型任务Game of 24Mini Crosswords
最优性更容易找到全局最优可能陷入局部最优

四、三大实验任务#

4.1 Game of 24#

任务:给定 4 个数字,使用 +、−、×、÷ 使结果等于 24,每个数字只用一次。

输入:1, 2, 3, 4 → 输出:(1 + 2 + 3) × 4 = 24
输入:4, 5, 6, 7 → 需要仔细搜索才能找到解

ToT 使用 BFS 搜索:每步选两个数字做一次运算,生成 5 个候选,评估后保留最优的继续。

方法准确率
Standard Prompting7.3%
Chain of Thought4.0%
Self-Consistency (CoT)9.0%
Tree of Thoughts (BFS)74.0%

ToT 的准确率是 CoT 的 18 倍以上。这说明 GPT-4 完全具备解决这类问题的能力,只是线性 CoT 无法释放这种能力。

4.2 Creative Writing(创意写作)#

任务:给定约束条件,生成满足约束的创意文本,用另一个 LLM 打分评估。

ToT 的方法:生成 5 个不同开头 → 评估质量 → 选择最优 2-3 个继续展开 → 生成完整短文。

任务:以"那天晚上,月光格外明亮"开头,写一个悬疑故事
开头 A: "...李探长站在废弃仓库前..." → 7.0
开头 B: "...她从未想过,这个约定会..." → 7.5
开头 C: "...抽屉里的信封在银色光芒下..." → 8.0
开头 D: "...老钟停在三点十七分..." → 8.5
→ 选择 D 继续展开

ToT 生成的文本在人工评估中获得了显著更高的连贯性和创意度评分。

4.3 Mini Crosswords(迷你填字游戏)#

任务:在 5×5 填字游戏中填写单词,满足横向和纵向的交叉约束。

ToT 使用 DFS 策略:选择约束最强的提示词 → 生成候选答案 → 检查兼容性 → 深入或回溯。

方法字母准确率词准确率
Standard Prompting58.5%15.6%
Chain of Thought65.4%24.0%
Tree of Thoughts (DFS)78.0%60.0%

五、与其他方法的全面对比#

5.1 方法演进图谱#

flowchart TB A["Standard Prompting<br>直接输入→输出"] --> B["Chain of Thought<br>线性逐步推理"] B --> C["Self-Consistency<br>多路径投票"] B --> D["Tree of Thoughts<br>树状搜索推理"] D --> E["Graph of Thoughts<br>图状推理"] D --> F["o1/Test-Time Compute<br>隐式搜索推理"] style D fill:#4caf50,color:#fff style F fill:#ff9800,color:#fff

5.2 详细对比表#

维度StandardCoTSelf-ConsistencyToT
推理路径无中间步骤单条线性路径多条独立路径树状结构
回溯能力
状态评估(事后投票)(过程评估)
搜索策略并行采样BFS / DFS
计算成本1x1xNxB^D x
Game of 247.3%4.0%9.0%74.0%

5.3 Self-Consistency 的局限#

Self-Consistency 通过多次采样 CoT 并投票选择最一致的答案,但根本局限在于:

  • 路径间无交互:每条路径独立采样,无法共享信息
  • 无过程评估:只能在最终答案层面投票
  • 无法回溯:每条路径一旦生成就无法修改

ToT 解决了这些问题:路径通过树结构关联,中间状态可评估,死胡同可回溯。


六、与 OpenAI o1 推理模型的关系#

6.1 从显式搜索到隐式搜索#

2024 年 9 月,OpenAI 发布 o1 推理模型。ToT 与 o1 之间存在深层联系:

flowchart TB subgraph ToT显式搜索 A1["外部提示控制搜索过程"] A2["每个思维节点 = 一次 LLM 调用"] A3["评估器也是 LLM"] A4["搜索算法手工设计"] end subgraph o1隐式搜索 B1["模型内部学会搜索策略"] B2["推理过程是连续 Token 生成"] B3["自我评估与纠错内化"] B4["搜索策略通过 RL 学习"] end A1 -.->|"内化"| B1 A2 -.->|"整合"| B2 A3 -.->|"学习"| B3 A4 -.->|"优化"| B4 style B1 fill:#4caf50,color:#fff style B4 fill:#4caf50,color:#fff

6.2 Test-Time Compute Scaling#

特性ToTo1
计算控制分支因子 + 搜索深度思考 Token 数量
搜索方式显式树搜索隐式内部搜索
评估机制外部 LLM 评估内化的自我评估
回溯能力显式回溯生成新思考链
部署成本多次 API 调用单次调用(内部多次推理)

核心洞察:ToT 证明了”搜索式推理”的巨大价值,o1 将这一洞察融入模型本身,通过 RL 让模型自动学会何时搜索、何时回溯。


七、后续发展#

7.1 Graph of Thoughts(GoT)#

2023 年底,研究者进一步将树结构推广为图结构。GoT 新增了三个关键能力:

  • 思维融合:将多个推理路径的结果合并为新的思维节点
  • 思维精炼:对已有思维节点进行迭代改进
  • 循环连接:允许后期思维回溯影响前期思维

这使得 GoT 特别适合需要迭代优化和全局信息的任务。

7.2 Tree of Thoughts+ 与其他改进#

  • ToT+:工程优化版本,支持一次 LLM 调用评估多个候选、自适应分支因子、缓存和并行化
  • RAP(Reasoning via Planning):将推理转化为 MDP,通过蒙特卡洛树搜索寻找最优策略
  • Agent 集成:ToT 思想深刻影响了 LLM Agent 框架,在规划、工具选择等环节应用树状搜索

八、局限性与挑战#

8.1 计算成本#

ToT 的最大局限是计算成本。一次推理可能需要 数十到数百次 LLM 调用

CoT: 1 次 | Self-Consistency (k=40): 40 次 | ToT (BFS, b=5, d=3): ~155 次

8.2 适用范围#

ToT 最适合:多步规划、创意生成、约束满足、复杂决策。对于简单单步任务或搜索空间极其庞大的任务,效果可能有限。

8.3 评估器的可靠性#

ToT 效果高度依赖状态评估器质量。如果评估器将差的路径标记为好的,整个搜索可能被误导。


FAQ#

Q1:ToT 和普通 CoT 在实际使用中怎么选?

如果任务只需 2-3 步简单推理,CoT 通常够用。当涉及规划、约束满足或需比较多个方案时,ToT 优势才体现。判断标准:如果人类也会”犹豫和尝试不同方法”,ToT 可能更合适。

Q2:ToT 的计算成本可以接受吗?

取决于场景。对于关键决策(代码生成、数学证明),准确率从 4% 到 74% 的提升完全值得。可通过调整分支因子和搜索深度来平衡成本和效果。

Q3:ToT 能否与 RAG 结合?

可以。每个思维节点都可以触发 RAG 检索获取相关上下文,适合需要外部知识的复杂推理任务。

Q4:ToT 和 o1 的推理有什么本质区别?

ToT 是提示框架,不需修改模型;o1 是训练方法,通过 RL 内化搜索能力。ToT 更灵活可解释,o1 更高效但黑盒。

Q5:ToT 能用在代码生成上吗?

可以。ToT 可生成多个代码方案骨架,评估可行性后选择最优的继续细化。AlphaCode 的采样+聚类策略就与 ToT 异曲同工。


小结#

Tree of Thoughts 是 LLM 推理方法演进中的关键节点:

  1. 核心贡献:将推理从线性链条扩展为树状搜索,赋予 LLM 分支、评估、回溯能力
  2. 关键创新:将 LLM 同时用作推理引擎和评估器,无需外部工具
  3. 实验验证:Game of 24 准确率从 4% 提升到 74%,证明搜索式推理的巨大价值
  4. 深远影响:启发了 Graph of Thoughts、o1 推理模型等后续工作
  5. 实践价值:提供可操作框架,通过提示工程即可实现搜索式推理

ToT 的意义不仅在于方法本身,更在于它所传达的理念:LLM 的推理能力远超线性生成,关键在于设计合适的搜索和评估框架来释放这种能力。 这一理念正在深刻塑造 o1、DeepSeek R1 等新一代推理模型的发展方向。


参考资料#

8.1 核心论文#

8.2 相关工作#

8.3 推理模型#

8.4 实现资源#

支持与分享

如果这篇文章对你有帮助,欢迎支持作者或分享给更多人

Tree of Thoughts:LLM 的树状搜索推理
https://blog.souloss.com/posts/machine-learning/llm-paper-history/tree-of-thoughts-tree-search-reasoning/
作者
Souloss
发布于
2025-02-26
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时