殊途同归的“树思维”:大模型推理的三条技术路线与演进逻辑

0 阅读20分钟

当Yao等人用深度优先搜索让GPT-4在24点游戏上从4%飙升至74%时,Long的强化学习控制器正默默地在自对弈中进化;而Hulbert仅用一段提示词,就把整个ToT框架塞进了单次对话。

同样指向“树”,三种实现,三种哲学。

2023年,三个独立研究团队几乎同时发现“GPT类模型光靠变大已不够聪明”,并分别用不同方法(搜索/强化学习/提示词)提出了“思维树”解决方案——这不是巧合,而是整个学术界对“大模型需要真正的推理能力”这一共识的集体爆发。

核心依据链条:

天花板证据:GPT-4+思维链在24点游戏上仅4%成功率(Yao, 2023)

时间重合:Yao(5.17)、Long(5.13)、Hulbert(5月)三篇独立工作同时出现

问题同源:都指向CoT无回溯/无探索/无全局评估的致命缺陷

路径各异:分别用经典搜索、强化学习、提示工程解决——说明共识已形成,而非偶然撞车

历史定位:标志着推理时计算(Test-time Computation)成为新Scaling Law的开端

阅读了相关资料感觉很有价值,在此文对比这三条路线的核心思想、本质差异,以及它们共同指向的未来。


一、同根生:三棵树共同回答的问题

在进入差异之前,我们先确认它们为什么都被称为“思维树”。

1.1 思维链的“致命妥协”

思维链(Chain-of-Thought)让模型“逐步思考”,但它的底层实现仍是从左到右的贪心解码:

text

问题 → 步骤1 → 步骤2 → ... → 答案

没有回头路,没有备选方案,没有全局评估。

1.2 三棵树的共同信仰

Yao、Long、Hulbert的工作共享以下核心假设:

共同立场对CoT的批判
思维应作为探索单元CoT在词元级别探索,ToT在“想法”级别探索
必须支持回溯人类解题会试错、会回头,模型也应如此
需要全局评估机制局部最优≠全局最优
搜索空间应显式建模复杂问题本质是搜索问题,而非映射问题

这是三篇论文的“最大公约数”。而它们的分野,从“如何搜索”开始。


二、三条路线:DFS、RL、单次提示

2.1 Yao et al. (2023):经典搜索算法回归

核心思想:将问题求解建模为树搜索,用BFS/DFS/集束搜索遍历。

技术实现:

  • 思维分解:把问题切成若干“思维步骤”

  • 思维生成:采样或提议产生候选

  • 状态评估:用LLM给候选打分(分类或数值)

  • 搜索算法:BFS(宽度优先)或DFS(深度优先)

关键代码逻辑(伪代码):

python

def solve_with_bfs(problem, beam_size=5):
    candidates = [initial_state]
    for depth in range(max_steps):
        new_candidates = []
        for state in candidates:
            thoughts = generate_thoughts(state, k=beam_size)
            for thought in thoughts:
                value = evaluate_thought(thought)
                new_candidates.append((thought, value))
        # 保留得分最高的beam_size个
        candidates = top_k(new_candidates, beam_size)
    return best_candidate

本质:把LLM当作搜索问题的“启发式函数”——生成候选靠LLM,打分靠LLM,但搜索策略是写死的。

优势:简单、可控、可解释 局限:搜索策略不学习,无法从数据中进化


2.2 Long (2023):强化学习驱动的“神经搜索”

核心思想:搜索策略不应该是硬编码的,而应该是学出来的。

技术实现:

  • 用一个ToT控制器(一个小型神经网络)决定:

    • 当前节点是否需要扩展

    • 扩展几个分支

    • 是否回溯

    • 回溯到哪一层

  • 控制器通过强化学习训练:

    • 状态:当前树的拓扑结构 + 节点评估值

    • 动作:扩展/回溯/终止

    • 奖励:最终答案的正确与否

关键洞察:

