Tree of Thought
Tree-of-Thought(ToT,Yao et al., 2023;也常被称为 Tree of Thoughts)的核心是:把“解题过程”从一条线性的思维链(CoT)变成一棵可搜索的树。
- CoT:通常只生成“一条”推理路径,走错了就容易一路错下去。
- ToT:每一步不是只想一个下一步,而是同时生成多个候选“想法/步骤(thoughts)”,然后评估每个候选的质量,选择最有希望的分支继续扩展,反复迭代,直到找到满意解。
这让 ToT 特别适合 需要搜索与规划 的任务:例如谜题、组合优化、写作大纲、复杂决策、多方案权衡、路线规划、代码修复(多种修复方案)等。
1) ToT 的基本流程(把它当“分支 + 打分 + 继续搜索”)
一个典型 ToT 循环包含 4 件事:
- 定义状态(state):当前已经得到的部分解/当前进度
- 生成多个候选 thoughts:从当前状态往前走 3~5 个不同的下一步
- 评估 thoughts:用一个“评估提示词”给每个候选打分/分类(可行、部分可行、不可行)
- 选择并扩展:选 top-k 个继续生成下一层 thoughts(形成树)
工程上常见两种搜索策略:
- BFS/束搜索(beam search):每层保留评分最高的 k 个分支
- DFS/回溯:沿一个分支走到底,不行就回退换分支
2) ToT 提示词怎么写:至少需要“两类 Prompt”
ToT 往往不是一个提示词就完事,而是一个“脚本化流程”,至少包括:
- 生成器 Prompt(Generator):产生多个候选步骤/想法
- 评估器 Prompt(Evaluator):评价这些候选哪几个值得继续
如果你没有工具编排(比如你只是在聊天窗口里),也可以用“单次提示词模拟 ToT”:让模型在一次输出里完成“多分支 + 评估 + 选择 + 继续扩展”。但工程上更常见的是多轮调用。
3) 可复制的 ToT 提示词模板(中文)
模板A:单次输出模拟 ToT(初学者易用)
你将使用“树状思考(Tree-of-Thought)”来解决问题。
要求:
1) 先给出 3 个不同的候选思路/下一步(记为 Thought A/B/C),每个用 1-3 句话说明。
2) 然后用明确标准对每个 Thought 进行评估(可行性/是否接近目标/风险),并给出 0-10 分。
3) 选择得分最高的一个 Thought 继续展开:再生成下一层 2-3 个子 Thought,并再次评估与选择。
4) 重复上述“生成-评估-选择”至少 2 轮。
5) 最后输出最终方案/答案,并简要说明为什么选择这条路径。
问题:{在此粘贴问题}
模板B:更工程化(生成器 + 评估器分离)
生成器 Prompt
你是候选步骤生成器。给定【问题】和【当前状态】,
请生成 {n} 个不同的下一步(thought),每个 thought 必须是可执行的具体动作或推理步骤。
输出格式:
- Thought 1: ...
- Thought 2: ...
...
【问题】:{problem}
【当前状态】:{state}
评估器 Prompt
你是评估器。给定【问题】【当前状态】和若干候选 thoughts,
请对每个 thought 评分(0-10)并给出一句理由。
评分标准:是否推进目标、是否可行、是否引入矛盾/遗漏约束。
最后选出 top-{k} 个最值得继续扩展的 thought 编号。
【问题】:{problem}
【当前状态】:{state}
【候选 thoughts】:
{thoughts}
4) 实际例子:用 ToT 做“规划类任务”(旅行规划)
问题:
“我在上海,周末两天想带父母轻松游玩:人少、步行少、吃得清淡。预算 1500 元内。请给出行程。”
用 ToT 的价值:这不是一个“唯一正确答案”,而是要在约束下搜索更优解(人少/步行少/清淡/预算)。
示例提示词(用模板A)
你将使用树状思考(Tree-of-Thought)来做规划。
约束:
- 两天周末
- 人少、步行少
- 饮食清淡
- 预算≤1500
- 需要包含:交通建议、用餐建议、每半天安排一个主要活动
按“生成3个Thought→评估→选择→再生成下一层→评估→选择”至少两轮,最后给出最终行程。
问题:我在上海,周末两天想带父母轻松游玩:人少、步行少、吃得清淡。预算1500元内。请给出行程。
模型的 ToT 风格输出通常会像:
- 第一层 Thought:
A 走“郊区自然+温泉”;B 走“市内博物馆+江边轻松”;C 走“古镇+茶馆” - 评估:根据人流、步行量、交通折腾程度、饮食可控性打分
- 选择最高分(比如 B)继续细化到第二层(具体地点组合)
- 再评估选最优组合,最后形成完整行程
这就是 ToT:先发散,再收敛。
5) 再举一个更“搜索味”的例子:谜题/组合(适合 ToT)
任务:
“给定 4 个数字 1、3、4、6,用加减乘除和括号得到 24。”
CoT 可能一条路走到黑;ToT 会:
- 第一层生成 3-5 种组合法方向(先乘、先除、先括号等)
- 评估哪种更接近 24(比如中间结果是否能到 24 或其因子)
- 继续扩展最有希望的分支,直到找到表达式
你可以用模板A直接让模型“多分支搜索”,通常成功率更高。
6) 什么时候 ToT 特别有效(你引用的“search & planning”)
ToT 最擅长的场景特征:
- 路径很多:有大量可能步骤/方案(写作结构、产品方案、排程)
- 容易走错:单一路径容易陷入死胡同(谜题、推理、调参)
- 需要权衡:多个目标与约束(成本/质量/风险/时间)
- 需要探索:先发散创意再收敛选择(营销创意、故事大纲)
7) 初学者落地建议(简单但很关键)
- 控制分支数:每层 3 个 thoughts 通常足够;太多会冗长。
- 明确评估标准:不然“评分”会很主观、不可复现。
- 保留 top-2:很多任务保留一个备选分支能显著提升成功率。
- 加停止条件:例如“达到可执行方案/满足约束/找到精确答案就停止”。
如果你给我一个你正在做的具体任务(比如“写一份商业计划书大纲”“一道逻辑题”“一个代码 bug 怎么修”),我可以用 ToT 给你定制:
- 分支数量 n、保留 k
- 评估标准表
- 以及一套可直接复制的生成器/评估器 Prompt。你想用 ToT 解决什么问题?