一个数学家翻开了诗集

1913 年,圣彼得堡。

一个 57 岁的俄国数学家翻开普希金的《叶甫盖尼·奥涅金》。

他不是来读诗的。

他拿起笔,开始数。

这个字母是元音,记下来。下一个是辅音,记下来。再下一个是辅音,再下一个是元音。他一路数了两万多个字母,最后得到一串看起来毫无诗意的符号:

元音、辅音、辅音、元音、辅音、元音、元音、辅音……

如果旁边有人看见,大概会觉得这个人疯了。

世界上最伟大的俄语诗歌之一,到了他手里,变成了一串 V 和 C。

但他真正关心的不是普希金。

他关心的是一个更深的问题:

下一个符号,和前一个符号有没有关系?

在那之前,概率论最熟悉的是抛硬币、掷骰子、抽球。这些问题有一个共同假设:每一次试验彼此独立。前一次硬币是正面,不会改变下一次硬币的概率。

但语言不是这样。

如果你刚看到一个辅音,下一个字母是元音的概率会变高。如果你刚看到一个元音,下一个字母还是元音的概率可能会变低。字母不是孤立地出现,它们互相牵引。

这位数学家叫 安德烈·马尔可夫

他没有想到,一百多年后,人类会造出一种机器,每一步都在做类似的事:

看见前面的序列,预测下一个 token。

更没有想到,再往后一步,这个机器会开始使用工具、修改代码、浏览网页、执行命令。

从预测下一个字母,到预测下一个词。

从预测下一个词,到预测下一步行动。

马尔可夫没有发明大语言模型,也没有发明 Agent。

但现代 AI 的很多地方,都有他的幽灵。


一、旧世界:每一次都互不相干

先想一枚硬币。

你抛十次,前九次都是正面。第十次是正面的概率是多少?

还是 50%。

这就是独立事件。

过去发生了什么,不影响下一次。

抛硬币:

P(第 10 次 = 正面 | 前 9 次都是正面) = 50%
P(第 10 次 = 正面) = 50%

过去没有改变未来。

独立性很美。

因为它让世界变得容易计算。每一次试验都像重新开始,过去不用背在身上。概率论早期的大量定理,都建立在这种干净的假设上。

但真实世界很少这么干净。

今天下雨,明天下雨的概率会变高。

你刚说出“我爱”,下一个词是“你”的概率会变高。

股市今天暴跌,明天开盘的情绪不会像什么都没发生过一样。

一个程序刚刚编译失败,下一步最合理的行动不是“继续写新功能”,而是“读错误日志”。

真实世界不是一枚硬币。

真实世界有记忆。

马尔可夫的革命,就从这里开始。

他问的不是“未来是否完全由过去决定”。那是宿命论的问题。

他问的是一个更数学、更可计算的问题:

未来是否可以只通过某个“当前状态”来预测?

这句话听起来朴素,但它改变了概率论的方向。


二、马尔可夫链:把过去压进现在

马尔可夫链的核心,只有一句话:

下一步只依赖当前状态,而不直接依赖更早的历史。

写成公式是:

$$P(X_{t+1} | X_t, X_{t-1}, X_{t-2}, …) = P(X_{t+1} | X_t)$$

换个说法:

只要你知道“现在在哪里”,就不需要把整条历史都背下来。

这不是说过去不重要。

过去当然重要。

只是过去的影响,已经被“当前状态”吸收了。

想象你在导航。

你从家里出发,经过三条路,绕过两个红绿灯,最后站在一个路口。现在你要决定下一步往哪走。

对导航来说,最重要的不是你刚才怎么绕来的,而是:

你现在在哪个路口?
你面朝哪个方向?
每条路通向哪里?

你的历史,已经被压缩进了“当前位置”。

这就是马尔可夫性的直觉。

历史很长:

家 → 小区门口 → 地铁站 → 商场 → 路口 A

压缩成状态:

当前状态 = 路口 A

下一步:

P(左转 | 路口 A)
P(右转 | 路口 A)
P(直行 | 路口 A)

马尔可夫链由两样东西组成:

