tree-of-thought-llm
让大模型通过树搜索推理,在复杂问题(24点游戏、创意写作、填字游戏)上准确率提升2-10倍
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
让大模型通过树搜索推理,在复杂问题(24点游戏、创意写作、填字游戏)上准确率提升2-10倍
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一个场景:你在古玩市场看中一件宝贝,摊主开价 500 元。普通人可能直接走人,但经验丰富的老手会怎么想?
「这个成色,五折差不多……但能不能再压一压?要不试试三个方案:现金全款、网络转账、以物换物,看他哪个更愿意松口……」
这种**「多想几条路,选最优走」**的思维方式,正是人类在复杂决策中的核心能力。而传统大语言模型(LLM),更像是一个急性子的买家——给个输入,立刻吐答案,从不回头思考。
Tree of Thoughts(ToT),正是普林斯顿大学团队为解决这一痛点而生的框架。它让大模型也能像人类一样,在解题过程中「停下来想一想」,探索多种可能的推理路径,最终选出最有希望的那条。
这项工作由普林斯顿 NLP 团队(第一作者姚顺雨)发表在 NeurIPS 2023,GitHub 仓库已收获近 6000 stars,在 LLM reasoning 领域具有里程碑意义。
核心问题很朴素:现有大模型做复杂推理时,能力被严重低估了。 例如,给定「4 5 6 10」四个数字,要求用加减乘除得到 24,GPT-4 用标准 Prompt(Input-Output)的准确率只有 7%;用 Chain-of-Thought(CoT)逐步思考,提升到 33%;而 ToT 方法直接飙升到 74%。
这不是微调或新模型,只是改变调用方式。
ToT 的核心思想是把 LLM 的推理过程建模为一棵搜索树:
与传统 CoT 的线性链条相比,ToT 的树结构允许回溯和分支探索,这对于需要「试错」的任务(如数学证明、创意写作、填字游戏)尤为重要。
仓库采用标准的 Python 包结构,核心代码位于 src/tot/:
| 目录/文件 | 作用 |
|---|---|
methods/bfs.py | BFS(广度优先搜索)算法实现,核心搜索逻辑 |
models.py | GPT 模型调用封装,支持 backoff 重试 |
tasks/ | 任务定义:Game24(24点游戏)、Text(创意写作)、Crosswords(填字游戏) |
prompts/ | 各任务专属的 Prompt 模板(生成/评估/投票) |
data/ | 任务数据集 |
关键技术细节:
value 模式(直接估算离 24 有多远);对于 Creative Writing 这类开放式任务,使用 vote 模式(两两比较哪个更好)gpt_usage() 函数实时统计 token 消耗和费用1. Game 24(24点游戏)
给定 4 个数字,用加减乘除凑出 24。ToT 方法准确率达 74%,远超 CoT 的 33% 和 IO 的 7%。代码中通过 sympy 库验证表达式正确性。
2. Creative Writing(创意写作)
给随机句子,要求续写一段连贯文字。这是对「质量主观判断」的测试——LLM 需要通过投票机制选出最佳续写。
3. Mini Crosswords(迷你填字游戏)
5x5 网格填字游戏,考验模型的多步推理和约束满足能力。
项目安装极其简单:
pip install tree-of-thoughts-llm
# 或从源码安装
git clone https://github.com/princeton-nlp/tree-of-thought-llm
cd tree-of-thought-llm
pip install -e .
核心依赖仅有 openai、tqdm、sympy、numpy、pandas,不涉及任何重型 ML 框架。但必须自备 OpenAI API Key,这既是壁垒也是灵活性所在——你可以替换成任何兼容 OpenAI API 格式的模型(如 Claude、本地模型)。
最简运行示例(解 24 点):
from tot.methods.bfs import solve
from tot.tasks.game24 import Game24Task
args = argparse.Namespace(backend='gpt-4', temperature=0.7,
task='game24', naive_run=False,
method_generate='propose',
method_evaluate='value',
method_select='greedy')
task = Game24Task()
ys, infos = solve(args, task, 900)
print(ys[0])
1. API 成本问题
ToT 需要反复调用 LLM 进行「生成→评估→选择」循环,一个 Game24 问题可能消耗数十次 API 调用,成本是普通 CoT 的 5-10 倍。作者在 gpt_usage() 中也内置了成本统计,方便用户心里有数。
2. 不适合简单问题
对于「1+1=?」这类简单任务,ToT 的多分支探索反而是过度设计,增加延迟和成本。ToT 的价值在于复杂、多解、非线性的任务场景。
3. 超参敏感
n_evaluate_sample(评估采样次数)、n_select_sample(每步保留分支数)等超参对结果影响较大,需要针对具体任务调优。
ToT 的意义不仅在于单个任务性能的提升,更在于它提供了一种通用框架,启发了后续大量工作:
可以说,ToT 是 LLM 从「问答机器」走向「推理 Agent」的关键一步。
| 维度 | 评价 |
|---|---|
| 论文影响力 | NeurIPS 2023,引用超 2000,GitHub 6000 stars |
| 代码质量 | 模块化清晰,扩展性好,文档完善 |
| 部署难度 | 极简(pip install),无 GPU 要求 |
| 适用场景 | 复杂推理、多步决策、开放式创意任务 |
| 局限性 | API 成本高,简单任务不宜使用 |
适合谁用:AI 研究者(做实验、写论文)、开发者(构建 Agent 系统)、对 LLM 推理能力感兴趣的学习者。
不适合谁:只需简单问答的场景、预算极度敏感的项目、无 OpenAI API 或兼容端点的环境。
本分析基于 princeton-nlp/tree-of-thought-llm 仓库 v0.1.0,stars 数据截至 2026-05-31。