想象你带队爬一座从未登顶的山。新手时期的 AI 像个莽撞的登山者,问题一抛出去就闷头往上冲,一口气爬到哪算哪;后来它学会边走边在观景台停下来,把“接下来怎么走”默念一遍,这是思维链;再后来,一群登山者各走各的路线,最后在山顶互相晒照片、投票选出最一致的风景,这是自我一致性。可这些做法本质上都只有“一条路线”。真正专业的登山队完全不同:在每一个岔路口,队长会派出多名侦察兵同时探索好几条支线,用望远镜评估哪条更有希望,发现死路就立刻撤回岔路口换一条再试。这支“边走边搜、随时掉头”的探险队,就是本文的主角——Tree of Thoughts(思维树,简称 ToT)。它是 Agentic AI 推理范式从“单链推理”迈向“搜索式推理”的关键一跃,让大模型从“一口气答到底”变成“像下棋一样掂量多条路再落子”。

岗位关联

掌握这条范式演进的脉络,你就读懂了 Agent 从“会答”走向“会想”的底层逻辑;在做 Agent 系统设计时,能根据任务复杂度选出最划算的推理增强方案,这正是高级 AI 研发者的核心判断力。

目录
  1. 可视化演示
  2. 范式演进脉络
  3. 核心思想理念
  4. 思维树构建
  5. 搜索与评估
  6. 对比CoT优势
  7. 典型应用
  8. 落地挑战
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

交互展示树状推理结构、搜索策略对比和性能提升,理解Agent如何探索多条推理路径并择优

本节配有交互动效(进入视口后自动加载,约 3KB)。

树状推理 每步生成多个思维分支 探索多条推理路径 从单链推理到搜索式推理

范式演进脉络

先说一段登山史。最早的登山者不看地图,问题抛出去就闷头往上冲——这是模型直接吐答案。后来人们学乖了,每走一段就在观景台停下来,把“接下来怎么走”在心里默念一遍——这就是思维链(Chain of Thought,简称 CoT)。再后来,一群人各走各的路,到了山顶互相晒照片投票,取最多人看到的风景——这叫做自我一致性(Self-Consistency)。可是这些做法本质上都只有一条路线:要么一条道走到黑,要么各走各的互不商量。

真正专业的登山队不是这样。他们在每个岔路口派出侦察兵,同时探索多条支线,评估哪条更靠谱,发现死路就撤回重选。这个从“走单线”到“搜路网”的转变,正是 Agentic AI 推理范式的一次关键跃迁,催生了本文的主角:Tree of Thoughts(思维树,简称 ToT)。它把“一次想到底”升级为“多想几条、边走边挑”。

在 ToT 之前,主流的推理增强方式可以画成一条单向直线:

登山队的历史,就是 ToT 的诞生史:从独自盲冲,到边走边确认,再到多路分兵、投票汇总,最后进化为“搜索一整片路网”。

x→z1→z2→⋯→zT→yx \rightarrow z_1 \rightarrow z_2 \rightarrow \cdots \rightarrow z_T \rightarrow y
这就是思维链 CoT 的模样:从问题出发,一步步写下中间思考,最后抵达答案,全程不能回头。
  1. 输入 $x$代表用户提出的问题,比如“从 A 城到 B 城怎么走最省时”。
    xx
  2. 中间思维 $z_i$模型逐步写下的推理小片段,像登山路上一个个观景台的确认记录。
    zi, i=1,2,…,Tz_i,\ i=1,2,\dots,T
  3. 输出 $y$沿着这条唯一路径走到头的最终答案。
    yy
  4. 单向箭头 $\rightarrow$表示“只能往后、不能回头”的推进方式,这正是 CoT 与 ToT 最根本的分野。
    si→si+1s_i \rightarrow s_{i+1}

核心思想理念