即使LLM本身是冻结的,ToT控制器仍可在自对弈中不断进化——就像AlphaGo学会的不仅是落子,更是何时弃子。

类比理解:

  • Yao:给LLM一张地图,告诉它“用广度优先搜索”

  • Long:给LLM一张地图,让它自己学会怎么看地图

优势:策略可进化,可能发现人类未曾写出的搜索模式 局限:需要训练数据,实现复杂度高


2.3 Hulbert (2023):提示词级别的“蒸馏”

核心思想:整个ToT框架可以蒸馏进一段提示词。

技术实现(原文提示词):

text

假设三位不同的专家来回答这个问题。
所有专家都写下他们思考这个问题的第一个步骤,然后与大家分享。
然后,所有专家都写下他们思考的下一个步骤并分享。
以此类推,直到所有专家写完他们思考的所有步骤。
只要大家发现有专家的步骤出错了,就让这位专家离开。
请问:[问题]

本质:用提示词模拟多智能体协作与树搜索。

这为什么有效?

  • 角色扮演激活LLM的“多视角生成”能力

  • 分步骤约束强制思维分解

  • “专家离开”机制模拟剪枝与回溯

  • 全部发生在单次对话的上下文窗口中

优势:

  • 零成本(无需改代码、无需训练)

  • 即插即用(任何对话模型都可尝试)

  • 单次调用,低延迟

局限:

  • 受限于上下文窗口长度

  • 树规模被显式限制(三位专家、若干步骤)

  • 无真正的状态追踪,本质是“模拟”


三、横向对比:三棵树的完整画像和代码研读

维度Yao et al. (2023)Long (2023)Hulbert (2023)
发表形式NeurIPS 2023预印本社区笔记/LinkedIn
搜索策略BFS/DFS/集束(硬编码)RL训练的控制器提示词模拟
是否需训练是(控制器需训练)
是否改模型否(仅控制层)
调用模式多轮LLM调用多轮LLM调用单次提示
可进化性强(自对弈)
实现成本中(需编排)高(需RL pipeline)极低
适用场景对确定性要求高的任务长期演化的AI系统快速原型、轻量探索
论文/代码✅ 开源未广泛公开✅ 提示词公开

Yao 路线:BFS/DFS + LLM 打分器

🧩 LangChain 原生实现(最推荐)

python

# -*- coding: utf-8 -*-
"""
Yao et al. (2023) 思维树实现
核心:BFS搜索 + LLM作为生成器/评估器
依赖:langchain>=0.1.0, openai>=1.0.0
"""

from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
from typing import List, Tuple, Any
import itertools

