尽管像 ReAct 这样的框架擅长以序列方式交织推理和行动,但当面对需要考虑多种可能性或大量回溯的问题时,它们有时会显得不足。复杂的任务通常涉及搜索空间,其中最佳路径并非显而易见,单一的推理路径可能导致死胡同。在这种情况下,思维树(ToT)架构提供了一个有力的替代方案。ToT 明确地将问题解决过程建模为在推理步骤(或称“思维”)树中的查找。ToT 不会在每一步都只依赖于单一的思维或行动,而是允许代理生成多个潜在思维,评估它们的价值,并有策略地检查推理树中最可行的分支。这种方法与人类解决问题的方式相似,我们在进行下一步之前通常会考虑多种选择。思维树的核心机制ToT 过程可以分解为在树状结构中管理的几个不同操作,该结构通常表示为图 $G=(V, E)$,其中节点 $V$ 是状态(表示部分解决方案或中间思维),边 $E$ 表示基于生成的思维在状态之间的转换。思维生成: 在树中的任何给定节点(状态),会提示大型语言模型(LLM)生成多个($k$)不同的潜在下一步或延续。这些“思维”代表了从当前状态处理问题的不同方式。例如,如果解决一个数学问题,不同的思维可能对应于应用不同的定理或代数运算。提示可能明确要求多种多样的延续。状态评估: 每个生成的思维都会引向一个新的潜在状态。ToT 的一个重要组成部分是评估这些状态质量或前景的能力。这种评估引导搜索过程。评估可以通过以下方式进行:LLM 自我评估: 提示 LLM 分配一个分数(例如,1-10分制)或对状态进行分类(例如,“有前景”、“可能死胡同”、“已完成”)。这需要精心设计的评估提示。启发式方法: 设计针对具体问题的启发式方法,根据诸如朝着目标前进的程度、约束满足情况或估计的剩余工作量等标准来评估状态。外部反馈: 如果可能,使用外部工具或模拟器来验证状态(例如,运行生成的代码,检查知识库)。搜索算法: 有了生成的思维和评估过的状态,搜索算法会查看这棵树。常见的选择包括:广度优先搜索(BFS): 逐层搜索树。它系统性强,但如果分支因子($k$)较大,计算成本可能会很高。深度优先搜索(DFS): 在回溯之前,会深入搜索一个分支。如果某个特定路径存在解决方案,它可以更快地找到,但可能会陷入次优分支。集束搜索(Beam Search): 一种启发式搜索,它在每个层级只保留前 $b$ 个最有前景的状态,其余的则进行剪枝。这平衡了搜索广度与计算成本。A* 搜索: 利用启发式估计来优先查找看起来更接近目标的节点。需要一个明确的成本函数和启发式方法。搜索会持续进行,直到达到目标状态,资源(如计算预算或最大深度)耗尽,或没有有前景的分支剩余。graph G { layout=dot; rankdir=TB; node [shape=ellipse, style=filled, fontname="Arial", fontsize=10]; edge [fontname="Arial", fontsize=9]; // 节点(思维/状态) Root [label="初始问题", fillcolor="#a5d8ff"]; T1A [label="思维 1A\n(评估: 0.8)", fillcolor="#b2f2bb"]; T1B [label="思维 1B\n(评估: 0.5)", fillcolor="#ffec99"]; T1C [label="思维 1C\n(评估: 0.2, 已剪枝)", fillcolor="#ffc9c9", shape=box]; // 已剪枝 T2A1 [label="思维 2A.1\n(评估: 0.9)", fillcolor="#b2f2bb"]; T2A2 [label="思维 2A.2\n(评估: 0.7)", fillcolor="#c0eb75"]; T2B1 [label="思维 2B.1\n(评估: 0.6)", fillcolor="#ffe066"]; Goal [label="找到解决方案", shape=doubleoctagon, fillcolor="#96f2d7"]; // 边(转换) Root -- T1A; Root -- T1B; Root -- T1C; T1A -- T2A1; T1A -- T2A2; T1B -- T2B1; T2A1 -- Goal; }思维树查找过程的简化表示。节点代表从思维派生出的状态,颜色表示评估分数(绿色=高,黄色=中,红色=低/已剪枝),搜索会朝着目标状态推进。优点与应用场景ToT 显著增强了代理应对以下类型问题的能力:需要进行查找: 具有广泛搜索空间或需要创意解决方案的问题(例如,头脑风暴、数学发现、像下棋这样的复杂规划)。自我修正有益: 评估步骤使得代理能够辨识前景不佳的路径并回溯,避免了线性推理中固有的承诺错误。审慎思考能改善结果: 考虑多个观点或中间解决方案会带来更好最终结果的任务。与 ReAct 的线性思维-行动循环相比,ToT 允许在提交行动或结束推理步骤之前进行并行查找和明确的替代方案比较。它通过将 LLM 生成多样文本的固有能力构建为对可能推理链空间进行的搜索问题,从而提供了一种结构化的管理方式。专家实践者实施时的考量有效实施 ToT 需要仔细考虑几个方面:提示设计: 制作有效的提示来生成多样化的思维($k$ 个选项)并准确评估状态质量并非易事。提示需要清晰定义每一步的任务(生成 vs. 评估)以及所需的输出格式。计算开销: 与线性方法相比,在每一步生成和评估多个思维会大幅增加 LLM 调用次数。这会影响延迟和成本。像集束搜索($b < k$)或基于评估分数进行激进剪枝的策略对于应对这种复杂性是必不可少的。状态表示与管理: 有效存储树结构、节点状态(可以是冗长的文本)、评估分数和已访问路径很重要。根据规模,这可能涉及内存数据结构或外部存储。启发式方法开发: 启发式搜索策略(集束搜索、A*)的成功很大程度上取决于状态评估函数的质量。开发针对问题领域量身定制的、有效且计算成本低的启发式方法通常是一项重要的工程难题。停止标准: 定义何时停止搜索非常重要。这可能是达到最大深度或节点数量,找到满足特定条件的解决方案,或耗尽计算预算。思维树代表了 LLM 代理在实现更审慎推理方面迈出的一大步。通过将中间推理步骤的生成和评估构建为搜索过程,ToT 使代理能够处理超出简单线性架构的复杂问题。尽管计算上更为密集,但它查找、评估和回溯的能力使其成为需要精密问题解决能力的任务的宝贵工具。