思维树ToT如何让Agent在决策树中搜索最优路径

来源:安卓教程作者:韦伯头衔:草根站长
导读:本期聚焦于小伙伴创作的《思维树ToT如何让Agent在决策树中搜索最优路径》,敬请观看详情。把大语言模型生成答案的过程从单链推理改成多分支探索,思维树框架让智能体在每一步都保留若干候选思路并向前评估。传统链式提示只能走一条路,遇到需要规划或回溯的谜题容易卡死。ToT把问题拆成多个思考步骤,每个步骤形成树状节点,用价值函数或投票筛选有希望的分支,再沿决策树向下搜索直到得出结果。这种方式明显提升了复杂任务里的成功率,也让Agent具备类似人类试错与反思的能力。理解它的状态扩展、路径评估和搜索算法,是落地自主决策系统的关键。

思维树(Tree of Thoughts,简称ToT)是一种面向大语言模型智能体的推理框架,它把传统的线性思维链扩展成可分支、可回溯的树状搜索结构。在ToT中,Agent不再一次性生成最终答案,而是把问题求解过程分解为一系列中间思考步骤,每一步都产生多个候选“思维”,这些思维作为决策树上的节点,经过评估后保留有潜力的分支继续扩展,从而在解空间中寻找最优路径。

思维树ToT如何让Agent在决策树中搜索最优路径

ToT的基础结构与决策树建模

在ToT框架里,最核心的概念是“思维”和“状态”。状态表示当前问题求解到了哪一步,而思维是从当前状态出发、对下一步推进的自然语言描述。例如解决一个数学应用题时,一个思维可能是“先设未知数为x,再列方程”。框架会把每个状态衍生出的多个思维组织成树的子节点,从而构成一棵决策树。与普通的蒙特卡洛树不同,ToT的节点内容是大模型生成的自然语言片段,而不是棋类游戏里的落子坐标。

为了把问题映射到树上,通常需要定义四个组件:思维分解函数、思维生成器、状态评估器以及搜索算法。思维分解函数决定一个问题要切成几步;思维生成器在每一步基于当前状态产出k个候选思维;状态评估器给每个到达的状态打分,判断它离答案有多近;搜索算法如广度优先或深度优先,决定先扩哪一层、何时剪枝。下面给出一个简化的伪代码,展示如何初始化一棵树并做一层扩展:

# 思维树节点定义
class ToTNode:
    def __init__(self, state, thoughts=None, parent=None):
        self.state = state          # 当前问题状态描述
        self.thoughts = thoughts    # 本节点对应的思维文本
        self.parent = parent        # 父节点引用
        self.children = []          # 子节点列表
        self.value = 0.0            # 状态评估分数

# 初始化根节点并生成第一层思维
root = ToTNode(state="题目:鸡兔同笼共35头,94脚,求鸡几只")
candidate_thoughts = generator.propose(root.state, k=3)
for t in candidate_thoughts:
    child = ToTNode(state=root.state + " | 思维:" + t, thoughts=t, parent=root)
    root.children.append(child)

上述结构让Agent能够显式地维护多条推理线索。当某条线索在后续评估中得分过低,就可以放弃它,把计算资源留给更有希望的路径。这种建模方式比单链推理更贴合人类解题时的“岔路思考”,也便于在程序中实现回溯机制。

状态评估与分支筛选机制

决策树若无限扩展会耗尽上下文和算力,因此ToT依赖评估器来筛选分支。常见的做法有两种:一种是让模型自身当评委,对每个状态输出“可行、可能、不可能”这类标签;另一种是用一个独立的提示词要求模型给状态打0到1之间的置信度分数。评估可以发生在每个思维生成之后,也可以只在树的某一层统一进行。经过评估,只保留分数排名前b的节点进入下一轮,这就是宽度限制(beam width)的基本思想。

为了让筛选更稳,不少实现会引入多次投票。比如对同一个状态让大模型投票三次,取多数意见作为该节点的价值。这样做能降低随机性带来的误判。下面的代码片段演示了如何用投票方式给节点打分,并只保留高分节点:

def evaluate_with_vote(node, voter_prompt, rounds=3):
    scores = []
    for i in range(rounds):
        # 让模型判断该状态是否通向正确解
        label = llm_call(voter_prompt.format(node.state))
        if "可行" in label:
            scores.append(1.0)
        elif "可能" in label:
            scores.append(0.5)
        else:
            scores.append(0.0)
    node.value = sum(scores) / len(scores)

# 只保留 Beam Width = 2 的节点
evaluate_with_vote(root.children[0], voter_prompt)
evaluate_with_vote(root.children[1], voter_prompt)
evaluate_with_vote(root.children[2], voter_prompt)
survivors = sorted(root.children, key=lambda n: n.value, reverse=True)[:2]

分支筛选直接决定了搜索效率和成功率。如果评估器太宽松,树会膨胀;太严格,则可能过早剪掉正确路径。在实践中,往往需要根据任务难度动态调整beam width,并对接近终点的状态做更细的评估。相比于人类凭直觉放弃思路,ToT把这种筛选过程变成了可复现、可观测的程序逻辑。

搜索算法与最优路径求解

在树建好、评估器就位后,就要靠搜索算法把最优路径找出来。ToT论文里对比了几种经典方法:广度优先搜索(BFS)每层只留最好的b个节点,适合步骤少但每步分支多的任务;深度优先搜索(DFS)则一条路走到底再回溯,适合需要长链条推理的场景。此外还可以接入蒙特卡洛树搜索(MCTS),用模拟 rollout 的方式估计节点长期价值,不过开销也更大。

以BFS为例,每一轮先从当前活节点集合里取出所有节点,各自生成子思维,然后统一评估并截断到b个。当某个节点被评估为“已得出最终答案”或达到最大深度,就停止扩展。最后从叶子往回溯源到根,得到的思维序列就是Agent搜到的最优路径。下面给出一个BFS主循环的简化实现:

def bfs_search(root, max_depth=5, beam_width=2):
    frontier = [root]
    for depth in range(max_depth):
        next_frontier = []
        for node in frontier:
            if is_solved(node.state):
                return trace_path(node)
            children = expand(node)      # 生成并接子节点
            for c in children:
                evaluate_with_vote(c, voter_prompt)
            next_frontier.extend(children)
        next_frontier.sort(key=lambda n: n.value, reverse=True)
        frontier = next_frontier[:beam_width]
    return trace_path(frontier[0])

def trace_path(node):
    path = []
    while node:
        path.append(node.thoughts)
        node = node.parent
    return list(reversed(path))

搜索算法选择会影响Agent的行为特质。BFS更保守,不易走偏但可能漏掉需绕远的答案;DFS敢深挖,却可能困在错误分支里。工程上常把二者结合,比如先用DFS探路,失败就回退到BFS层。ToT的真正价值,正是把“在决策树中搜索最优路径”这件事从模糊的提示词技巧,变成了有结构、可干预的系统能力,让Agent在复杂决策里不再裸奔。

Tree_of_ThoughtsLLM_Agentdecision_search修改时间:2026-08-15 14:06:31

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。