队伍到了岔路口,队长不会只让一个人探路,而是把“接下来怎么办”拆成一个个决策点,在每个决策点上摊开一张“选择地图”。地图上不是一条线,而是很多条候选线,每条线都标注着队伍当前到达的位置——这就是 ToT 的核心:把推理过程变成一棵可以查阅、比较、放弃的树。

ToT 把一个复杂问题拆成若干“思维步”。每一步产生的候选想法叫一个思维碎片(thought);从问题出发,每追加一个思维碎片,队伍就到达一个新状态;状态就是树上的节点。树上的每个节点都是一种“走到一半的答案”,比如旅行规划里的“第三天上午在博物馆”。

用状态更新来记录这个推进过程:

队长地图上的每一面小旗,就是一个状态;每添一面旗,队伍就来到一个新决策点。整张“选择地图”,就是一棵不断生长的思维树。

st+1=st+[zt]s_{t+1} = s_t + [z_t]
通俗地说:ToT 把“想了一步之后来到哪里”记成一个状态,每追加一个新想法,状态就前进一步,树的枝干就多长出一截。
  1. 状态 $s_t$第 $t$ 步时的部分解,也就是队伍此刻所在决策点及走过的路线集合。
    st=[x,z1,…,zt]s_t = [x, z_1, \dots, z_t]
  2. 思维 $z_t$这一步产生的新想法,相当于从当前决策点派出的一个侦察方案。
    ztz_t
  3. 追加操作 $[\,]$把新思维接到历史序列末尾,组成新的状态。
    st+1=st+[zt]s_{t+1} = s_t + [z_t]

思维树构建

侦察兵如何出发?假设队伍停在一个决策点,队长下令:“给我 5 条探路方案。”于是 5 个侦察兵各选一个方向出发,各自带回“前方有多远、路况如何”的报告。这些报告,就是候选思维;每个方向,就是树上新长出的一个分支。

在 ToT 里,“派出侦察兵”由大模型完成。给定当前状态 $s_t$,模型被要求连续生成 $k$ 个互不相同的候选想法,而不是只生成一个——这 $k$ 个想法就成为当前节点的 $k$ 个子节点。分叉数 $k$ 和树的深度 $T$ 共同决定了思维树长得是“矮胖”还是“高瘦”。比如 24 点游戏把问题拆成 3 步,那么深度 $T=3$,每一步生成 $k=5$ 个候选算式。

思维生成可以写成从条件分布中采样:

分叉系数 $k$ 是“一个决策点派几个侦察兵”,深度 $T$ 是“最多探几层”。侦察兵太多会人挤人拖慢速度,太少会漏掉好路——选好 $k$ 和 $T$,是搭建思维树的第一道手艺。

z(j)∼pθ(z∣st),j=1,2,…,kz^{(j)} \sim p_{\theta}\bigl(z \mid s_t\bigr), \quad j = 1, 2, \dots, k
通俗地说:让大模型当“侦察兵教官”,给定当前状态,让它独立给出 $k$ 个各不相同的候选想法。
  1. 条件模型 $p_\theta$大语言模型,也就是那个能根据已有信息“脑补”下一步的知识库。
    pθ(z∣st)p_{\theta}(z \mid s_t)
  2. 采样符号 $\sim$从所有可能想法中按概率抽出一个,每次抽到的可能都不同。
    z(j)∼pθz^{(j)} \sim p_{\theta}
  3. 分叉数 $k$一次生成多少个候选,对应派出几个侦察兵。
    j=1,2,…,kj = 1, 2, \dots, k

搜索与评估

侦察兵带回一堆报告,队长得先判断哪些值得继续——这是评估;再决定先看哪一层、深入还是回头——这是搜索。评估是“给每条路打分”,搜索是“决定怎么逛这棵树”。

评估器(evaluator)给每个状态打分。打分可以是规则式的,比如 24 点游戏里检查“剩余数字还有没有办法继续运算成一个数”;也可以让模型投票:让模型对“这条路能走通吗”回答“确信 / 可能 / 不可能”,分别记 1、0.5、0 分,再取平均。

