0Pricing
AI Prompt Engineering · 课时

思维树探索

分支展开并评估思路。

思维树探索 是 CoddyKit 上的免费 AI Prompt Engineering 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 AI Prompt Engineering 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 AI Prompt Engineering 课程共包含 4 节课。

从推理链到思维树

思维树(ToT,Yao 等人,2023)将思维链从单条线性路径推广为由部分解组成的搜索树。每个节点都是连贯的中间思路;各个分支探索不同的后续方向。

这使模型能够进行深思:生成多个后续步骤,评估这些步骤,保留有希望的步骤,并从死胡同回溯,从而模仿系统化的问题解决过程,而不是直接确定第一个想法。

class ThoughtNode:
    def __init__(self, state, parent=None):
        self.state = state      # partial solution / reasoning so far
        self.parent = parent
        self.children = []
        self.value = None       # evaluator score

ToT 的四个组件

ToT 系统有四项设计选择:思路分解(什么算作一步)、思路生成器(如何提出后续步骤)、状态评估器(如何评估部分解),以及搜索算法(BFS、DFS 或最佳优先搜索)。

每一项都是单独的提示或策略。设计 ToT 意味着要针对您的任务明确这四项内容。

tot = {
    'decompose': step_definition,   # e.g. one equation, one move
    'generate':  propose_thoughts,  # sampling or proposal prompt
    'evaluate':  score_state,        # value/vote prompt
    'search':    bfs_with_beam,      # BFS | DFS | best-first
}

生成候选思路

有两种生成策略:在适中的温度下采样多个彼此独立的思路(适用于思路空间丰富的情况),或者在一次提示中提出一组各不相同的后续步骤(适用于希望明确得到不同选项的情况)。

请使用较小的分支因子(通常为 3 到 5);候选过多会导致搜索空间和成本急剧膨胀。

def propose_thoughts(state, k=4):
    prompt = (
        'Given the partial solution below, propose ' + str(k) +
        ' DISTINCT possible next steps.\n' + state
    )
    return parse_list(llm(prompt, temperature=0.7))

评估状态

状态评估器使 ToT 不只是随机采样。它通过价值提示(将该状态对解决问题的帮助程度评为 1 到 10)或投票提示(这些状态中哪个最有希望)来评估部分解的潜力。

对候选项进行投票通常比绝对评分更稳健,因为模型更容易做相对判断。

def score_state(state):
    prompt = (
        'Rate how likely this partial solution leads to a correct '
        'final answer. Reply sure / likely / impossible.\n' + state
    )
    label = llm(prompt, temperature=0).strip().lower()
    return {'sure': 1.0, 'likely': 0.5, 'impossible': 0.0}.get(label, 0.3)

使用束搜索的 BFS

广度优先的 ToT 每次将所有前沿节点扩展一层,然后仅保留评估器得分最高的前 b 个节点(即一个束)。这样可以在并行探索多条路径的同时,限制搜索空间的膨胀。

束宽 b 在探索广度与成本之间进行权衡;对于结构化谜题,深度为 3、束宽为 5 是常见的起始设置。

def bfs_with_beam(root, depth, branch, beam):
    frontier = [root]
    for _ in range(depth):
        nxt = []
        for node in frontier:
            for t in propose_thoughts(node.state, branch):
                child = ThoughtNode(node.state + '\n' + t, node)
                child.value = score_state(child.state)
                nxt.append(child)
        frontier = sorted(nxt, key=lambda n: -n.value)[:beam]
    return max(frontier, key=lambda n: n.value)

使用回溯的 DFS

深度优先的 ToT 会沿最有希望的分支深入,并在评估器认定某个状态没有希望时回溯。这适用于能够清楚判断部分状态是否可行的问题,例如约束谜题。

尽早剪枝掉不可能的分支是提高效率的主要方式,可以避免无谓地扩展注定失败的子树。

def dfs(node, depth, branch, prune=0.2):
    if depth == 0 or is_solution(node.state):
        return node
    for t in propose_thoughts(node.state, branch):
        child = ThoughtNode(node.state + '\n' + t, node)
        child.value = score_state(child.state)
        if child.value < prune:
            continue                      # backtrack: prune dead end
        res = dfs(child, depth - 1, branch, prune)
        if res and is_solution(res.state):
            return res
    return None

ToT 与自洽性

自洽性会对彼此独立的完整推理链进行采样并投票。ToT 则通过中间评估和回溯主动引导探索,将计算资源投入到有希望的方向上。

