一个数学家翻开了诗集
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 | 任务是否完成、测试是否通过、用户是否满意 |
| 策略 Policy | Agent 选择下一步行动的规则 |
严格说,真实 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 中的概率论:从掷骰子到生成文本》
主要参考与延伸
- A. A. Markov, Extension of the limit theorems of probability theory to a sum of variables connected in a chain, 1906
- A. A. Markov, An Example of Statistical Investigation of the Text Eugene Onegin Concerning the Connection of Samples in Chains, 1913
- Claude Shannon, A Mathematical Theory of Communication, 1948
- Richard Bellman, Dynamic Programming, 1957
- Daniel Jurafsky and James H. Martin, Speech and Language Processing
- Yoshua Bengio, Réjean Ducharme, Pascal Vincent, Christian Jauvin, A Neural Probabilistic Language Model, 2003
- Andrej Karpathy, The Unreasonable Effectiveness of Recurrent Neural Networks, 2015
- OpenAI, Better Language Models and Their Implications, 2019
- OpenAI, Language Models are Few-Shot Learners, 2020
- Richard Sutton and Andrew Barto, Reinforcement Learning: An Introduction, 2nd edition, 2018
- OpenClaw, Memory
- OpenAI, The next evolution of the Agents SDK, 2026