组件含义例子
状态你现在在哪里晴天、雨天;字母 A;网页页面;代码仓库当前状态
转移概率从一个状态走到下一个状态的概率晴天到雨天 20%;A 后面接 B 5%

这就是最小的序列世界:

状态  →  状态  →  状态  →  状态
  |       |       |       |
转移    转移    转移    转移

如果 Shannon 问的是“这串符号有多少信息”,Bayes 问的是“看到证据后信念如何更新”,那么 Markov 问的是:

站在现在,下一步最可能是什么?

这就是语言模型的原始问题。


三、语言是一条马尔可夫河流

你读到这半句话:

今天天气很

下一个词可能是什么?

糟糕
不错

你不会猜“量子”“番茄”“文件系统”。

因为前面的词已经把概率分布收窄了。

语言不是随机词袋。语言是一条有方向的河。

一个词推着下一个词,一个句子推着下一个句子。

早期语言模型就是这么做的。

最简单的是 bigram:

P(下一个词 | 当前词)

比如:

P("你" | "我爱") 很高
P("西红柿" | "我爱") 也可能
P("张量并行" | "我爱") 很低

更进一步是 trigram:

P(下一个词 | 前两个词)

再进一步是 n-gram:

P(下一个词 | 前 n-1 个词)

这就是早期自然语言处理的核心工具。

它非常马尔可夫:

只看有限窗口内的历史。
用这个窗口预测下一步。

它的问题也很明显。

窗口太短,记不住远处的信息。

小明昨天把那本借来的、封面已经褪色的、夹着一张旧车票的书放在桌上。
今天早上,他发现它不见了。

“它”指什么?

指“书”。

但“书”离“它”很远。一个短窗口 n-gram 很可能已经忘了。

窗口拉长呢?

状态数量爆炸。

词表大小 = 100000

bigram 状态:100000
trigram 状态:100000^2
10-gram 状态:100000^9

这就是马尔可夫链在语言上的第一道墙:

状态太薄,会忘。状态太厚,会爆炸。

后来的深度学习,本质上一直在解决这个问题。

RNN 试图把历史压进一个隐藏状态。

LSTM 给这个隐藏状态加上门控,避免太快遗忘。

Transformer 则干脆把一段很长的历史摊开,用 Attention 让每个位置都能回头看。

它们都在做同一件事:

把过去压缩成一个足够有用的现在。

这句话,就是马尔可夫幽灵第一次真正显形的地方。


四、为什么不是预测下一句话?

这里有一个非常自然的疑问。

既然人类说话时不是一个 token 一个 token 地想,为什么训练 AI 时要预测下一个 token?

为什么不是预测下一句话?

甚至更进一步:

为什么不是直接预测一个完整答案、一个完整计划、一个完整结论?

如果我不站在今天回看,而是从零开始设计一种 AI,我大概率也不会第一时间想到“预测下一个 token”。

我会先想:

机器需要储备知识。
机器需要记录当前状态。
机器需要有推理规则。
机器需要能计算、推演、预测。
机器需要知道自己不知道什么。

这些想法都对。

但它们会立刻遇到一个更难的问题:

这些东西怎么表示?

知识库怎么切?

状态变量怎么定义?

规则由谁来写?

推理何时开始,又何时停止?

世界太大了。

你越是想从上帝视角设计智能,越容易卡在“先把世界建模清楚”这一步。

而 next-token prediction 的聪明之处,恰恰在于它没有一上来要求我们显式设计整个智能。

它把问题缩小到一个极小的动作:

给定前面的文本,下一个 token 是什么?

这个动作小到几乎无聊。

但它有三个工程上的优点。

第一,它的监督信号极密。

一段一千个 token 的文本,不只是一条训练样本,而是大约一千道小题。

看到第 1 个 token,预测第 2 个。
看到前 2 个 token,预测第 3 个。
看到前 999 个 token,预测第 1000 个。

如果改成“预测下一句话”,监督信号一下子变稀疏了。

一句话可能有很多同样合理的写法。

它的边界也不稳定:到哪里算一句?下一句要多长?是回答、解释、反问,还是沉默?

第二,token 是可组合的。

一句话不是一个原子。

它是一条轨迹。