class TreeOfThoughtsYao:
    """Yao风格ToT:硬编码搜索策略 + LLM启发式"""
    
    def __init__(self, llm: ChatOpenAI, beam_size: int = 3, max_steps: int = 5):
        self.llm = llm
        self.beam_size = beam_size  # BFS宽度 / 集束大小
        self.max_steps = max_steps  # 树的最大深度
        
    def solve_24_game(self, numbers: List[int]) -> str:
        """
        24点游戏专用求解器
        论文核心实验:从4% -> 74%的奥秘
        """
        # 1. 提议提示:生成下一步候选
        propose_prompt = PromptTemplate(
            template="""你是一位24点游戏专家。
输入:{numbers}
可能的下一步(使用格式:表达式 = 结果,剩余数字):
- """,
            input_variables=["numbers"]
        )
        
        # 2. 价值提示:评估候选路径
        value_prompt = PromptTemplate(
            template="""评估这些数字是否能算出24点:
{numbers}
请只输出以下三者之一:确定 / 可能 / 不可能""",
            input_variables=["numbers"]
        )
        
        # BFS搜索主循环
        candidates = [(numbers, f"初始: {numbers}", 1.0)]
        
        for step in range(self.max_steps):
            new_candidates = []
            
            for state, history, _ in candidates:
                # 生成思维
                thoughts = self._generate_thoughts(state, propose_prompt)
                
                for thought in thoughts:
                    # 评估思维
                    value = self._evaluate_thought(thought["remaining"], value_prompt)
                    
                    # 只保留"确定"或"可能"
                    if value in ["确定", "可能"]:
                        new_candidates.append((
                            thought["remaining"],
                            history + f"\n→ {thought['expr']}",
                            1.0 if value == "确定" else 0.5
                        ))
            
            # 集束剪枝:保留top-k
            candidates = sorted(new_candidates, key=lambda x: x[2], reverse=True)[:self.beam_size]
            
            # 检查是否达成目标
            for remaining, history, _ in candidates:
                if len(remaining) == 1 and remaining[0] == 24:
                    return history + "\n✅ 成功得到24点!"
        
        return "❌ 未找到解法"
    
    def _generate_thoughts(self, numbers: List[int], prompt: PromptTemplate) -> List[dict]:
        """调用LLM生成候选思维"""
        response = self.llm.invoke(prompt.format(numbers=numbers))
        thoughts = []
        for line in response.content.strip().split('\n'):
            if '=' in line and '剩余' in line:
                # 解析格式:"4 + 9 = 13(剩余:10 13 13)"
                expr_part = line.split('(')[0].strip()
                remain_part = line.split('剩余:')[1].split(')')[0]
                thoughts.append({
                    "expr": expr_part,
                    "remaining": [int(x) for x in remain_part.split()]
                })
        return thoughts
    
    def _evaluate_thought(self, numbers: List[int], prompt: PromptTemplate) -> str:
        """调用LLM评估思维价值"""
        response = self.llm.invoke(prompt.format(numbers=numbers))
        return response.content.strip()

# ============= 使用示例 =============
if __name__ == "__main__":
    llm = ChatOpenAI(model="gpt-4", temperature=0.7)
    solver = TreeOfThoughtsYao(llm, beam_size=5)
    
    result = solver.solve_24_game([4, 9, 10, 13])
    print(result)

这段代码就像请了三位数学高手来帮你算24点,但用了非常巧妙的分工:

第一步,让高手们各自想一步——比如“4+9=13,还剩10、13、13”或者“10-4=6,还剩6、9、13”等等。 第二步,让另一位裁判评估每条路有没有希望——如果发现“这条路绝对算不出24”,就直接砍掉;如果“有可能”,就留下来。 第三步,只保留最有希望的那三五条路,让高手们继续往下想。 循环往复,直到有人真正算出24。

这套方法的厉害之处:它不是只让GPT“顺着一条道走到黑”(思维链,成功率4%),而是每走一步都看看哪条路更有可能,只探索最有希望的分支——结果成功率直接飙升到74%。 简单说就是:不一条路走到黑,而是边走边看,边看边选。

Long 路线:RL 控制器 + ToT 搜索策略学习

简化版强化学习控制器架构

python

# -*- coding: utf-8 -*-
"""
Long (2023) 思维树强化学习版本
核心思想:搜索策略不应硬编码,而应通过RL学习
注:完整实现需配合RL框架(如Ray RLlib),此处展示控制器核心结构
"""

import numpy as np
from typing import List, Dict, Any, Tuple
from dataclasses import dataclass
from enum import Enum

class SearchAction(Enum):
    """控制器的动作空间"""
    EXPAND = 0      # 扩展当前节点
    BACKTRACK = 1   # 回溯到父节点
    TERMINATE = 2   # 终止当前分支
    CONTINUE = 3    # 继续深度搜索

@dataclass
class TreeNode:
    """思维树的节点"""
    thought: str
    value: float
    children: List['TreeNode']
    parent: 'TreeNode' = None
    depth: int = 0
    visit_count: int = 0
    