投票评估的公式如下:

有了分数,就轮到搜索策略上场。广度优先搜索(BFS)像“整层整层地扫”,每层只保留分数最高的 $b$ 个节点继续向下长;深度优先搜索(DFS)像“逮着一条路钻到底”,撞了南墙就退回上一个岔路口换一条。BFS 的剪枝选择可以写成:

评估像望远镜,搜索像队形调度。望远镜看得准、队形调得巧,登山队才能既不错过好路,又不把体力耗在死胡同里。

v(st)=nsure+0.5×nlikelymv(s_t) = \frac{n_{\text{sure}} + 0.5 \times n_{\text{likely}}}{m}
通俗地说:把当前考察名单里的每个状态都向下长一层新分支,合在一起,按分数排序,只留下前 $b$ 名继续探索。
  1. 当前前沿 $S_t$搜索进行到第 $t$ 层时,还在“考察名单”里的状态集合。
    St={st(1),st(2),… }S_t = \{s^{(1)}_t, s^{(2)}_t, \dots\}
  2. 生成子状态 $\mathrm{Gen}(s)$对名单里每个状态派出侦察兵,长出一批子节点。
    Gen(s)={s+[z(j)]}\mathrm{Gen}(s) = \{s + [z^{(j)}]\}
  3. 保留前 $b$ 名 $\mathrm{Top}_b$按评估分数排序,只留下 $b$ 个最有希望的状态。
    St+1=Topb(⋅)S_{t+1} = \mathrm{Top}_{b}(\cdot)

对比CoT优势

独行侠和侦察队有什么差别?独行侠走错一步,只能将错就错;侦察队走错一条支线,撤回岔路口换一条就行。这个差别,决定了 ToT 在复杂任务上的四个关键优势。

一是探索与利用的平衡:ToT 先广撒网(探索)再深耕(利用),CoT 却只有一条道走到黑;二是纠错能力:评估发现死路就回溯,CoT 无法收回已经写下的错误步骤;三是全局决策:用“望远镜”看未来几步,避免只顾眼前利益;四是代价——探索是要花钱的:分叉越多,模型调用越多。

一棵满思维树能覆盖的理论路径数,是分叉数的深度次方:

一句话总结:CoT 是“认准一条路”,ToT 是“拥有一整片路网”。路网越大,越不容易被困死,但养这支侦察队的成本也越高。

∣paths∣=kT|\text{paths}| = k^{T}
通俗地说:每层 $k$ 个分叉、共 $T$ 层,完整路线就有 $k^T$ 条;而 CoT 只走其中的 1 条。
  1. 分叉数 $k$每个节点产生几个候选子思维。
    kk
  2. 树的深度 $T$从根到叶子一共几层。
    TT
  3. 路径总数 $k^T$理论上可供选择的完整路线条数。
    kT≫1k^T \gg 1

典型应用

什么样的山值得派侦察队?答案是:难走、可分几步、中间能判断好坏的山。ToT 论文里最有名的三座山是 24 点游戏、创意写作和迷你填字游戏,它们分别对应数学推理、开放生成和长程规划三类任务。

以 24 点为例:任务被拆成 3 步,每步把两个数合成一个新数。第一步,模型生成 5 个候选算式(比如从 1、2、3、4 里选两个数做加法得 3),评估器投票判断“这三个中间结果还有没有可能凑出 24”,BFS 每层只保留最好的 5 个状态。创意写作则先让模型写 5 个不同的提纲,评估后选最优提纲,再逐段生成正文;长程规划任务更适合 DFS 配合“前瞻”——先试探性地多看几步再决定是否深入。

当搜索确定最优状态后,最后一步是让模型从该状态产出完整成品:

无论是数字的岩壁、文字的峡谷还是规划的平原,共同点是:拆得开、评得出、搜得动。不具备这三点的任务,派侦察队就是杀鸡用牛刀。

