2016年3月AlphaGo以4比1战胜李世石那场棋被几十种语言直播连我父母都守在电视前看了半宿。十年过去我在AI行业摸爬滚打这两年主要做LLM大语言模型的评测、推理加速和智能体落地回头再看那场棋发现一个让人尴尬的事实今天绝大多数大语言模型的技术路线其实并没有真正吸收AlphaGo那套方法论的精华。圈子里最近一直在转一位AlphaGo核心作者的感慨——大意是说“十年了LLM还没学到那场棋局‘神之一手’的精华”。这句话我反复嚼了很久越想越觉得他说到了根子上。这里的“神之一手”不是李世石那步挖也不是AlphaGo第37手那个具体的落子。它指的是AlphaGo在训练和推理中建立起来的一个完整能力闭环策略、价值、搜索、自我对弈。语言模型到今天仍然像一个只会照着棋谱背定式、但从不自己下棋的棋手。本文不准备复述那些已经烂大街的AlphaGo原理介绍我想把它拆开对照LLM当前的训练范式聊聊这十年我们到底学了什么、没学什么以及如果真想补上这课工程上该从哪里下手。1. “神之一手”到底是谁的先把账算清楚1.1 李世石第78手一场被高估的人类反攻很多人印象里的“神之一手”是李世石第四局下出的第78手“挖断”。当时AlphaGo在中腹已经隐隐掌握主动李世石硬是在看似不可能的地方断开黑棋直接导致AlphaGo后续胜率判断急剧下滑最终李世石扳回一局。这一手被媒体封为“人类尊严的胜利”直到今天仍是大众叙事里的经典桥段。但从工程角度看这一手更像是对AlphaGo的一次“分布外攻击”。李世石走出的形状在人类职业棋谱里极其罕见AlphaGo在自对弈和人机对弈中很少遇到类似局面策略网络给这块区域的先验概率很低树搜索在探索时又因为价值网络对那个局部形状的估计偏差没能及时纠正。换句话说AlphaGo不是被“更强的棋”打败了而是被一个超出训练分布的罕见形状“晃了一跟头”。这种事情做NLP的人太熟了——模型在OOD分布外数据上翻车不等于模型整体不行。所以当一位AlphaGo核心作者说“LLM还没学到那场棋局的精华”他大概率不是在夸李世石那手挖断而是在惋惜另一个方向上的东西。1.2 第二局AlphaGo第37手AI第一次给出“非人”答案李世石那手是人类妙手的代表但真正的“神之一手”在AI视角里应该是第二局AlphaGo下出的第37手。当时几位职业解说对这一手都很困惑觉得它不合定式麦克雷蒙还在直播里说“这不是人类会考虑的位置”。结果是AlphaGo自己判断这手胜率极高后续也证明它逐步控制了整盘棋。这才是AlphaGo真正恐怖的地方不是靠暴力计算赢棋而是在人类从未建立先验的领域通过深层价值评估和全局搜索判断出一手“看起来不像人下的棋但确实更好”的棋。大语言模型今天也有“创造性”但它的创造性本质上是从概率分布里采样生成的词句只是“很像人类会说的话”缺乏对全局目标的评估。一个LLM可能写出语感极好的段落但它并不知道这段话最终能不能帮助它“赢下当前这个任务”。前者是采样后者是决策。1.3 真正的“神之一手”是整条训练管线而不是某一步棋如果只能从AlphaGo里学一件事我选它那套闭环策略网络负责“感觉上哪些棋值得想”价值网络负责“这个局面离胜利还有多远”蒙特卡洛树搜索负责“在想象中试错”自我对弈负责“源源不断产生新局势和胜负结果”。这四样东西不是简单拼装而是环环相扣。语言模型现在的训练管线是什么呢绝大多数还是“从互联网文本里学next token”在大量人类文本上做一个超大规模的条件概率估计。“会说话”和“会决策”是两码事。AlphaGo核心作者的感慨本质上是在提醒我们十年了我们把scaling law搞得轰轰烈烈但一直没有把“目标、评估、试错、进化”这四个词认真搬进语言模型的训练范式里。2. AlphaGo的四大基石放在LLM身上全是坎2.1 监督学习开局相似的开局不同的结局AlphaGo初代有一个阶段是先拿人类职业棋谱训练策略网络让模型学会“人类在这个局面会往哪儿下”。这个阶段的本质是冷启动下棋的合法动作空间太大纯靠强化学习从零探索效率太低先用人类经验把搜索范围缩小一点。LLM的预训练看起来在做类似的事——从人类文本中学习语言模式和世界知识。但有一个根本区别人类棋谱是围绕“赢棋”这个客观目标产生的高质量数据每步棋背后都有规则和胜负作为约束互联网文本则没有统一的“胜利标准”。模型学“我爱北京”和“我不爱北京”只会统计相关性不关心哪句话在现实世界能换来什么结果。监督学习的开局一样但AlphaGo的监督阶段之后接的是强化学习而LLM的监督阶段往往直接以“预测下一个词”为终点。2.2 强化学习进化奖励信号把“感觉”变成“估值”AlphaGo把棋下好关键不是策略网络而是它后面接的强化学习。让当前版本和自己下棋赢了就增加这系列落子的价值输了就降低它们。围棋的胜负是一个纯粹的二元信号清清楚楚没有任何含糊。价值网络就是从这个信号里学出来的它给每个中间局面一个胜率估计相当于棋手脑子里“我现在形势好不好”的直觉。LLM这边的对应物是RLHF基于人类反馈的强化学习用人类对模型输出的偏好打分再让模型用强化学习去迎合这些分数。问题在于人类偏好不是围棋规则它是主观的、模糊的、经常自相矛盾的。RLHF能教会模型“说话更讨喜”“格式更规范”但它很难教会模型“在这个数学问题上真正想对了”。很多团队用“LLM as Judge”让大模型给大模型打分出发点是想模拟价值网络但两个共享同样幻觉的模型互相打分常常会一起跑偏。价值网络背后是客观规则校准过的结果LLM裁判背后没有这个底座。2.3 树搜索写一步棋之前先想二十步AlphaGo推理时的核心动作是蒙特卡洛树搜索。每走一步棋之前它会从当前局面出发在想象中探索大量未来分支用策略网络指导先往哪些分支想用价值网络判断分支最终好坏最后选一个综合评估最高的落子。这个“在行动之前先想象”的能力是AlphaGo和传统棋软最大的区别。LLM推理时有没有搜索严格意义上没有。GPT做自回归生成时用的贪心解码或者beam search只是在词级别的序列上做局部选择没有任何对“分支结果好坏”的评估。就算现在很多Agent框架让LLM能调用工具、写代码那也是把“动作空间”扩大了并没有建立“搜索”机制。一个Agent写出一段错误代码外部编译器报错它能不能主动回滚上一分支、重新规划目前大多数实现只是把报错信息扔回给模型让它再猜一次。这更像随机重试而不是树搜索。2.4 自我对弈LLM缺的背景板就是“自我对弈”AlphaGo Zero给我们演示了一个极端的可能性完全不用人类棋谱从一个随机初始化的网络出发只需要围棋规则作为唯一裁判自己和自己下数百万盘棋就能达到超越人类顶尖水平的棋力。自我对弈相当于一个永不断货的数据工厂每一盘棋都产生全新的局面和明确的胜负标签训练数据永远不会枯竭。语言模型没有“自我对弈”的条件因为绝大多数自然语言任务没有一个客观裁判。你说“写一篇散文”谁赢谁输没有规则可言。但反过来看只要一个任务能被自动验证LLM就能做类似自我对弈的事代码有单元测试数学题有标准答案定理证明有形式化验证器走迷宫有最终出口。可现在的训练流程并没有大规模这么做大家更习惯从人类语料里“捡现成答案”。这就是我常跟团队说的忘掉自我对弈这四个字LLM永远缺一课。3. 十年时间线LLM到底抄了多少作业3.1 2016—2020从Transformer到GPT搜索彻底缺席2017年Transformer论文发表2018年GPT和BERT相继出现2020年GPT-3把scaling law推到台前。这段时间大家都在猛堆参数和语料研究重点是怎么把模型做大、把few-shot能力挤出来。期间也有学者尝试把MCTS和语言生成结合比如在文本生成里做可控解码或在对话里做规划但都属于小圈子探索没有进入主流工程范式。LLM的训练目标清一色是next token prediction没有“模拟未来”“评估后果”这类概念。今天回看这是AlphaGo方法论被浪费掉的四年。AlphaGo已经清楚证明了一个智能系统应该包含价值评估和搜索但GPT路线选择了一条更简单的路相信足够大的条件概率分布能隐式包含推理能力。事实证明这条路能把“说人话”做到极致但离“靠谱决策”还很远。3.2 2021—2023RLHF、instructGPT、过程监督的萌芽2022年ChatGPT引爆全球背后是InstructGPT的RLHF技术。人类对多个输出排序训练一个奖励模型再用PPO让LLM学会“说人类觉得好的话”。这是第一次大家认真把强化学习概念搬进LLM但从AlphaGo视角看RLHF的奖励模型不是价值网络它只告诉模型“这句话像不像人说的”不告诉模型“这一步有没有把问题解决掉”。所以在很多推理任务上RLHF提升的其实是风格和格式。2023年前后OpenAI和DeepMind一前一后开始做“过程监督”Process Reward Model不只看最终答案对不对还单独给中间每一步打分。这个思路终于有了价值网络的影子——给中间状态一个估计值而不只是期末算总账。但由于过程标注依赖人工或另一个LLM成本高、噪声大工程界并没有形成标准做法。这也是我认为“LLM作为裁判”最大的问题价值网络必须被客观结果校准否则只是错觉。3.3 2024—2026推理模型、测试时计算、智能体搜索回潮这一阶段的标志是推理模型成为显学。o系列模型引入“思考token”在给出答案之前先生成一大段内部推理再通过训练让模型更擅长在推理链上自我纠错。DeepSeek-R1放出的大规模强化学习路线图也明确提到在数学和代码等可验证任务上使用基于规则结果的奖励让模型在训练中通过试错和自我反思提升推理能力。这些进展确实在向AlphaGo靠拢可验证的奖励信号、强化学习、测试时计算test-time compute重新成为热词。很多Agent框架也开始给LLM加“回溯”“重规划”“纠错”能力比如智能体在执行任务时感知环境反馈、判断当前路径是否偏离目标、回退到之前的决策点再探索。这不就是MCTS的简化版吗同一个抽屉里的工具箱十年后终于被重新拉开。只是这一波“回潮”大多还停留在工程堆叠阶段缺少AlphaGo那种系统化的闭环训练。3.4 对照表AlphaGo四大基石如今在LLM里的状态AlphaGo组件LLM当前对应物差距在哪儿监督学习策略网络互联网文本预训练文本没有统一目标学的是相关性而非因果强化学习价值网络RLHF奖励模型 / PRM过程奖励模型奖励信号主观、噪声大缺乏客观结果校准蒙特卡洛树搜索思维链、Agent回溯、测试时计算多数是线性重试没有真正的分支探索和状态价值评估自我对弈数据生成合成数据、迭代DPO/SPIN自然语言缺客观胜负仅限可验证任务使用这张表每次给团队做汇报我都会放。它不是为了否定LLM而是帮大家看清语言模型在“语言”上做到了极致但在“决策”层面还在补AlphaGo十年前就补过的作业。4. 真想补课我给你一个可以动手跑的工程实验4.1 用极简MCTS给LLM做“二次采样”理论说再多不如跑一个玩具实验来得直观。下面这段代码不是能直接上生产的库而是一个把MCTS流程和LLM接口对齐的教学骨架。你把它复制到本地替换掉里面的生成函数和打分函数就能感受“搜索”和“贪心采样”的区别。import math import random from dataclasses import dataclass, field from typing import Optional, Callable, List dataclass class MCTSNode: state: str parent: Optional[MCTSNode] None children: List[MCTSNode] field(default_factorylist) visits: int 0 value: float 0.0 def is_leaf(self) - bool: return len(self.children) 0 def ucb(self, c: float 1.4) - float: if self.visits 0: return float(inf) if self.parent is None: return self.value / self.visits exploit self.value / self.visits explore c * math.sqrt(math.log(self.parent.visits 1) / self.visits) return exploit explore def select_child(node: MCTSNode) - MCTSNode: return max(node.children, keylambda n: n.ucb()) def expand(node: MCTSNode, generate_candidates: Callable[[str], List[str]]) - None: for candidate in generate_candidates(node.state): node.children.append(MCTSNode(statecandidate, parentnode)) def backprop(node: MCTSNode, reward: float) - None: while node is not None: node.visits 1 node.value reward node node.parent def mcts_llm( prompt: str, generate_candidates: Callable[[str], List[str]], score_fn: Callable[[str], float], iterations: int 50, max_children: int 4, max_depth: int 3, ) - str: root MCTSNode(stateprompt) for _ in range(iterations): node root depth 0 # 选择沿着价值最高的分支往下走 while not node.is_leaf() and depth max_depth: node select_child(node) depth 1 # 扩展如果当前节点已经评估过且有扩展空间 if node.visits 0 and len(node.children) max_children and depth max_depth: expand(node, generate_candidates) node random.choice(node.children) # 模拟用外部可验证的分数代替LLM自己打分 reward score_fn(node.state) backprop(node, reward) # 返回访问次数最多的孩子最“被看好”的分支 return max(root.children, keylambda n: n.visits).state这个骨架里最核心的设计是“评分函数必须来自任务的外部结果”比如数学题的最终答案是否匹配、代码用例是否通过、格式化规则是否满足。一旦你把评分函数换成“让另一个LLM凭感觉打分”整个实验就退化成RLHF式的幻觉放大器。4.2 关键参数为什么这么设先说UCB公式里的探索常数c我习惯取1.4。直觉上讲这个值控制你愿意在“当前看起来很差的分支”上浪费多少个样本。c取太大模型会把大量预算花在瞎探索上取太小模型会过早锁死在一个局部优秀分支上失去发现神之一手的机会。AlphaGo里探索和利用的平衡就靠这个常数维持但它在围棋上对参数量不敏感在LLM场景里你却要重新调因为LLM每个分支的“想象成本”比棋局大得多。最大深度max_depth要跟任务复杂度挂钩。做单步数学题3层够用做多步代码任务可能要到5层以上。迭代次数iterations本质上是你的Token预算换算——每多一次迭代就要多生成一批候选和打分文本。我建议从50次开始先拿一个小数据集看收益不要一上来就追求2000次。还有一个很容易踩的细节候选生成时温度要调高建议0.7到1.0确保分支有足够多样性打分时则完全不需要采样直接调温度0让评分函数输出稳定数值。你不想让评估环节再掺入随机性否则整个搜索的价值估计都是噪声。4.3 在自建数据集上做A/B对照我建议你拿一个小规模可验证任务集比如GSM8K数学题的100道子集或者LeetCode简单题的十几个用例。三种方法做对比贪心解码、Self-Consistency采样多个完整答案然后投票、上面这套LLM-MCTS。预期结果通常是MCTS的准确率会略高于Self-Consistency但Token消耗可能高出5到20倍因为每一次扩展都要生成候选、每次评分都要让裁判模型输出。这个“昂贵但更准”的特点决定了它现阶段适合离线数据生产不适合在线实时对话。更有意思的玩法是把搜索产出的高质量轨迹拿去做微调让模型最终在没有搜索的情况下也能直接输出更好结果。AlphaGo自己也这么干把MCTS搜索得到的最佳落子当成策略网络的增强训练数据让网络越来越接近“经过搜索后的判断”。放在LLM上这就是典型的“搜索蒸馏成直觉”比单纯刷训练集有用得多。5. 这些年我做LLM搜索化改造踩过的坑5.1 搜索深度不等于代码循环次数最开始我把MCTS塞进Agent流程时犯过一个特别蠢的错误以为只要让模型多试几次、多跑几个分支就可以叫“AlphaGo式搜索”。结果模型在一个错误假设上反复自我验证同一个分支生成八个相似答案评分函数还都给高分——因为生成的文本确实“看起来合理”。原因在于我没有定义清楚“状态”和“动作”LLM的分支如果只是换几段措辞没有真正推进任务状态那再深也是原地打转。真正的树搜索要求每个节点代表一个可比较的中间状态比如“已经写完了第2步公式”或者“代码已通过前4个用例”。只有这样的状态才能被价值网络评估才能决定哪条分支值得继续。给LLM做搜索首先要解决“状态怎么表示”的问题而不是先堆迭代轮数。5.2 奖励越稀疏系统反而越稳我在早期版本里试图给每一个中间步骤都设计细粒度分数让裁判LLM给每一步点评结果是点评模型给出的理由经常自相矛盾梯度信号被噪声淹没。后来我把奖励改成“任务最终结果的验证分数”只在终点给奖励中间过程价值全部由搜索到的胜负结果回溯得到。这跟AlphaGo的哲学完全一致围棋从第一步到终局也只有赢、输两个信号价值网络是通过大量对弈结果学出来的不是每一步都靠人来打分。现在做LLM强化学习也出现“GRPO只依赖规则奖励”的趋势规则奖励只关心答案对错或用例通过与否而不是一堆风格分。稀疏奖励配合大量采样比密集的“伪评分”可靠得多。5.3 忘掉自我对弈LLM永远缺最后一课为什么李世石那局里AlphaGo会在第78手翻车因为它在自我对弈过程中实际碰到“人类极限外”的罕见棋形的概率太低训练分布里没有那类形状。但AlphaGo的自我对弈至少让它把99.9%的局面都摸透了。语言模型更尴尬连这99.9%的局面都没有经历过——它只在人类文本里“看过”问题没有在真实环境里“碰过”问题。这几年能在代码、数学、数据库操作等场景里看到曙光正是因为这些场景有可执行的裁判测试用例能告诉你对错数据库返回结果能告诉你真实状态环境错误信息能逼着模型修正自己的决策。这些都是自我对弈的雏形。谁来给自然语言对话当裁判谁来给开放式写作当规则这个难题不解决LLM的“神之一手”就仍然只是概率采样碰运气。我个人的判断是未来能在决策质量上拉开差距的LLM一定不是参数最大的那个而是最会把自己的输出丢进环境里试错、再把试错结果拿回训练循环的那个。你现在手头如果正好有LLM API和几十道带标准答案的题别急着做花哨应用先按第4章的骨架跑一遍MCTS看看同样一道题加入搜索以后答案会不会变稳。这个实验花不了多少钱但它会让你对“语言模型”和“决策模型”的区别有一个非常实在的体感。