将结构化推理视为搜索
语言模型仍然是一个词元接一个词元地生成。搜索会在模型外加一层控制器,决定下一次调用模型做什么、保留哪个局部结果,以及何时停止。一条链只保留一条后续路径。束会在同一深度保留多条路径。树可以回头尝试其他分支,图还可以复用或合并先前的工作。模型在每一种结构中仍然逐词元生成,搜索过程只是在这些生成操作之间分配模型调用。
本章只讨论推断时控制。一次请求期间,提议模型的权重可以保持不变,但这并不表示整套系统无需训练。局部状态评分器、价值模型或结果模型可能经过单独训练。把这条边界讲清楚,才能避免把提示驱动的树搜索和经过训练的 AlphaZero 式系统视为同一种方法。
搜索问题需要明确接口
把中间文本叫作「思考」,还不足以定义一个搜索问题。控制器需要一套针对任务的接口:
| 组件 | 必须作出的决定 | 示例 |
|---|---|---|
| 状态表示 | 哪些信息必须足以支持后续决策? | 完整提示与轨迹、符号棋盘、程序及测试结果 |
| 扩展函数 | 如何提出合法或可信的后继状态? | 采样 个思考单元、枚举工具动作、应用改写规则 |
| 前沿策略 | 下一个把工作分配给哪个尚未扩展的节点? | 广度优先、深度优先、束搜索、最佳优先、蒙特卡洛树搜索 |
| 局部状态评估器 | 如何比较尚未完成的状态? | 提示所得的置信度、习得价值、可采纳的启发式函数、局部检查器 |
| 终止测试 | 什么条件表示状态已经完成? | 答案分隔符、完整证明、已经执行完的行动计划 |
| 最终选择器 | 返回哪个已经完成的候选? | 先作精确检查再按效用排序、习得分数、人工审查、弃答 |
| 停止规则 | 何时必须停止扩展? | 已验证成功、节点上限、词元上限、墙钟截止时间 |
状态是用来预测有效延续和结果的任务信息。搜索节点则是记账结构,还可以保存父节点指针、入边动作、深度、路径成本、分数和访问次数。不同节点可能表示同一个状态。控制器尝试合并重复工作时,这一区别尤其重要。
设 为请求, 为初始状态, 为一个思考单元大小的动作, 为后继状态。提议分布 根据模型参数 给出状态 下可能采取的动作,并不决定扩展哪个搜索节点。这个选择由前沿策略作出。
设 为预算 耗尽前实际接受评估的终止状态集合。理想目标可以写成
其中 是终止状态 未知的任务质量, 是按这种质量衡量时,已评估状态中的最佳者。写出这个目标,并不会让理想目标变得可执行。部署中的控制器只能使用任务实际提供的证据。若存在可观测的终止状态检查器 ,并可选地定义效用 ,控制器就可以选择
这里, 表示 满足检查器编码的验收条件, 对通过验收的状态排序, 是最终返回的状态。没有精确检查器时,最终选择器可以采用习得估计或提示估计,也可以使用投票或人工审查。这些都只是质量的较弱观测,并不能取代 。答案投票是候选集合的属性,也不是施加于单个终止状态的验证器。
分支会迅速耗尽预算
如果每个非终止状态都产生 个子节点,搜索一直到最大深度 ,完整树的节点数为
这里, 是过滤提议后的有效分支因子, 是最大深度, 是深度编号, 统计根节点和所有生成节点。当 、 时,总数是 87,381 个节点。这里的 不是模型词表的大小,而是扩展函数在每个节点实际接纳的思考单元或动作数量。上式统计的是全部生成节点。
束宽限制的是保留状态数,不一定限制提议数,以下记作 。假设每个保留状态恰好产生 个互不相同的子节点,而且没有状态提前终止,那么在 时,生成节点数至多为
第一次扩展产生 个节点,之后每一层最多扩展束宽 个状态。这个线性上界使束搜索具备实用性,但它并不能保证有效路径仍留在束中。较小的 通过不可逆剪枝控制工作量。
只数词元也会漏掉一部分成本。更完整的总工作量可以写成
其中, 是预算 内生成状态与动作扩展的集合, 是接受评分的状态集合, 是接受检查的终止状态集合,三个 项表示各自的实测成本。生成成本取决于前缀长度、输出长度、缓存复用和批处理。用提示实现的评估器可能需要另一次解码;可执行检查器每次调用或许很便宜,开发起来却可能很贵。有空余容量时,并行调用可以缩短墙钟时间,但并不会减少 。
不同前沿策略舍弃的东西不同
「树搜索」指的是一种数据结构,不是一种特定算法。前沿规则决定系统会探索什么,又可能失去什么。
| 策略 | 下一个节点 | 主要优点 | 重要限制 |
|---|---|---|---|
| 一条链 | 唯一保留的延续 | 控制器开销最低 | 一次早期选择就会排除所有其他路径 |
| 广度优先 | 最浅的节点,通常使用先进先出队列 | 分支有限时可以找到浅层解 | 前沿内存会指数增长;只有每步成本相同时才具备成本最优性 |
| 深度优先 | 最深的节点,通常使用后进先出栈 | 前沿较小,也便于自然回溯 | 没有限制时,可能无限沿着错误或循环分支前进 |
| 束搜索 | 当前深度得分最高的 个状态 | 每层宽度有界,容易批处理 | 错误剪枝使其不完备,通常也不保证最优 |
| 最佳优先 | 所有深度中优先级最高的节点 | 只要启发式分数可跨状态比较,就能把工作集中到最有希望的位置 | 不同深度的分数必须含义一致;糟糕的启发式可能让其他路径一直得不到探索 |
| 蒙特卡洛树搜索 | 根据访问次数和估计回报选出的节点 | 在反复探索和利用之间取得平衡 | 需要有意义的轨迹展开(rollout)或叶节点价值,并要反复回传结果 |
广度优先和深度优先搜索不需要习得价值。束搜索和最佳优先搜索需要。蒙特卡洛树搜索(MCTS)会反复执行选择、扩展、叶节点评估或模拟,以及结果回传。UCT 常用的一种选择形式为 (Kocsis and Szepesvári 2006)
这里, 是状态 当前可选的动作集合, 是动作 回传后的平均回报, 是状态 的访问次数, 是该动作的访问次数, 控制探索奖励。实现还必须强制尝试或以其他方式处理尚未访问的动作。AlphaZero 式 PUCT 会加入提议策略的先验,不是换了名字的最佳优先搜索。
经典保证依赖一些语言模型控制器经常违背的假设。广度优先搜索的完备性要求分支有限,而且解位于有限深度。最优图搜索要求转移正确、目标测试正确,并满足相应的成本或启发式条件。动作来自采样、预算有限、分数由模型习得或束会剪枝时,这些保证都会消失。算法名称本身无法恢复这些保证。
被剪掉的分支无法挽回
下面这个可运行示例故意使用具有误导性的局部状态启发式。fast 分支在两个可见状态上的分数都更高,最后却失败。patient 分支起初分数较低,但能到达唯一经过验证的解。
GRAPH = {
"start": [("fast", 0.90), ("patient", 0.70)],
"fast": [("dead_end", 0.95)],
"patient": [("bridge", 0.60)],
"bridge": [("solution", 1.00)],
}
VERIFIED = {"dead_end": False, "solution": True}
def beam_search(width):
frontier = [("start", ["start"], 0.0)]
while frontier:
candidates = []
for state, path, _ in frontier:
if VERIFIED.get(state, False):
return path
for child, heuristic in GRAPH.get(state, []):
candidates.append((child, path + [child], heuristic))
frontier = sorted(
candidates,
key=lambda item: item[2],
reverse=True,
)[:width]
return None
for width in (1, 2):
path = beam_search(width)
result = "no verified solution" if path is None else " -> ".join(path)
print(f"width={width}: {result}")
输出为 width=1: no verified solution 和 width=2: start -> patient -> bridge -> solution。束宽为一时,搜索选择 fast,一旦剪掉,就无法回到那个备选分支。束宽为二时,两条分支会保留到终止状态检查器足以区分它们为止。更宽的束可以提高候选覆盖率,也会增加工作量。只有当扩展函数提出了有用分支,而且局部状态评估器没有过早将其删除时,增加宽度才会有帮助。
这里的「图」有两种含义
状态空间图和思维工作流解决的是不同问题。
在图搜索中,不同路径到达同一个任务状态的情况称为转置。控制器可以用已到达状态表,避免重复扩展这个状态。但前提是存在规范状态键,而且这个键保留了所有会影响后续动作与结果的信息。同一段文本可能对应不同的隐藏状态,因为工具版本、文件、数据库内容、权限或先前的副作用可能不同。反过来,两段措辞不同的轨迹也可能表示同一个符号状态。因此,仅按表面文本合并并不安全。带环的状态空间还需要循环检测、关闭集或明确的重新开放规则。
思维图(Graph of Thoughts, GoT)所说的「图」更接近广义数据流。顶点表示思考单元,边可以表示生成、聚合、精炼或反馈 (Besta et al. 2024)。后续操作可以同时使用两个先前结果,但并不声称它们是等价状态。论文中的系统使用人工设计的操作图,以及针对任务的提示、解析器和评分器。在为这些变换挑选的四项任务上,包括排序基准、集合求交、关键词计数和文档合并,定制的 GoT 调度优于论文所报告的适配基线。这些结果支持在相应任务中以程序化方式组合中间结果,但不能证明它能自动做语义合并,也不能证明它是通用图搜索算法。
价值引导押注于局部证据
对于轨迹展开策略 ,理想状态价值为
其中, 是当前状态, 是按 继续执行后到达的终止状态, 是终止回报,期望则对提议或环境结果中的随机性取平均。提示所得的置信分数、局部过程分数和剩余路径成本估计,并不会自动估计同一个量,其尺度也可能随深度漂移。
设控制器观测到
其中, 是按控制器目标衡量的真实延续价值, 是观测分数, 是评估器误差。搜索会选择最高的观测分数,因此也会选中异常偏大的正误差。控制器比较的状态越多,或越激进地优化同一个评分器,这种选择偏差就越重要 (Gao et al. 2023)。在普通轨迹上校准的评分器,面对更深搜索产生的前缀时也可能落入分布外。错误剪枝则是相反的问题:某个状态的价值被低估,在延迟收益显现之前就遭到删除。
提示驱动的自我评估可以说明这种依赖关系。自我评估引导的随机束搜索使用同一个语言模型,但分别采用生成提示和评估提示,再把步骤置信度与模型似然结合起来 (Xie et al. 2023)。它改善了论文报告的算术任务结果,但在常识任务上,预算匹配后的结果并非始终更好。这项研究表明局部评分可以引导束搜索,不是模型能准确核查自身工作的证据。
已发表的系统不能混为一谈
一些有影响力的系统都采用生成器与评估器循环,但控制器和训练假设并不相同。
| 系统 | 实际增加的机制 | 证据范围 |
|---|---|---|
| Tree of Thoughts | 针对任务设计的思考单元、提议提示、状态评估,以及广度优先或深度优先遍历 | 在 24 点、创意写作和迷你填字游戏上报告了收益;提示和评估器调用都是方法的一部分 (Yao et al. 2023) |
| Reasoning via Planning | 在 MCTS 中使用语言模型提出动作并模拟转移,再结合针对任务的奖励 | 在选定的规划、算术和逻辑推理任务上评估;语言模型充当的「世界模型」仍可能预测出错误转移 (Hao et al. 2023) |
| TS-LLM | 采用经过训练的策略、价值和结果奖励组件进行 AlphaZero 式搜索;迭代版本还会更新策略 | 位于推断控制与额外任务训练的边界,并不只是固定模型上的提示方法 (Wan et al. 2024) |
| ReAct | 一条交错包含推理、动作和观察的轨迹 | 外部观察会约束后续步骤,但 ReAct 本身并不是搜索算法,除非另有控制器保留备选并回头尝试 (Yao et al. 2023) |
Tree of Thoughts 不能证明树搜索在任意任务上都优于重复采样。它在 24 点上的结果很突出,但这项任务会给出紧凑的中间等式,可以在完成前判断。GoT 同样选择了适合聚合与精炼的任务。TS-LLM 展示了经过训练的评论器能提供什么,但这些评论器越过了本章开头划定的训练边界。
AlphaEvolve 提供了一个相关但范围更广的例子。它对程序作评估器引导的演化搜索,并不是在自然语言思考上运行束搜索或 MCTS。其白皮书报告了一个对 复矩阵做乘法的秩 48 程序,以及一项 Borg 调度启发式。Google 报告后者平均释放了相当于全机群 0.7% 的算力 (Novikov et al. 2025)。自动化评估使这些搜索可以真正执行,但这些结果不能证明语言树搜索普遍更优。
如何运行搜索控制器
生产实现不能只有一个算法名称,还需要以下约束:
- 定义状态结构、合法动作结构、规范化规则、终止测试和最终输出约定。拒绝让无法解析的状态进入前沿。
- 在将要使用评估器的控制器所生成的状态上校准。只用直接回答组成的留出集,无法衡量评估器面对深层、经过选择的前缀时会如何表现。
- 在预算匹配的评估中比较直接生成、重复采样、Best-of- 和结构化搜索。对齐生成词元总量、评分器调用、检查器调用、模型版本和可用并发容量,并单独报告延迟。
- 为节点数、深度、生成词元、工具调用、费用、内存和墙钟截止时间设置硬上限。只有任务约定允许时,才在验证成功后提前停止。
- 明确定义空前沿、解析失败、评估器超时、没有终止状态通过验收,以及检查器相互冲突时的回退策略。服务可以返回直接回答、弃答或升级处理,但不能让选择隐含在实现里。
使用工具的搜索还需要一条边界:推测性分支不应提交不可逆的外部副作用。检查应在沙箱或事务中运行;只读探索要与经过批准的写入分开;幂等调用则要去重。
每次请求的遥测应记录提示与模型版本、控制器与评估器版本、扩展次数、生成词元数、各深度的前沿大小、去重率、评估器分数、检查器结果、所选路径、停止原因、回退路径、总工作量和延迟。离线分析应分别衡量候选覆盖率、所选答案准确率、错误剪枝、选择遗憾、每个通过验收答案的成本,以及尾部延迟。
不存在与任务无关的赢家。当完整解答生成成本低、差异足够大,又能接受精确检查时,重复采样很难被击败。Brown 等人发现,理想选择器下的候选覆盖率可能继续上升,习得评分或多数选择却趋于停滞,此时选择而不是生成成了瓶颈 (Brown et al. 2024)。当局部状态能提供有用反馈,而且早期剪枝能节省大量后续工作时,结构化搜索才会更有吸引力。
预算匹配可能改变排行榜。Snell 等人发现,Best-of- 与过程奖励引导的搜索,会随问题难度和预算变化而分别占优 (Snell et al. 2025)。Katz 等人展示了另一条边界:在经典规划任务中,让语言模型编写符号化的后继函数和目标测试代码,再运行传统搜索,可能比在每个节点调用语言模型更高效,也更容易分析 (Katz et al. 2024)。因此,搜索是否可靠、完备或最优,必须回到实际实现的转移、目标测试、启发式和剪枝规则来判断。借用经典算法的名称并不够。
搜索会消耗生成词元、评分器调用、检查器调用、内存和墙钟延迟。第 31 章 决定了多少分支能够真正并行运行,而不损害批处理效率或尾部延迟。这条约束也会向上作用。如果 第 27 章 无法提供可靠的中间证据,更宽的搜索只会制造更多让评估器犯错的机会。在这种情况下,较简单的候选采样器配合强终止状态检查器,可能是更好的系统。
搜索是一层算力分配机制。提议模型给出可能的动作,控制器决定工作投向哪里,评估器改变哪些分支能够存活,检查器则决定什么证据足以停止搜索。下一章会改变状态表示本身,把一部分工作从自然语言轨迹移到程序、求解器和证明检查器中。
延伸阅读
- Besta et al., “Graph of Thoughts: Solving Elaborate Problems with Large Language Models,” 2024. arXiv:2308.09687Graph of Thoughts 将链式和树式提示推广为由大语言模型生成 thought 构成的任意图,使中间推理单元能够被聚合、精炼和反馈。
- Besta et al., “Reasoning Language Models: A Blueprint,” 2025. arXiv:2501.11223本文以蓝图形式统一推理语言模型组件,涵盖链、树、图、MCTS、束搜索、价值模型、过程监督、测试时算力、工具和智能体系统。
- Ke et al., “A Survey of Frontiers in LLM Reasoning: Inference Scaling, Learning to Reason, and Agentic Systems,” 2025. arXiv:2504.09037本文从推断时与训练时机制、单体模型与智能体复合系统两个维度组织 LLM 推理研究,覆盖提示、选择、强化学习、验证器和智能体工作流。
- Novikov et al., “AlphaEvolve: A Coding Agent for Scientific and Algorithmic Discovery” (用于发现的生成器与评估器循环), 2025. arXiv:2506.13131AlphaEvolve 根据人类提供的评估代码演化程序;入选结果仍需按应用接受留出测试、专家、硬件或部署检查。
评论
登录后评论