class RLToTController:
    """
    ToT控制器:用小型神经网络决策搜索策略
    即使冻结LLM,控制器仍可通过RL持续进化
    """
    
    def __init__(self, llm, state_dim=128, action_dim=4):
        self.llm = llm  # 冻结的大模型
        self.controller = self._build_controller(state_dim, action_dim)
        self.memory = []  # 经验回放
        
    def _build_controller(self, state_dim, action_dim):
        """
        简化的控制器网络
        论文中未开源具体结构,此为合理推测架构
        """
        import torch.nn as nn
        return nn.Sequential(
            nn.Linear(state_dim, 256),
            nn.ReLU(),
            nn.Linear(256, 128),
            nn.ReLU(),
            nn.Linear(128, action_dim),
            nn.Softmax(dim=-1)
        )
    
    def encode_state(self, tree: TreeNode) -> np.ndarray:
        """
        状态编码:树的拓扑结构 + 节点评估值
        - 当前深度
        - 兄弟节点数量
        - 当前节点价值
        - 子树未探索比例
        - 搜索历史熵
        """
        state = np.zeros(128)
        state[0] = tree.depth / 10.0  # 归一化深度
        state[1] = len(tree.children) / 5.0  # 分支因子
        state[2] = tree.value  # 评估价值
        state[3] = tree.visit_count / 20.0  # 访问次数
        
        # 更多特征编码...
        return state
    
    def select_action(self, state: np.ndarray, epsilon=0.1) -> SearchAction:
        """ε-贪心策略:探索或利用"""
        if np.random.random() < epsilon:
            return SearchAction(np.random.randint(4))
        
        with torch.no_grad():
            state_tensor = torch.FloatTensor(state).unsqueeze(0)
            probs = self.controller(state_tensor)
            action_idx = probs.argmax().item()
        return SearchAction(action_idx)
    
    def learn_from_episode(self, episode_data: List[Tuple]):
        """
        从一次完整搜索任务中学习
        奖励设计:最终答案正确 +1,搜索效率 +0.1/步,无效回溯 -0.5
        """
        # 此处为简化示意,完整需PPO/DQN等算法
        states, actions, rewards = zip(*episode_data)
        # ... 更新控制器网络
        
    def search_with_rl(self, problem: str, max_depth=10) -> str:
        """
        RL驱动的ToT搜索
        控制器自主决定:何时扩展、何时回溯、何时终止
        """
        root = TreeNode(thought=problem, value=0.5, children=[], depth=0)
        current = root
        path = [root]
        
        for step in range(100):  # 最大交互步数
            state = self.encode_state(current)
            action = self.select_action(state)
            
            if action == SearchAction.EXPAND:
                # LLM生成思维
                thoughts = self.generate_thoughts(current.thought)
                for t in thoughts:
                    value = self.evaluate_thought(t)
                    node = TreeNode(t, value, [], current, current.depth+1)
                    current.children.append(node)
                # 移动到最佳子节点
                if current.children:
                    current = max(current.children, key=lambda n: n.value)
                    path.append(current)
                    
            elif action == SearchAction.BACKTRACK:
                # 回退到父节点
                if current.parent:
                    current = current.parent
                    path.pop()
                    
            elif action == SearchAction.TERMINATE:
                # 终止该分支
                break
                
            # ... 检查是否到达目标
        
        return self.extract_solution(root)

这段代码像是教一个只会按说明书办事的新手,慢慢变成能自己判断“什么时候该深挖、什么时候该回头”的老手。

最浅的一层:它让AI不再死板地按固定套路搜索,而是自己学会决策——比如遇到难题时知道“这条路再想想”,走进死胡同时知道“退回去换条路”。

中间一层:它用了一个小型神经网络当“指挥员”,大模型依然是那个知识渊博但不会规划的执行者,指挥员通过试错学习(强化学习)逐渐掌握搜索策略——就像AlphaGo自己学会下棋一样。

最深的一层:这意味着即使大模型本身不再更新,整个系统依然可以越用越聪明。指挥员从每一次成功/失败的任务中吸取经验,不断优化“何时扩展、何时回溯”的判断力。 一句话本质:把“怎么思考”这件事本身,也变成了可以学习的能力。

Hulbert 路线:单次提示模拟多专家树搜索

