CoT 是一条线——一旦走错,整条链报废。但很多问题(创意写作、谜题、长程规划)不止一条思路,需要「试几条、比一比、走不通就回头」。思维树(ToT)就是把推理从「线」推广到「树」;思维图(GoT)更进一步,推广到「图」——节点之间可以合并、循环、复用。
回顾 CoT 的形态:它是一条单向线性的推理链。
[CoT] 想法1 → 想法2 → 想法3 → 答案
这种结构有三个根本局限:
| 局限 | 表现 | 后果 |
|---|---|---|
| 无分支 | 只有一条思路 | 错过更优解 |
| 无评估 | 中间步骤不被打分 | 走到错路也不知 |
| 无回溯 | 走错无法回头 | 一步错步步错 |
对于「答案唯一、路径明确」的任务(如数学计算),CoT 够用。但对于「多解、需探索、需比较」的任务(如「写一首关于秋天的诗,要用隐喻」),单链 CoT 会困在第一条思路里,错过更好的可能性。
💡 ToT 的核心洞察:人类解决开放性问题时,不是一条路走到底,而是**「试探多条路径、评估可行性、走最优的、走不通就回退」**。ToT 把这个人类思维机制显式地建模进 LLM。
Yao 等人 2023 年提出的 ToT,把推理建模为一棵搜索树。一棵 ToT 需要 four 个要素:
| 要素 | 含义 | 实现 |
|---|---|---|
| 思维分解(Thought Decomposition) | 把推理拆成多步「思维状态」 | Prompt 让 LLM 一次生成一步 |
| 思维生成器(Thought Generator) | 从当前状态生成多个候选下一步 | 采样多次或一次生成多个 |
| 状态评估器(State Evaluator) | 给每个候选状态打分 | LLM 评分(多数投票或数值) |
| 搜索算法(Search Algorithm) | 在状态树上搜索 | BFS 或 DFS |
把问题拆成多步推理的关键,是定义「一步思维」的粒度:
| 任务类型 | 一步思维是什么 |
|---|---|
| 数学题 | 一次运算 |
| 创意写作 | 一段或一句 |
| 谜题 | 一次推理或一步操作 |
| 规划 | 一个子任务 |
粒度太粗,搜索空间小但可能错过细节;粒度太细,搜索爆炸。粒度匹配任务,是 ToT 设计的关键。
从当前状态生成多个候选下一步。两种方式:
| 方式 | 做法 | 优点 |
|---|---|---|
| 采样式 | 同一 Prompt 采样 N 次 | 多样性高 |
| 提议式 | 一次 Prompt 让 LLM 给 N 个候选 | 节省调用 |
给每个候选状态打分,决定保留哪个、淘汰哪个。两种评估方式:
| 方式 | 做法 |
|---|---|
| 数值评估 | 让 LLM 给状态打 1-10 分 |
| 投票评估 | 让 LLM 在多个候选里选「最可能成功的」 |
⚠️ 评估器是 ToT 的瓶颈。ToT 的每一步都要调用 LLM 生成 + 评估,调用次数是 CoT 的几十倍。一个低质量评估器会让搜索在错误方向上浪费大量算力。ToT 的效果上限,由评估器的质量决定。
ToT 通常用两种经典搜索:
| 算法 | 策略 | 适用 |
|---|---|---|
| 广度优先 BFS | 每层保留 top-k,逐层深入 | 浅而宽的问题 |
| 深度优先 DFS | 一条路走到底,走不通回溯 | 深而窄的问题 |
BFS 的逻辑:
每一层生成 N 个候选 → 评估 → 保留 top-k → 进入下一层 适合: 创意任务(每步有多个等价选择,需横向比较)
DFS 的逻辑:
选一个候选深入 → 评估 → 通过则继续,失败则回溯到上一层换一个 适合: 谜题(路径明确但需试错,失败要快速回退)
「用 1, 4, 5, 6 凑出 24」。CoT 一条路走不通就放弃;ToT 会探索所有运算组合。
[1, 4, 5, 6] / | \ 1+4=5 4+5=9 5+6=11 ... / | \ [5,5,6] [1,9,6] [1,4,11] / \ / \ / \ 5*5=25 5+6=11 ... ... ... 1*4=4 ✗ ↓ ↓ [5,5,11] [4,11] ... ... ↓ 发现 6/(1-5/4)=24 ✓
ToT 在 24 点这类「组合爆炸」任务上远胜 CoT——因为答案路径不唯一,必须搜索。
ToT 的强大不是免费的。它的代价:
| 代价 | 量级 |
|---|---|
| LLM 调用次数 | CoT 的 10-100 倍 |
| 延迟 | 分钟级(CoT 是秒级) |
| 成本 | 显著上升 |
| 实现复杂度 | 高(需搜索框架、评估器) |
因此 ToT 的适用场景明确:
| 场景特征 | 是否用 ToT |
|---|---|
| 答案唯一、路径明确(数学) | ❌ CoT 够用 |
| 简单事实问答 | ❌ 浪费 |
| 创意任务、多解问题 | ✅ 优势明显 |
| 组合爆炸(谜题、调度) | ✅ 必需 |
| 长程规划、需探索 | ✅(但常与任务分解结合) |
⚠️ ToT 不是「更强的 CoT」。ToT 与 CoT 解决的是不同类型的问题。把 ToT 用在简单任务上,是把大炮打蚊子——既贵又不讨好。ToT 的真正价值在「探索空间大、最优解稀疏」的开放性问题。
ToT 是树——节点之间不共享子节点,不能合并。但很多推理需要图结构:
思维图(Graph of Thoughts, GoT) 把 ToT 的树推广为图,支持节点之间的任意连接:
GoT 的关键操作:
| 操作 | 含义 | 场景 |
|---|---|---|
| 聚合(Aggregation) | 多个节点合并为一个 | 多条推理汇成结论 |
| 细化(Refinement) | 对某节点迭代改进 | 逐步打磨答案 |
| 回溯(Backtracking) | 回到上游节点 | 走错了换路径 |
GoT 在需要「多次迭代改进 + 多路汇合」的任务上比 ToT 更强,如长文写作、复杂方案设计。但实现复杂度也更高,工业落地相对少。
💡 从 CoT 到 ToT 到 GoT 的演进:本质是把 LLM 的推理结构从「线 → 树 → 图」逐步泛化,模拟人类越来越复杂的思维模式。但结构越复杂,工程成本越高。生产实践中,CoT 仍是绝对主流,ToT 用于特定开放任务,GoT 多见于研究。
值得强调:ToT/GoT 是纯思维的探索——LLM 在「想」的空间里搜索,不调用工具、不行动。这与第 4 章的 ReAct 不同:ReAct 是「想一步、做一步」,每步都涉及真实世界。
两者可以结合:LATS(Language Agent Tree Search) 就是 ReAct + ToT 的融合——让 Agent 在「想+做」的复合空间里树搜索。这是 3.4 节与第 4.3 节会展开的主题。
| 范式 | 想的空间 | 做的空间 | 搜索 |
|---|---|---|---|
| CoT | 线性 | 无 | 无 |
| ToT | 树形 | 无 | 有 |
| ReAct | 线性 | 有(工具调用) | 无 |
| LATS | 树形 | 有(工具调用) | 有 |
下一节《3.3 任务分解策略》将讨论如何把复杂长程任务拆成小任务——这是处理「规模大、步骤多」类问题的关键工具。