想象你带队爬一座从未登顶的山。新手时期的 AI 像个莽撞的登山者,问题一抛出去就闷头往上冲,一口气爬到哪算哪;后来它学会边走边在观景台停下来,把“接下来怎么走”默念一遍,这是思维链;再后来,一群登山者各走各的路线,最后在山顶互相晒照片、投票选出最一致的风景,这是自我一致性。可这些做法本质上都只有“一条路线”。真正专业的登山队完全不同:在每一个岔路口,队长会派出多名侦察兵同时探索好几条支线,用望远镜评估哪条更有希望,发现死路就立刻撤回岔路口换一条再试。这支“边走边搜、随时掉头”的探险队,就是本文的主角——Tree of Thoughts(思维树,简称 ToT)。它是 Agentic AI 推理范式从“单链推理”迈向“搜索式推理”的关键一跃,让大模型从“一口气答到底”变成“像下棋一样掂量多条路再落子”。
掌握这条范式演进的脉络,你就读懂了 Agent 从“会答”走向“会想”的底层逻辑;在做 Agent 系统设计时,能根据任务复杂度选出最划算的推理增强方案,这正是高级 AI 研发者的核心判断力。
可视化演示
交互展示树状推理结构、搜索策略对比和性能提升,理解Agent如何探索多条推理路径并择优
本节配有交互动效(进入视口后自动加载,约 3KB)。
树状推理 每步生成多个思维分支 探索多条推理路径 从单链推理到搜索式推理
范式演进脉络
先说一段登山史。最早的登山者不看地图,问题抛出去就闷头往上冲——这是模型直接吐答案。后来人们学乖了,每走一段就在观景台停下来,把“接下来怎么走”在心里默念一遍——这就是思维链(Chain of Thought,简称 CoT)。再后来,一群人各走各的路,到了山顶互相晒照片投票,取最多人看到的风景——这叫做自我一致性(Self-Consistency)。可是这些做法本质上都只有一条路线:要么一条道走到黑,要么各走各的互不商量。
真正专业的登山队不是这样。他们在每个岔路口派出侦察兵,同时探索多条支线,评估哪条更靠谱,发现死路就撤回重选。这个从“走单线”到“搜路网”的转变,正是 Agentic AI 推理范式的一次关键跃迁,催生了本文的主角:Tree of Thoughts(思维树,简称 ToT)。它把“一次想到底”升级为“多想几条、边走边挑”。
在 ToT 之前,主流的推理增强方式可以画成一条单向直线:
登山队的历史,就是 ToT 的诞生史:从独自盲冲,到边走边确认,再到多路分兵、投票汇总,最后进化为“搜索一整片路网”。
- 输入 $x$代表用户提出的问题,比如“从 A 城到 B 城怎么走最省时”。
- 中间思维 $z_i$模型逐步写下的推理小片段,像登山路上一个个观景台的确认记录。
- 输出 $y$沿着这条唯一路径走到头的最终答案。
- 单向箭头 $\rightarrow$表示“只能往后、不能回头”的推进方式,这正是 CoT 与 ToT 最根本的分野。
核心思想理念
队伍到了岔路口,队长不会只让一个人探路,而是把“接下来怎么办”拆成一个个决策点,在每个决策点上摊开一张“选择地图”。地图上不是一条线,而是很多条候选线,每条线都标注着队伍当前到达的位置——这就是 ToT 的核心:把推理过程变成一棵可以查阅、比较、放弃的树。
ToT 把一个复杂问题拆成若干“思维步”。每一步产生的候选想法叫一个思维碎片(thought);从问题出发,每追加一个思维碎片,队伍就到达一个新状态;状态就是树上的节点。树上的每个节点都是一种“走到一半的答案”,比如旅行规划里的“第三天上午在博物馆”。
用状态更新来记录这个推进过程:
队长地图上的每一面小旗,就是一个状态;每添一面旗,队伍就来到一个新决策点。整张“选择地图”,就是一棵不断生长的思维树。
- 状态 $s_t$第 $t$ 步时的部分解,也就是队伍此刻所在决策点及走过的路线集合。
- 思维 $z_t$这一步产生的新想法,相当于从当前决策点派出的一个侦察方案。
- 追加操作 $[\,]$把新思维接到历史序列末尾,组成新的状态。
思维树构建
侦察兵如何出发?假设队伍停在一个决策点,队长下令:“给我 5 条探路方案。”于是 5 个侦察兵各选一个方向出发,各自带回“前方有多远、路况如何”的报告。这些报告,就是候选思维;每个方向,就是树上新长出的一个分支。
在 ToT 里,“派出侦察兵”由大模型完成。给定当前状态 $s_t$,模型被要求连续生成 $k$ 个互不相同的候选想法,而不是只生成一个——这 $k$ 个想法就成为当前节点的 $k$ 个子节点。分叉数 $k$ 和树的深度 $T$ 共同决定了思维树长得是“矮胖”还是“高瘦”。比如 24 点游戏把问题拆成 3 步,那么深度 $T=3$,每一步生成 $k=5$ 个候选算式。
思维生成可以写成从条件分布中采样:
分叉系数 $k$ 是“一个决策点派几个侦察兵”,深度 $T$ 是“最多探几层”。侦察兵太多会人挤人拖慢速度,太少会漏掉好路——选好 $k$ 和 $T$,是搭建思维树的第一道手艺。
- 条件模型 $p_\theta$大语言模型,也就是那个能根据已有信息“脑补”下一步的知识库。
- 采样符号 $\sim$从所有可能想法中按概率抽出一个,每次抽到的可能都不同。
- 分叉数 $k$一次生成多少个候选,对应派出几个侦察兵。
搜索与评估
侦察兵带回一堆报告,队长得先判断哪些值得继续——这是评估;再决定先看哪一层、深入还是回头——这是搜索。评估是“给每条路打分”,搜索是“决定怎么逛这棵树”。
评估器(evaluator)给每个状态打分。打分可以是规则式的,比如 24 点游戏里检查“剩余数字还有没有办法继续运算成一个数”;也可以让模型投票:让模型对“这条路能走通吗”回答“确信 / 可能 / 不可能”,分别记 1、0.5、0 分,再取平均。
投票评估的公式如下:
有了分数,就轮到搜索策略上场。广度优先搜索(BFS)像“整层整层地扫”,每层只保留分数最高的 $b$ 个节点继续向下长;深度优先搜索(DFS)像“逮着一条路钻到底”,撞了南墙就退回上一个岔路口换一条。BFS 的剪枝选择可以写成:
评估像望远镜,搜索像队形调度。望远镜看得准、队形调得巧,登山队才能既不错过好路,又不把体力耗在死胡同里。
- 当前前沿 $S_t$搜索进行到第 $t$ 层时,还在“考察名单”里的状态集合。
- 生成子状态 $\mathrm{Gen}(s)$对名单里每个状态派出侦察兵,长出一批子节点。
- 保留前 $b$ 名 $\mathrm{Top}_b$按评估分数排序,只留下 $b$ 个最有希望的状态。
对比CoT优势
独行侠和侦察队有什么差别?独行侠走错一步,只能将错就错;侦察队走错一条支线,撤回岔路口换一条就行。这个差别,决定了 ToT 在复杂任务上的四个关键优势。
一是探索与利用的平衡:ToT 先广撒网(探索)再深耕(利用),CoT 却只有一条道走到黑;二是纠错能力:评估发现死路就回溯,CoT 无法收回已经写下的错误步骤;三是全局决策:用“望远镜”看未来几步,避免只顾眼前利益;四是代价——探索是要花钱的:分叉越多,模型调用越多。
一棵满思维树能覆盖的理论路径数,是分叉数的深度次方:
一句话总结:CoT 是“认准一条路”,ToT 是“拥有一整片路网”。路网越大,越不容易被困死,但养这支侦察队的成本也越高。
- 分叉数 $k$每个节点产生几个候选子思维。
- 树的深度 $T$从根到叶子一共几层。
- 路径总数 $k^T$理论上可供选择的完整路线条数。
典型应用
什么样的山值得派侦察队?答案是:难走、可分几步、中间能判断好坏的山。ToT 论文里最有名的三座山是 24 点游戏、创意写作和迷你填字游戏,它们分别对应数学推理、开放生成和长程规划三类任务。
以 24 点为例:任务被拆成 3 步,每步把两个数合成一个新数。第一步,模型生成 5 个候选算式(比如从 1、2、3、4 里选两个数做加法得 3),评估器投票判断“这三个中间结果还有没有可能凑出 24”,BFS 每层只保留最好的 5 个状态。创意写作则先让模型写 5 个不同的提纲,评估后选最优提纲,再逐段生成正文;长程规划任务更适合 DFS 配合“前瞻”——先试探性地多看几步再决定是否深入。
当搜索确定最优状态后,最后一步是让模型从该状态产出完整成品:
无论是数字的岩壁、文字的峡谷还是规划的平原,共同点是:拆得开、评得出、搜得动。不具备这三点的任务,派侦察队就是杀鸡用牛刀。
- 最优状态 $s_T$经过评估与搜索锁定的最理想终点状态。
- 条件生成 $y$基于该状态生成最终答案或成品。
落地挑战
侦察队也有烦恼:人多粮多、队长可能看走眼。把 ToT 放进真实 Agent 系统,会迎面撞上三个现实问题。
一是计算成本:每生成一个候选思维、每做一次评估,都是一次大模型调用,ToT 的调用量比 CoT 高一个乃至几个数量级;二是评估设计:打分规则往往要针对任务手写,“确信 / 可能 / 不可能”这套投票在通用场景容易失效;三是与 Agent 融合:Agent 框架要编排生成器、评估器和搜索器,并决定什么时候值得切换到 ToT——简单任务用 CoT 更快,复杂任务才上 ToT。
成本的量级可以粗略估算为:
未来方向也很清晰:把评估器训练成价值模型、引入蒙特卡洛树搜索(MCTS)、让树深和分叉数自适应。侦察队的望远镜会越来越准,队形会越来越灵活,但“评估决定搜索质量”这条铁律不会变。
- 深度 $T$树的层数,每层都要做一轮生成与评估。
- 分叉 $k$ 与宽度 $b$每层要生成 $k$ 个候选、保留 $b$ 个。
- 总调用量 $O(k \cdot T \cdot b)$粗略估计的大模型调用次数量级。
AI 应用场景
自主Agent的行程规划
阶段:决策规划与推理增强
解决的问题:传统旅行 Agent 一次性吐出行程,遇到航班取消、景点时间冲突只能从头再来。用 ToT 后,每个城市停留方案是一个思维节点,Agent 生成多个候选片段(如“上午去博物馆还是公园”),评估器用预算、距离、开放时间打分,冲突就回溯换方案。
具体案例:一个差旅 Agent 为“上海 3 日游 + 北京 2 日游”做规划。每步生成 5 个备选行程块,按时间和预算保留前 3,发现某条路线赶不上高铁就回溯,最终输出可执行的逐日行程表。
代码修复Agent的Debug推理
阶段:诊断推理与多假设验证
解决的问题:大模型修 bug 往往一条思路走到黑,改完还是错。ToT 风格的修复流程先生成多个根因假设(候选思维),再用单元测试当评估器,失败的假设立即剪枝,回溯到新假设继续尝试。
具体案例:Agent 面对一个支付回调的偶发超时,同时生成“锁竞争、网络重试、数据库连接泄漏”三条假设,分别给出修复补丁并跑回归测试,只保留通过测试的补丁并继续向下排查。
科研Agent的实验设计
阶段:假设空间探索
解决的问题:科研 Agent 一次性给出实验方案容易偏狭,错过更好的技术路线。ToT 让 Agent 在“实验变量、模型选择、评估指标”各层分别生成多个方案,用可行性和文献支持度评估,剪掉不靠谱的分支。
具体案例:一个论文复现 Agent 面对“小样本场景下微调 vs 提示词工程”,生成多条技术路线,逐层评估数据和算力代价,回溯后选定混合路线并产出完整实验计划。
Python 演示
class TreeOfThoughts: def __init__(self, n): self.n = n self.solutions = [] self.explored_count = 0 self.pruned_count = 0 def generate_thoughts(self, state): # 思维生成器: 给当前行枚举所有可选列 row = len(state) return [c for c in range(self.n) if c not in state] def evaluate(self, state, thought): # 评估器: 新皇后不能与已有皇后在同一对角线 row = len(state) for r, c in enumerate(state): if abs(r - row) == abs(c - thought): return False return True def search(self, state): # 搜索算法: DFS 深入, 评估不过关就剪枝回溯 if len(state) == self.n: self.solutions.append(state[:]) return for t in self.generate_thoughts(state): self.explored_count += 1 if self.evaluate(state, t): self.search(state + [t]) else: self.pruned_count += 1 def solve(self): self.search([]) return self.solutions if __name__ == "__main__": tot = TreeOfThoughts(4) sols = tot.solve() print("solutions:", len(sols)) print("generated thoughts:", tot.explored_count) print("pruned thoughts:", tot.pruned_count) for s in sols: print(s)
def generate_thoughts(self, state):思维生成器:当前行所有不冲突的列都是候选“侦察方向”。return [c for c in range(self.n) if c not in state]枚举候选列,即一个节点长出多个候选子节点。if abs(r - row) == abs(c - thought):评估器:对角线冲突的摆法直接被判为死路。self.explored_count += 1每生成一个候选思维就计数,对应 ToT 的 LLM 调用开销。if self.evaluate(state, t):评估通过的分支继续深入,这就是树搜索的“扩展”。self.search(state + [t])递归深入下一层,对应 DFS 沿着一条路径往下钻。self.pruned_count += 1评估不通过就剪枝:计数加一,不再向下探索,相当于侦察队撤回岔路口。if len(state) == self.n:到达叶子且满足约束,收获一个完整解。
常见误区
误区“ToT 不就是让模型多生成几遍答案,最后选个最好的吗?Self-Consistency 不就是 ToT 吗?”
正解多采样投票是“自我一致性”,它只在最终答案处投票,没有中间评估、没有剪枝、没有回溯。ToT 的差异在于“搜索”:它要对中间状态评估打分,决定哪些分支继续、哪些剪掉,还可以退回岔路口换路。类比一下:Self-Consistency 是一群登山者各走各的、山顶晒照片;ToT 是一支队伍边走边评估、随时撤回重选。
为何常见:两者都涉及“多个样本”,表面高度相似;初学者容易忽略“中间状态评估 + 搜索”这个关键增量。
误区“只要评估器打分够准,剪枝越狠,搜索越快,效果越好。”
正解评估器是启发式的,不是上帝视角。剪得太狠,可能把“前期看着普通、后期爆发”的好路径提前误杀,这叫“评估偏差导致的搜索失误”。ToT 的剪枝是个权衡:剪少了探索充分但开销大,剪多了省算力但可能漏解。登山队不能因为一条路前面有碎石就断定它不通。
为何常见:人脑天然喜欢“排除法”的爽快感,容易把剪枝等同于优化,忽略了评估器本身带噪声。
误区“ToT 是更先进的范式,以后所有 Agent 任务都应该切换到 ToT。”
正解ToT 只在“任务可分解、中间状态可评估、搜索空间有限”的场景占优,比如 24 点、规划、创作。简单问答或短推理用 ToT 只会平白增加 $k \times T$ 倍的调用成本,CoT 甚至直出答案更快。范式没有绝对先进,只有适配与否:平路不需要侦察队。
为何常见:技术营销口径常把“新范式”包装成“全面升级”,让人忽略了它昂贵的代价和适用边界。
误区“ToT 必须让 LLM 给每个节点投票打分,否则就不算 ToT。”
正解评估器可以是任何函数:规则检查(24 点里剩余数字能否继续运算)、代码测试(修复方案能否通过单元测试)、长度约束等,都属于启发式评估。LLM 投票只是其中一种通用但昂贵的手段。工程落地时,能用规则就用规则,用不了再上模型投票——省钱又稳定。
为何常见:论文里最醒目的演示是模型投票,读者容易把“演示手段”当成“算法必需”。
面试题
Q1. ToT 与思维链 CoT 最本质的区别是什么?
- A.推理链长度更长
- B.多路径搜索择优← 正确答案
- C.模型参数量更大
- D.答案一定更正确
答案:B。CoT 是单条链,一条道走到黑;ToT 在同一决策点生成多个候选思维,评估后择优并支持回溯,本质差异是“搜索”而不是“长度”或“参数”。A 只是表面现象,C 与题目无关,D 是过度承诺。
Q2. 下面哪一项不属于 ToT 的核心组件?
- A.思维生成器采样
- B.状态评估器打分
- C.搜索算法与剪枝
- D.最终答案多数票← 正确答案
答案:D。生成器、评估器、搜索算法是 ToT 的三件套;对“最终答案”做多数投票是自我一致性的做法,ToT 的投票发生在中间状态评估环节,而不是最终答案处。A、B、C 都是 ToT 的组成部分。
Q3. 在 24 点游戏中,评估器让模型对“这条路还有戏吗”投票,三个选项的权重是?
- A.1、0.5、0← 正确答案
- B.2、1、0
- C.1、1、0
- D.0.5、0.5、0
答案:A。“确信 / 可能 / 不可能”对应 1 / 0.5 / 0,加权平均得到状态分数。B 的 2 会过度放大乐观票,C 没有给“可能”留折中空间,D 让“确信”和“可能”完全无差别。
Q4. BFS 剪枝中保留宽度 b 越大,带来的结果通常是?
- A.探索更广但开销更大← 正确答案
- B.剪枝更多且更省算力
- C.一定能找到全局最优
- D.评估器可以省去不用
答案:A。b 越大意味着每一层保留更多状态,探索更充分,但后续生成和评估的模型调用也随之增多。b 大只是降低漏解风险,不能保证全局最优,更不等于可以免掉评估器。B 方向反了,C、D 是绝对化表述。
Q5. 为什么 ToT 比 CoT 更能纠正推理早期出现的错误?
- A.因为它调用了更大的模型
- B.因为它支持回溯换路← 正确答案
- C.因为它生成的文本更长
- D.因为它使用了更多提示词
答案:B。CoT 的错误一旦写入中间步骤就无法撤回,会一路传播放大;ToT 通过评估器发现低分节点后可以剪枝,并回溯到上一个状态重新选择,这是结构化搜索带来的纠错能力,与模型大小、文本长度、提示词数量无关。
Q6. 大模型推理范式的演进顺序正确的是?
- A.直出→CoT→自洽→ToT← 正确答案
- B.ToT→CoT→直出→自洽
- C.CoT→直出→ToT→自洽
- D.自洽→直出→CoT→ToT
答案:A。演进脉络是:直接输出 → 思维链 CoT → 自我一致性(多路径投票)→ Tree of Thoughts(搜索式推理)。B、C、D 的顺序都不符合这条从单链到多路、再到搜索式推理的发展史。
Q7. ToT 落地时最主要的开销瓶颈是什么?
- A.推理时的显存占用
- B.大量重复的模型调用← 正确答案
- C.训练阶段的标注成本
- D.模型参数的存储空间
答案:B。ToT 里每个候选思维的生成和每个状态的评估都各是一次模型调用,总量约为 $O(k \cdot T \cdot b)$,比 CoT 高一个数量级以上。显存、训练标注、参数存储与 ToT 的推理范式没有直接关系。
Q8. 下列哪些任务更适合用 ToT 解决?
- A.简单的事实性问答
- B.24 点数学推理游戏← 正确答案
- C.创意写作的提纲规划← 正确答案
- D.电商评论情感分类
答案:BC。ToT 适合“可分解、中间状态可评估”的任务。24 点按步骤合成数字、创意写作先规划提纲再展开,都是经典场景;简单问答和情感分类用直出或 CoT 更快,上 ToT 纯属浪费。
Q9. 关于 ToT 中的剪枝,下列说法正确的是?
- A.可以缩小搜索空间← 正确答案
- B.评估器太激进可能误剪← 正确答案
- C.剪枝后不需要再搜索
- D.剪枝依赖状态评估分数← 正确答案
答案:ABD。剪枝的作用就是砍掉低分分支、缩小搜索空间(A 对);评估是启发式的,可能把好路径误判成死路(B 对);剪枝后仍需对保留节点继续生成和搜索,不是一剪了之(C 错);剪枝的依据正是评估器给出的分数(D 对)。
Q10. 以下哪些可以作为 ToT 状态评估器的实现方式?
- A.规则式的启发打分← 正确答案
- B.模型投票打分← 正确答案
- C.训练价值模型打分← 正确答案
- D.随机猜测的方式打分
答案:ABC。评估器可以手写规则(如剩余数字能否运算)、用模型按“确信 / 可能 / 不可能”投票,也可以训练价值函数直接预测状态好坏。随机打分不带任何信息量,无法指导搜索方向,不能作为评估器使用。