生产级提示词模板

python

# -*- coding: utf-8 -*-
"""
Hulbert (2023) 思维树提示词实现
核心:单次对话内模拟多专家协作 + 树搜索 + 回溯剪枝
特点:零成本、即插即用、单次调用
"""

from langchain.prompts import PromptTemplate
from langchain_openai import ChatOpenAI

class TreeOfThoughtsHulbert:
    """Hulbert风格:提示词即算法"""
    
    @staticmethod
    def get_prompt_template() -> PromptTemplate:
        """完整ToT提示词模板(中英双语)"""
        template = """假设{num_experts}位不同的专家来回答这个问题。
所有专家都写下他们思考这个问题的第一个步骤,然后与大家分享。
然后,所有专家都写下他们思考的下一个步骤并分享。
以此类推,直到所有专家写完他们思考的所有步骤。
只要大家发现有专家的步骤出错了,就让这位专家离开。

请严格遵守以下规则:
1. 每位专家每次只说一个步骤
2. 步骤必须具体、可执行
3. 专家离开后不再参与后续讨论
4. 最终答案必须由至少一位幸存的专家给出

现在请解决以下问题:

{question}

请以如下格式输出:

【专家1】
第1步:...
第2步:...
...

【专家2】
第1步:...
第2步:...
...

幸存专家:【专家X】
最终答案:...
"""
        return PromptTemplate(
            template=template,
            input_variables=["question", "num_experts"]
        )
    
    @staticmethod
    def for_code_generation() -> PromptTemplate:
        """代码生成专用版ToT提示词"""
        template = """假设{num_experts}位资深工程师共同解决这个编程问题。

每位工程师都:
1. 先分析需求,写下核心难点
2. 设计架构方案
3. 编写关键代码片段
4. 进行复杂度分析

过程中,如果发现某位工程师的思路存在明显缺陷,就请他离开。

问题:
{question}

要求:
- 使用Python 3.10+
- 包含异常处理
- 添加中文注释
- 给出时间复杂度

输出格式:
【工程师A】
思路:...
代码:
```python
...


幸存者:【工程师X】
最终解决方案:

python

```
...
```

"""
return PromptTemplate(
template=template,
input_variables=["question", "num_experts"]
)

text

```
@staticmethod
def for_decision_making() -> PromptTemplate:
    """商业决策专用版ToT提示词"""
    template = """模拟{num_experts}位不同背景的顾问(战略、财务、技术、运营)分析以下决策:
```

{question}

每位顾问需要:
第1步:识别该决策的关键风险与机遇
第2步:提出初步建议方案
第3步:量化评估投入产出
第4步:给出最终立场(支持/反对/修改)

若某顾问的数据明显错误或逻辑矛盾,其他顾问可要求其离场。