y∼pθ(y∣sT)y \sim p_{\theta}\bigl(y \mid s_{T}\bigr)
通俗地说:侦察队锁定了最终路线,队长才下令全员出发,把完整的答案或作品一气呵成地写出来。
  1. 最优状态 $s_T$经过评估与搜索锁定的最理想终点状态。
    sTs_T
  2. 条件生成 $y$基于该状态生成最终答案或成品。
    y∼pθ(y∣sT)y \sim p_{\theta}(y \mid s_T)

落地挑战

侦察队也有烦恼:人多粮多、队长可能看走眼。把 ToT 放进真实 Agent 系统,会迎面撞上三个现实问题。

一是计算成本:每生成一个候选思维、每做一次评估,都是一次大模型调用,ToT 的调用量比 CoT 高一个乃至几个数量级;二是评估设计:打分规则往往要针对任务手写,“确信 / 可能 / 不可能”这套投票在通用场景容易失效;三是与 Agent 融合:Agent 框架要编排生成器、评估器和搜索器,并决定什么时候值得切换到 ToT——简单任务用 CoT 更快,复杂任务才上 ToT。

成本的量级可以粗略估算为:

未来方向也很清晰:把评估器训练成价值模型、引入蒙特卡洛树搜索(MCTS)、让树深和分叉数自适应。侦察队的望远镜会越来越准,队形会越来越灵活,但“评估决定搜索质量”这条铁律不会变。

Cost=O(k⋅T⋅b)\text{Cost} = O\bigl(k \cdot T \cdot b\bigr)
通俗地说:ToT 的代价大约等于“分叉数 × 深度 × 宽度”次模型调用,比 CoT 的一次到底贵得多。
  1. 深度 $T$树的层数,每层都要做一轮生成与评估。
    TT
  2. 分叉 $k$ 与宽度 $b$每层要生成 $k$ 个候选、保留 $b$ 个。
    k⋅bk \cdot b
  3. 总调用量 $O(k \cdot T \cdot b)$粗略估计的大模型调用次数量级。
    O(k⋅T⋅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 演示

python45 行
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)
目的:用四皇后问题演示 ToT 的“生成器—评估器—搜索器”三件套框架:每一行是一个思维层,枚举所有可选列是思维生成,对角线冲突检查是评估器,DFS 加回溯就是树搜索与剪枝。
  1. def generate_thoughts(self, state):思维生成器:当前行所有不冲突的列都是候选“侦察方向”。
  2. return [c for c in range(self.n) if c not in state]枚举候选列,即一个节点长出多个候选子节点。
  3. if abs(r - row) == abs(c - thought):评估器:对角线冲突的摆法直接被判为死路。
  4. self.explored_count += 1每生成一个候选思维就计数,对应 ToT 的 LLM 调用开销。
  5. if self.evaluate(state, t):评估通过的分支继续深入,这就是树搜索的“扩展”。
  6. self.search(state + [t])递归深入下一层,对应 DFS 沿着一条路径往下钻。
  7. self.pruned_count += 1评估不通过就剪枝:计数加一,不再向下探索,相当于侦察队撤回岔路口。
  8. 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 最本质的区别是什么?

单选题 · easy

  • A.推理链长度更长
  • B.多路径搜索择优← 正确答案
  • C.模型参数量更大
  • D.答案一定更正确

答案:B。CoT 是单条链,一条道走到黑;ToT 在同一决策点生成多个候选思维,评估后择优并支持回溯,本质差异是“搜索”而不是“长度”或“参数”。A 只是表面现象,C 与题目无关,D 是过度承诺。

Q2. 下面哪一项不属于 ToT 的核心组件?

单选题 · easy

  • A.思维生成器采样
  • B.状态评估器打分
  • C.搜索算法与剪枝
  • D.最终答案多数票← 正确答案

答案:D。生成器、评估器、搜索算法是 ToT 的三件套;对“最终答案”做多数投票是自我一致性的做法,ToT 的投票发生在中间状态评估环节,而不是最终答案处。A、B、C 都是 ToT 的组成部分。