我 → 认为 → 这个 → 问题 → 的 → 关键 → 是 → 状态

每一步都在限制下一步。

每一步也都在暴露模型是否真的理解了前面的状态。

预测下一句话不是错。

它只是把整条轨迹的中间步骤都藏起来了。

第三,小步预测可以被反复纠错。

训练时,模型每一步都会得到反馈。

真实 token 出现时,如果模型给它的概率很低,就会被交叉熵惩罚。

这意味着它不是只在文章结束时才知道自己错了。

它在每一个位置都被追问:

你真的知道现在发生了什么吗?

所以,预测下一个 token 不是目标很小。

而是监督信号极密。

它不是把智能简化成一个玩具问题。

它是把一个太大的问题,拆成无数个可学习的小步。

下棋也是这样。

如果你训练一个模型预测棋谱里的下一手,它表面上只是在猜一个落子。

但要猜得足够好,它必须理解局面、威胁、先手、后手、形势、长期收益。

下一手不是全部智能。

但下一手是智能在棋盘上露出的最小切面。

下一个 token 也是一样。

它不是语言的全部。

但它是语言智能在文本里露出的最小切面。


五、一个无聊目标如何逼出智能?

真正深的地方在这里:

下一个 token 本身没有魔法。

魔法在于,人类把大量智能活动的痕迹都写成了文本。

小说是人类对情感和关系的压缩。

论文是人类对概念和证据的压缩。

代码是人类对操作和规则的压缩。

教材是人类对知识结构的压缩。

聊天记录是人类对意图、礼貌、误解、协商的压缩。

互联网不是一个干净的真理库。

但它是一座巨大的行为遗迹。

当模型被要求预测这些文本里的下一个 token,它其实是在被迫追问:

什么样的世界,会生成这样的句子?
什么样的知识,会让这个词更可能出现?
什么样的推理,会让下一步走到这里?
什么样的语气,会让这个回答显得自然?
什么样的代码状态,会让这一行之后接那一行?

比如:

法国的首都是 ___

要预测“巴黎”,它需要知识。

如果 A 大于 B,B 大于 C,那么 A 和 C 的关系是 ___

要预测“大于”,它需要推理。

def factorial(n):
    if n == 0:
        return 1
    return ___

要预测 n * factorial(n - 1),它需要代码模式和递归结构。

用户说:这段话太冲了,帮我改委婉一点。
助手回答:___

要接得好,它需要理解意图、语气和社会情境。

这就是为什么一个看似无聊的目标,会逼出看起来很复杂的能力。

不是因为“预测下一个词”天然等于“理解世界”。

而是因为在真实语料里,下一个词经常是许多隐藏变量共同作用的结果。

语法、事实、因果、角色、目标、风格、上下文、任务约束,都在推着那个词出现。

模型想降低损失,就必须学会把这些隐藏变量压进状态里。

它不一定像人一样理解。

它也不一定可靠。

但从优化目标上看,它确实被迫学习了很多“如果不学就预测不好”的结构。

这也解释了为什么我们不该轻视 next-token prediction。

它不是一句口号。

它是一种把智能设计问题转化为表示学习问题的办法:

不要先手写知识结构。
先给模型一个极密的序列预测任务。
让它自己发现什么应该被压缩进当前状态。

这就是现代 AI 最反直觉的地方。

我们以为智能应该从“知识库、规则、推理机”开始。

结果它先从一个小得不能再小的问题开始:

下一个符号是什么?

然后,在足够大的数据、足够大的模型、足够长的训练里,这个小问题开始反过来吞掉大问题。


六、文献里早就埋下了这条线

这条线并不是今天才被事后解释出来的。

很多文献都在不同位置留下了线索。

马尔可夫在 1913 年研究《叶甫盖尼·奥涅金》时,做的不是现代 NLP。

但他已经把“文本不是独立符号堆”这件事摆到了数学桌面上。

下一个字母会被前一个状态影响。

语言可以被看成一个有依赖关系的随机过程。

Shannon 在 1948 年写《通信的数学理论》时,也用了类似的思想。

他让读者看零阶、一阶、二阶乃至更高阶的英文近似。

