记忆点:CoT 是一条推理链,ToT 是可搜索、可剪枝、可回溯的状态树。
💡 答案要点
Tree of Thoughts(思维树) = 探索式推理,可回溯的思维过程
CoT vs ToT:
| 维度 | Chain of Thought | Tree of Thoughts |
|---|---|---|
| 结构 | 线性链 | 树形结构 |
| 探索 | 单一路径 | 多路径并行 |
| 回溯 | 不支持 | 支持回溯修正 |
| 适用 | 简单推理 | 复杂规划/决策 |
工作流程:
问题
│
┌────┼────┐
思路1 思路2 思路3 (生成多个初步想法)
│ │ │
评估 评估 评估 (模型自评每个想法的质量)
│ × │ (淘汰低分想法)
┌──┼──┐ ┌─┼─┐
步骤1 步骤2 步骤1 步骤2 (继续展开)
...示例任务:24点游戏
给定数字: 4, 5, 6, 10
目标: 用+/-×÷凑成24
ToT推理过程:
Level 1: 生成可能的第一步
- 想法1: 10 - 6 = 4 [评分: 7/10]
- 想法2: 6 × 4 = 24 ✓ [评分: 10/10] ← 直接成功!
- 想法3: 5 + 4 = 9 [评分: 5/10]
选择想法2: 6 × 4 = 24,还需用到5和10
Level 2:
- (6 × 4) ÷ (10 - 5) = 24 / 5 ✗
- 回溯,尝试想法1...ToT关键机制:
Thought Generation(想法生成)
- 为每个状态生成k个候选下一步
- 可以是采样或提议
Thought Evaluation(想法评估)
- 让模型对每个想法打分
- "这个想法能解决问题的概率: 1-10分"
Search Strategy(搜索策略)
- BFS(广度优先): 探索所有分支
- DFS(深度优先): 深入单一路径
- Beam Search: 保留top-k路径
性能对比:
| 任务 | IO Prompt | CoT | ToT | 提升 |
|---|---|---|---|---|
| 24点游戏 | 4% | 4% | 74% | +70% |
| 创意写作 | 12% | 21% | 56% | +44% |
| Mini Crossword | 14% | 25% | 78% | +64% |
实现框架:
python
class TreeOfThoughts:
def __init__(self, model, k=3, max_depth=5):
self.model = model
self.k = k # 每层保留top-k想法
self.max_depth = max_depth
def generate_thoughts(self, state):
"""生成k个候选想法"""
prompt = f"当前状态: {state}\n请给出{self.k}个可能的下一步:"
thoughts = self.model.generate(prompt, n=self.k)
return thoughts
def evaluate_thoughts(self, thoughts):
"""评估每个想法的质量"""
scores = []
for thought in thoughts:
prompt = f"评估这个想法的质量(1-10分): {thought}"
score = self.model.evaluate(prompt)
scores.append(score)
return scores
def search(self, problem, strategy='BFS'):
"""搜索最优解"""
# BFS/DFS/Beam Search实现
pass适用场景:
- ✅ 需要规划的任务(博弈、路径规划)
- ✅ 有明确评估标准的任务
- ✅ 允许试错的创意任务
劣势:
- ❌ API调用次数爆炸(可能数十上百次)
- ❌ 实现复杂度高
- ❌ 不适合简单任务
面试话术:
"ToT把CoT的单链推理升级成树形探索。就像下棋时要考虑多种走法并评估,而不是只沿着一条路走到黑。适合复杂规划任务,但成本高,我们只在特定场景用。"