Q3. 在 24 点游戏中,评估器让模型对“这条路还有戏吗”投票,三个选项的权重是?

单选题 · mid

  • 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 越大,带来的结果通常是?

单选题 · mid

  • A.探索更广但开销更大← 正确答案
  • B.剪枝更多且更省算力
  • C.一定能找到全局最优
  • D.评估器可以省去不用

答案:A。b 越大意味着每一层保留更多状态,探索更充分,但后续生成和评估的模型调用也随之增多。b 大只是降低漏解风险,不能保证全局最优,更不等于可以免掉评估器。B 方向反了,C、D 是绝对化表述。

Q5. 为什么 ToT 比 CoT 更能纠正推理早期出现的错误?

单选题 · hard

  • A.因为它调用了更大的模型
  • B.因为它支持回溯换路← 正确答案
  • C.因为它生成的文本更长
  • D.因为它使用了更多提示词

答案:B。CoT 的错误一旦写入中间步骤就无法撤回,会一路传播放大;ToT 通过评估器发现低分节点后可以剪枝,并回溯到上一个状态重新选择,这是结构化搜索带来的纠错能力,与模型大小、文本长度、提示词数量无关。

Q6. 大模型推理范式的演进顺序正确的是?

单选题 · easy

  • A.直出→CoT→自洽→ToT← 正确答案
  • B.ToT→CoT→直出→自洽
  • C.CoT→直出→ToT→自洽
  • D.自洽→直出→CoT→ToT

答案:A。演进脉络是:直接输出 → 思维链 CoT → 自我一致性(多路径投票)→ Tree of Thoughts(搜索式推理)。B、C、D 的顺序都不符合这条从单链到多路、再到搜索式推理的发展史。

Q7. ToT 落地时最主要的开销瓶颈是什么?

单选题 · mid

  • A.推理时的显存占用
  • B.大量重复的模型调用← 正确答案
  • C.训练阶段的标注成本
  • D.模型参数的存储空间

答案:B。ToT 里每个候选思维的生成和每个状态的评估都各是一次模型调用,总量约为 $O(k \cdot T \cdot b)$,比 CoT 高一个数量级以上。显存、训练标注、参数存储与 ToT 的推理范式没有直接关系。

Q8. 下列哪些任务更适合用 ToT 解决?

多选题 · mid

  • A.简单的事实性问答
  • B.24 点数学推理游戏← 正确答案
  • C.创意写作的提纲规划← 正确答案
  • D.电商评论情感分类

答案:BC。ToT 适合“可分解、中间状态可评估”的任务。24 点按步骤合成数字、创意写作先规划提纲再展开,都是经典场景;简单问答和情感分类用直出或 CoT 更快,上 ToT 纯属浪费。

Q9. 关于 ToT 中的剪枝,下列说法正确的是?

多选题 · hard

  • A.可以缩小搜索空间← 正确答案
  • B.评估器太激进可能误剪← 正确答案
  • C.剪枝后不需要再搜索
  • D.剪枝依赖状态评估分数← 正确答案

答案:ABD。剪枝的作用就是砍掉低分分支、缩小搜索空间(A 对);评估是启发式的,可能把好路径误判成死路(B 对);剪枝后仍需对保留节点继续生成和搜索,不是一剪了之(C 错);剪枝的依据正是评估器给出的分数(D 对)。

Q10. 以下哪些可以作为 ToT 状态评估器的实现方式?

多选题 · mid

  • A.规则式的启发打分← 正确答案
  • B.模型投票打分← 正确答案
  • C.训练价值模型打分← 正确答案
  • D.随机猜测的方式打分

答案:ABC。评估器可以手写规则(如剩余数字能否运算)、用模型按“确信 / 可能 / 不可能”投票,也可以训练价值函数直接预测状态好坏。随机打分不带任何信息量,无法指导搜索方向,不能作为评估器使用。