最终输出一份综合建议报告。"""
return PromptTemplate(
template=template,
input_variables=["question", "num_experts"]
)

这段代码就像一个不需要任何额外成本、拿来就能用的模板。

最浅的一层:它不写任何复杂的搜索算法,只是让GPT在脑子里模拟“三个专家开会”——每人分步思考、互相监督,发现谁错了就请他离场,最后幸存者给出答案。相当于把“树搜索”整个压缩进了一段提示词里。

中间一层:它针对不同场景准备了定制化“会议剧本”——写代码时模拟三位工程师(分析需求→架构→编码)、做决策时模拟四位顾问(战略/财务/技术/运营)。你只需要填问题,剩下的“多人协作推理”全交给提示词。

最深的一层:它和Yao、Long放在一起,构成了一个完整的选型决策树——没预算、要快、只是试试水?无脑选Hulbert,一行代码不写、零成本启动;等验证有效、需要规模化,再迁移到Yao的工程化方案;如果有长期进化需求,再考虑Long的RL路线。

本质:这是门槛最低的思维树——不需要懂搜索算法,不需要写训练代码,只需要会写提示词。


⚖️ 四、终极对比:选型决策树

# -*- coding: utf-8 -*-
"""
三条路线选型决策引擎
根据你的约束条件自动推荐
"""

class ToTSelector:
    """思维树路线选择器"""
    
    @staticmethod
    def recommend(
        has_training_budget: bool,    # 是否有训练预算
        latency_sensitive: bool,      # 是否延迟敏感
        need_controllable: bool,      # 是否需要完全可控
        task_depth: int,             # 任务所需推理深度
        daily_volume: int,           # 日调用量
    ) -> dict:
        """
        根据业务场景推荐ToT路线
        返回:推荐方案 + 理由 + 示例代码索引
        """
        
        score = {"yao": 0, "long": 0, "hulbert": 0}
        
        # 规则1:训练资源
        if not has_training_budget:
            score["long"] -= 100  # 没资源别碰RL
            score["yao"] += 10
            score["hulbert"] += 20
        
        # 规则2:延迟要求
        if latency_sensitive:
            score["hulbert"] += 50  # 单次调用胜出
            score["yao"] -= 30     # 多轮调用延迟高
            score["long"] -= 40    # 延迟最高
        
        # 规则3:控制需求
        if need_controllable:
            score["yao"] += 30     # 硬编码最可控
            score["long"] -= 20    # RL策略难解释
        
        # 规则4:任务复杂度
        if task_depth > 5:
            score["yao"] += 20     # BFS/DFS擅长深树
            score["hulbert"] -= 30 # 上下文窗口受限
        
        # 规则5:规模化
        if daily_volume > 10000:
            score["yao"] += 10     # LangChain已工程化
            score["hulbert"] += 20 # 单次调用成本低
        
        # 返回决策
        winner = max(score, key=score.get)
        
        recommendations = {
            "yao": {
                "路线": "Yao et al. (2023) - 经典搜索",
                "代码": "本文件第一部分",
                "理由": "适合确定性任务,可控性强,已大规模工程化",
                "成本估算": f"每日{daily_volume}次请求 ≈ {daily_volume * task_depth * 5}次LLM调用"
            },
            "long": {
                "路线": "Long (2023) - RL增强搜索",
                "代码": "本文件第二部分",
                "理由": "适合长期演进系统,策略可学习,需训练基础设施",
                "成本估算": "训练成本约$2000+,推理成本同Yao"
            },
            "hulbert": {
                "路线": "Hulbert (2023) - 单次提示模拟",
                "代码": "本文件第三部分",
                "理由": "零成本启动,延迟最低,适合快速验证",
                "成本估算": f"每日{daily_volume}次请求 = {daily_volume}次LLM调用"
            }
        }
        
        return recommendations[winner]

# ============= 使用示例 =============
if __name__ == "__main__":
    # 场景1:初创公司,快速验证24点游戏效果
    decision = ToTSelector.recommend(
        has_training_budget=False,
        latency_sensitive=True,
        need_controllable=False,
        task_depth=4,
        daily_volume=100
    )
    print("🏆 推荐:", decision["路线"])
    print("📌 理由:", decision["理由"])
    print("🔧 代码位置:", decision["代码"])
    
    # 输出:
    # 🏆 推荐: Hulbert (2023) - 单次提示模拟
    # 📌 理由: 零成本启动,延迟最低,适合快速验证
    # 🔧 代码位置: 本文件第三部分

🔮 四、三条路线的未来演进

站在2026年回看这三篇几乎同期的工作,我们可以清晰地看到它们各自预言的未来。

4.1 Yao路线 → 工程化与框架集成

Yao的方法因其简单、确定、可控,率先被工程化:

  • LangChain、LlamaIndex均已集成ToT模块

  • 成为复杂Agent任务中的标准编排模式

  • 演进方向:更高效的评估策略(如用小模型打分)

预言兑现:搜索+LLM已成为Agent系统的默认范式。

4.2 Long路线 → 神经符号系统的曙光

Long的方法虽然实现成本高,但它指向更具野心的目标:

  • 让LLM系统在推理过程中学习

  • 搜索策略任务自适应

  • 终极形态:AlphaGo式的推理大模型

预言兑现中:

  • OpenAI o1系列的内部搜索策略很可能是学习而来,而非硬编码

  • “推理时计算”成为Scaling Law的新维度

4.3 Hulbert路线 → 提示词工程的极致

Hulbert的方法看似“取巧”,却揭示了一个深刻事实:

很多算法思想可以直接“编译”进提示词。

这启发了后续大量工作:

  • “角色扮演即算法”范式(多智能体辩论、模拟法庭)

  • 提示词即代码(Prompt-as-Code)

  • 元提示(Meta-Prompting)的兴起

预言兑现:2024-2025年涌现的“提示词框架”,本质都是Hulbert路线的系统化。


五、一个有启发性的决策框架

如果你今天要构建一个需要复杂推理的LLM应用,三棵树怎么选?

选Yao模式(多轮BFS/DFS)当:

  • 任务有明确的步骤边界(如24点、填字游戏)

  • 正确性优先,可接受较高延迟

  • 你需要完全可控的搜索过程

选Long模式(RL控制器)当:

  • 你在构建长期演化的AI系统

  • 你有持续产生的任务数据

  • 你愿意投入训练基础设施

选Hulbert模式(单次提示模拟)当:

  • 快速验证ToT是否对任务有效

  • 延迟敏感,只能调用一次LLM

  • 树规模较小(≤5个分支,≤3层深度)

一个实用的混合策略:

  1. 先用Hulbert提示词快速验证ToT对该任务是否有效

  2. 若有效且需上线,用Yao模式重写为多轮调用系统

  3. 若数据持续积累且性能有瓶颈,考虑Long模式


六、结语:树的隐喻与思维的未来

Yao、Long、Hulbert的三棵树,其实对应着AI研究的三条母题:

路线母题代表
Yao算法即程序经典符号AI
Long策略即学习强化学习
Hulbert能力即提示提示工程

有趣的是,它们都不需要修改模型参数——全部发生在推理层。

这暗示着一个更大的趋势:

下一代AI系统的突破,未必来自更大的模型,而来自“我们如何用模型”的更聪明方式。


附录:论文与资源快速索引

python

# -*- coding: utf-8 -*-
"""
复制以下链接到浏览器
"""

class ToTResources:
    """论文、代码、提示词合集"""
    
    YAO = {
        "title": "Tree of Thoughts: Deliberate Problem Solving with Large Language Models",
        "paper": "https://arxiv.org/abs/2305.10601",
        "code": "https://github.com/princeton-nlp/tree-of-thoughts",
        "venue": "NeurIPS 2023",
        "citations": "1200+"
    }
    
    LONG = {
        "title": "Tree of Thoughts with Reinforcement Learning",
        "paper": "https://arxiv.org/abs/2305.08291",
        "code": "未正式开源",
        "venue": "arXiv预印本",
        "note": "RL控制器思路已被OpenAI o1系列借鉴"
    }
    
    HULBERT = {
        "title": "Tree-of-Thought Prompting",
        "paper": "社区笔记,无正式论文",
        "code": "https://github.com/kyegomez/tree-of-thoughts",
        "venue": "社区实现",
        "note": "提示词模板已被LangChain收录"
    }
    
    @classmethod
    def print_all(cls):
        """打印所有资源"""
        for name, info in cls.__dict__.items():
            if not name.startswith("_"):
                print(f"\n📌 {name}")
                for k, v in info.items():
                    print(f"  {k}: {v}")

# 使用
ToTResources.print_all()

如果这篇文章对你有启发,欢迎点赞、收藏、转发。评论区欢迎交流:你在实际项目中尝试过哪种ToT?效果如何?

关于作者:一个正在求职的Java开发者/AI应用开发者,坚持通过项目实践和技术写作提升自己。GitHub: [@yangziyue](Yzy000000 | 掘金: @Wiittch