阶数越高,生成出来的文本越像英文。

这件事很重要。

它说明“像语言”这件事,可以从局部条件概率里逐步长出来。

后来,n-gram language model 直接把这件事工程化:

用前 n-1 个词,预测下一个词。

这就是语言模型早期最标准的形态之一。

Bengio 等人在 2003 年提出 neural probabilistic language model 时,指出传统 n-gram 会遇到维度灾难。

他们的办法不是放弃“预测词序列概率”这个问题,而是用神经网络学习词的分布式表示,让相似上下文之间能够泛化。

再往后,GPT-2 把事情说得更直白:

大模型用一个简单目标训练:

给定前面的词,预测下一个词。

然后在大量网页文本上,这个目标里自然包含了问答、翻译、摘要、阅读理解等任务的“自然示范”。

GPT-3 又进一步展示,扩大模型和数据以后,少样本能力会明显增强。

这不是说论文作者早就把今天的一切都预言出来了。

更准确地说,他们一层一层证明了同一件事:

序列预测不是边角料,它是通向语言智能的一条主干道。

到了 Agent 这里,另一条文献线也接了上来。

强化学习里的 MDP/POMDP 关心的不是下一个词,而是:

在当前状态下,采取什么行动,会把系统带向更好的未来?

于是,语言模型这条线和强化学习这条线,在 Agent 上碰头了。

一个负责从文本里学会世界的影子。

一个负责在世界里选择下一步行动。

这就是马尔可夫思想在 AI 里的真正影响。

它没有只留下一个“马尔可夫链”的公式。

它留下了一种看世界的方式:

不要先问全部历史是什么。先问当前状态够不够好,以及下一步应该是什么。


七、LLM 是不是马尔可夫链?

这个问题很容易回答错。

如果你说:

“LLM 就是马尔可夫链。”

不准确。

因为普通的一阶马尔可夫链只看当前 token:

P(x_t | x_{t-1})

而 LLM 看的是整个上下文:

P(x_t | x_1, x_2, ..., x_{t-1})

它不是只看前一个词。

所以它不是传统意义上的“一阶词级马尔可夫链”。

但如果你说:

“LLM 和马尔可夫没有关系。”

也不准确。

LLM 的生成方式,本质上仍然是一步一步的条件概率分解:

$$P(x_1, x_2, …, x_T) = \prod_{t=1}^{T} P(x_t | x_{<t})$$

或者说:

整段文本的概率
= 第一个词的概率
× 第二个词在第一个词之后的概率
× 第三个词在前两个词之后的概率
× ...

LLM 每一步都在问:

基于目前已经生成的一切,下一个 token 应该是什么?

这和马尔可夫精神高度一致。

关键区别在于:“当前状态”变复杂了。

对一阶马尔可夫链来说:

当前状态 = 上一个词

对 n-gram 来说:

当前状态 = 前 n-1 个词

对 Transformer 来说:

当前状态 = 整个上下文经过 Attention 压缩后的隐藏表示

再工程一点:

当前状态 = tokens + position + residual stream + KV cache

这才是重点。

LLM 并没有摆脱“状态 → 下一步”的框架。

它只是把“状态”做得巨大、连续、可学习。

一阶马尔可夫链的状态像一个路牌。

LLM 的状态像一张会自己折叠的地图。

前者只告诉你“你站在哪个点”。

后者把你到目前为止走过的路、路上的标记、任务目标、语气、隐含规则,全都压进一个高维空间里。

然后问:

下一步往哪里走?

这就是为什么我说,马尔可夫的幽灵仍然在 LLM 里。

它不再是简陋的转移矩阵。

它变成了一个会学习状态表示的巨型机器。


八、从下一个词,到下一步行动

如果故事到 LLM 为止,马尔可夫已经很重要了。

但真正有意思的是 Agent。

因为 Agent 不只是预测下一个词。

它要预测下一步行动。

一个 Agent 的循环,通常长这样:

观察环境
更新上下文
思考下一步
调用工具 / 写文件 / 执行命令
得到新结果
继续

这不就是马尔可夫链吗?

差一点。

更准确地说,它像一个 马尔可夫决策过程(MDP)。