ToT 在需要规划、搜索,或早期错误会导致失败的问题上表现出色(24 点游戏、填字游戏、规划问题)。对于多样化推理链成本较低且答案离散的任务,自洽性更简单,通常已经足够。

# Rule of thumb
# - reachable by diverse single passes  -> self-consistency
# - needs lookahead / pruning / backtrack -> tree-of-thought
# ToT cost ~ branch * depth * beam * (gen + eval) LLM calls

成本膨胀与预算

ToT 成本高昂:每个节点都会产生生成调用和评估调用。总成本大致随分支数 × 深度 × 束宽增加,此外还要加上评估器调用。如果没有严格的预算,成本可能急剧膨胀。

请限制 LLM 调用总数,使用最佳优先搜索将预算花在价值最高的前沿节点上,并在预算耗尽时退回到最佳部分解。

import heapq

def best_first(root, max_calls):
    heap = [(-root.value, root)]
    best, calls = root, 0
    while heap and calls < max_calls:
        _, node = heapq.heappop(heap)
        for t in propose_thoughts(node.state, 3):
            calls += 1
            child = ThoughtNode(node.state + '\n' + t, node)
            child.value = score_state(child.state); calls += 1
            if child.value > best.value:
                best = child
            heapq.heappush(heap, (-child.value, child))
    return best

评估器的可靠性

ToT 的效果不会超过其评估器的效果。校准不佳的评估器可能剪掉正确分支,或追逐无效方向。您可以通过投票(对每个状态进行多次评估)、提供优秀状态和糟糕状态的少样本示例,或使用外部验证器(单元测试、求解器、检查器)来改进它。

如果存在客观检查(例如方程是否成立、代码是否通过),应优先使用客观检查,而不是 LLM 判断。

def robust_eval(state, votes=3):
    scores = [score_state(state) for _ in range(votes)]
    return sum(scores) / votes        # average to reduce judge noise
# Even better: replace with a deterministic verifier when available

实际适用性

ToT 适用于一类范围狭窄但有价值的问题:多步骤规划、组合谜题,以及验证一步比解决全部问题更便宜的任务。对于大多数日常提示而言,ToT 都是过度设计。

对于内置搜索能力很强的原生推理模型,明确的 ToT 框架通常会增加成本,却不会带来多少收益;采用前请先进行基准测试。

def choose_strategy(task):
    if task.requires_search and task.step_verifiable:
        return 'tree-of-thought'
    if task.discrete_answer:
        return 'self-consistency'
    return 'single chain-of-thought'

一个最小化的 ToT 求解器

端到端流程如下:定义一步,提出一小组思路,使用投票或验证器评估每个思路,在调用预算内通过 BFS 束搜索或 DFS 回溯进行搜索,并返回最佳终止状态。

记录节点数量和评估器得分,以便针对每项任务根据经验调整分支数、深度和束宽。

def solve(problem, branch=4, depth=3, beam=5, budget=200):
    root = ThoughtNode(problem)
    root.value = score_state(root.state)
    node = bfs_with_beam(root, depth, branch, beam)
    return extract_solution(node.state)

快速检查

选择正确的深思策略。

回顾

关键要点:

  • ToT 将 CoT 推广为搜索树,其中包含思路生成、状态评估和搜索算法。
  • 请使用带束的 BFS 或带回溯的 DFS;保持较小的分支因子,以控制搜索空间膨胀。
  • 状态评估器是核心;请通过投票或外部验证器增强其可靠性。
  • 成本按分支数 × 深度 × 束宽增加,因此应强制执行调用预算,通常可以通过最佳优先搜索实现。
  • 请将 ToT 保留给规划类、组合类且步骤可验证的问题;对于日常提示而言,它属于过度设计。

常见问题解答

「思维树探索」课时是免费的吗?

是的 — 「思维树探索」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 AI Prompt Engineering 课程的其余内容,请升级到 CoddyKit PRO。 AI Prompt Engineering 课程共包含 4 节课。

「思维树探索」这节课中我会学到什么?

分支展开并评估思路。 你通过在浏览器中直接运行的动手代码来练习 AI Prompt Engineering,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 AI Prompt Engineering 需要有经验吗?

无需任何先前经验。CoddyKit 上的 AI Prompt Engineering 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「思维树探索」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 AI Prompt Engineering 课中编写并运行代码吗?

能。每节 AI Prompt Engineering 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 思维链提示
  2. 自洽性采样
  3. 思维树探索
  4. 推理提示何时有帮助
← 返回 AI Prompt Engineering