普通马尔可夫链只有状态转移:

状态 → 状态

MDP 多了两个东西:行动和奖励。

状态 + 行动 → 新状态 + 奖励

用一张表看清楚:

MDP 组件Agent 里的对应物
状态 State当前上下文、文件内容、工具返回、任务目标
行动 Action调用工具、搜索、编辑文件、运行测试、回复用户
转移 Transition行动之后环境如何变化
奖励 Reward任务是否完成、测试是否通过、用户是否满意
策略 PolicyAgent 选择下一步行动的规则

严格说,真实 Agent 往往看不到完整的世界状态。

它只看到一部分观察结果:终端输出、网页片段、文件内容、工具返回、用户新指令。真正的世界比它看到的更大。

所以工程上更准确的模型,是 部分可观测马尔可夫决策过程(POMDP)。

但直觉没有变:

观察结果 → 更新信念状态 → 选择下一步行动

Agent 的上下文,就是它对“当前世界”的信念状态。

所以 Agent 的核心问题不是:

下一个 token 是什么?

而是:

在当前状态下,下一步做什么最有可能推进目标?

这就是从语言模型到行动模型的转变。

LLM 预测的是文本序列。

Agent 预测的是行动序列。

LLM:
文本状态 → 下一个 token → 新文本状态

Agent:
世界状态 → 下一个 action → 新世界状态

这也是为什么强化学习会自然出现。

因为一旦你有了“行动”,就必须面对“好行动”和“坏行动”的区别。

一句话接得通顺,不代表工具调用正确。

一个计划看起来漂亮,不代表执行后不会删错文件。

一个网页浏览动作看起来合理,不代表它真的找到关键证据。

Agent 不是在纸面上写句子。

Agent 在改变环境。

一旦你改变环境,世界就会回你一巴掌,或者给你一个奖励。

这就是 MDP 的世界。


九、Claude Code 为什么像一个马尔可夫系统

拿 Claude Code 这种 coding agent 来看,马尔可夫味道更明显。

当它接到一个任务,比如:

修复这个测试失败的问题。

它不会直接凭空写答案。

它会一轮一轮推进状态:

状态 1:只知道用户的问题
行动 1:读测试输出

状态 2:知道哪个测试失败
行动 2:搜索相关代码

状态 3:知道失败代码路径
行动 3:打开文件

状态 4:知道实现细节
行动 4:修改代码

状态 5:代码已变更
行动 5:运行测试

状态 6:测试通过 / 失败
行动 6:继续修复或总结

每一步的行动,都依赖当前状态。

而当前状态,不只是聊天记录。

它包含:

用户目标
代码库结构
已读文件
命令输出
测试结果
工具权限
尚未解决的问题
已经做过的修改

这就是一个高维状态。

Claude Code 做得好的地方,不是“会写代码”这四个字。

更准确地说,是它能在一个不断变化的状态空间里,反复选择下一步行动。

这和传统 IDE 自动补全不同。

自动补全只问:

下一行代码可能是什么?

Coding agent 问的是:

为了完成这个目标,我下一步应该看哪里、改哪里、跑什么、验证什么?

这就是从 token prediction 到 action prediction 的跃迁。

马尔可夫链的影子还在。

只是“状态”从一个字母,变成了整个代码库和任务上下文。

“转移”从一个符号接另一个符号,变成了读文件、改代码、运行测试。

“概率”从一张小小的转移表,变成了一个大模型在高维空间里的判断。


十、马尔可夫性的陷阱

到这里,马尔可夫看起来像万能钥匙。

但它也有陷阱。

陷阱在那句话里:

下一步只依赖当前状态。

问题是:

你的当前状态够不够?

如果状态太薄,你会忘掉关键历史。

比如一个客服 Agent,只把用户最后一句话当状态:

用户:那就按刚才那个方案吧。

如果它忘了“刚才那个方案”是什么,它就完了。

如果状态太厚,你又会算不动。

把整个互联网、整个代码库、所有历史对话、所有工具输出都塞进状态,理论上当然最好。

但上下文窗口、注意力成本、检索质量、噪声干扰,会一起把你拖垮。

所以现代 AI 系统真正难的地方,是状态设计。

哪些历史必须保留?
哪些可以压缩?
哪些应该检索?
哪些必须遗忘?
哪些要写进长期记忆?
哪些只放在当前上下文?

这就是为什么 RAG、Memory、Context Engineering、Agent State 这些概念会变得重要。

现在流行的 OpenClaw 这类个人 Agent,以及 OpenAI Agents SDK 里强调的 model-native harness,也是在回答同一个问题。

表面上,它们是在加工具、加浏览器、加终端、加文件系统、加长期记忆、加权限边界。

更底层地看,它们是在构造一个模型每一步都能看见、能操作、能被约束的世界。

也就是在问:

下一步行动发生之前,系统应该把什么交给模型?

它们都在围绕同一个问题打转:

怎样构造一个足够好的“现在”,让模型能做出正确的下一步?

这句话比“提示词怎么写”更底层。

提示词只是状态的一部分。

工具返回是状态的一部分。

文件系统是状态的一部分。

用户目标是状态的一部分。

历史决策也是状态的一部分。

Agent 工程的核心,不是把 while 循环写出来。

while 循环很简单。

难的是每一轮循环开始时,模型手里拿到的“当前状态”到底长什么样。


十一、三条暗线终于接上了

现在,把我们前面写过的几条线放在一起。

Shannon 说:

理解就是压缩。

Bayes 说:

学习就是更新信念。

Markov 说:

智能体总要站在现在预测下一步。

这三句话合在一起,就是 LLM 和 Agent 的骨架。

Shannon:
把历史压缩成结构。

Bayes:
看到新证据后更新分布。

Markov:
基于当前状态选择下一步。

LLM 生成文本时,这三件事同时发生:

上下文被压缩成隐藏表示      ← Shannon
下一个 token 分布被更新     ← Bayes
模型从当前状态走向下一步    ← Markov

Agent 行动时,也是这三件事同时发生:

环境信息被压缩成上下文      ← Shannon
工具结果更新任务信念        ← Bayes
下一步行动从当前状态选出    ← Markov

所以马尔可夫不是一篇“概率论科普”的孤立主题。

它是我们整个 AI 理解框架里的第三根柱子。

Shannon 给了我们“信息”的眼睛。

Bayes 给了我们“学习”的眼睛。

Markov 给了我们“过程”的眼睛。

没有 Markov,我们很难理解为什么“预测下一个词”能长出语言能力。

也很难理解为什么 Agent 的本质不是一组工具,而是一条不断展开的行动轨迹。


十二、他没有想到的事

让我们回到普希金。

马尔可夫数元音和辅音的时候,关心的是概率论里一个很技术的问题:

独立性假设能不能被放宽?

他要证明的是:即使变量之间有依赖,某些极限定理仍然成立。

这听起来很窄。

窄到几乎不像一个会改变世界的问题。

但很多伟大的思想,刚出现时都是这样。

Shannon 一开始在解决电话线怎么传信号。

Bayes 一开始在解决一个概率论遗稿里的反问题。

Markov 一开始在数普希金诗句里的元音和辅音。

他们都没有在“发明 AI”。

但他们都给了 AI 一块地基。

马尔可夫留下的那块地基,可以浓缩成六个字:

状态决定下一步。

当然,这句话必须小心理解。

不是说命运已经写好。

不是说未来没有自由。

而是说:如果你想让机器在时间中行动,你必须给它一个状态,让它能从这个状态推出下一步。

这就是从文本补全到代码代理、从聊天机器人到自动驾驶、从游戏 AI 到机器人控制都绕不开的东西。

智能不是静态的。

智能总是在时间里展开。

而只要智能在时间里展开,马尔可夫的幽灵就在那里。

他站在每一个“下一步”背后。


本文涉及的公众号文章

  • 《Shannon 没有想到的事——当信息论遇上有限算力》
  • 《贝叶斯没有想到的事——一个牧师的赌博公式,如何成为 AI 的第一性原理》
  • 《DeepSeek-R1:一个模型如何学会「思考」》
  • 《LLM 中的概率论:从掷骰子到生成文本》

主要参考与延伸