# 从文字到行动：NLP、Agent与世界模型的20段故事

全套20篇。资料核查截止2026年9月7日。按技术问题与方法转折编排，部分篇章明确回溯时间；不是所有技术先后替代的年表。

从第1篇顺读即可；每篇保留自身问题、解释与参考资料。正文中的“设想”为机制演示，实际研究与产品资料另行标注来源。

## 目录

- [01　“研究生命起源”，怎么冒出了一个研究生？](#chapter-01)
- [02　给电脑一本词典，它就能当翻译吗？](#chapter-02)
- [03　一个只会接话的程序，为什么像是听懂了？](#chapter-03)
- [04　规则写不完，机器开始数词了](#chapter-04)
- [05　没见过这句话，机器凭什么猜？](#chapter-05)
- [06　一句话没读完，前面已经忘了？](#chapter-06)
- [07　翻译时，可以回头看原文吗？](#chapter-07)
- [08　Transformer：词与词之间，怎样直接交换信息？](#chapter-08)
- [09　填空和接龙，怎么成了训练方法？](#chapter-09)
- [10　接着写下去，怎么写出了翻译和代码？](#chapter-10)
- [11　会续写，为什么还要专门学回答问题？](#chapter-11)
- [12　答案写得这么像，为什么查不到出处？](#chapter-12)
- [13　多想一会儿，真的能少错一点吗？](#chapter-13)
- [14　看懂一张菜单，还缺哪些本领？](#chapter-14)
- [15　它说改好了，文件真的改了吗？](#chapter-15)
- [16　Codex、Claude Code：从补一句代码，到修一个项目](#chapter-16)
- [17　任务一长，AI为什么开始忘事、返工、提前交卷？](#chapter-17)
- [18　没人教每一步，机器怎样学会玩游戏？](#chapter-18)
- [19　现实里试错太贵，能不能先在模型里练？](#chapter-19)
- [20　生成一个能走进去的世界，就掌握它的规律了吗？](#chapter-20)

---

<a id="chapter-01"></a>

## 01　“研究生命起源”，怎么冒出了一个研究生？

设想你给一个文字处理程序输入了六个字：

> 研究生命起源

你想讨论生命从哪里来。程序处理完，交出的结果却是：

> 研究生／命／起源

生命起源还没研究，一位研究生先被分配了出来，旁边孤零零地站着一个“命”字。

程序没有漏字，也没有认错字。六个字按原顺序排着，问题只出在两道分隔线上。你希望它得到的是：

> 研究／生命／起源

这两种切法，足够让后面的处理走向不同方向。如果下一步是按词查翻译词典，程序拿着“研究生”去查，得到的就会是一个人的身份，原本表示动作的“研究”已经不在了。

计算机能够保存、显示每个汉字，为什么还会在这里出错？

因为认出有哪些字，与判断哪些字应该组成一个词，是两件事。要找出这位研究生怎么来的，得看看程序究竟按什么办法切词。

### 一、电脑收到的是字，工作却可能要按词做
中文平常不在每个词之间留空格。“研究生命起源”写在纸上，没人觉得少印了什么。但如果要求程序逐词查询、统计或翻译，它就必须确定：应该先取“研究”，还是先取“研究生”？

把连续文字划分成词的过程，就叫分词。

为什么不干脆一个字一个字处理？当然可以这样设计系统。但如果当前工作明确要按词进行，就不能把字和词混为一谈。查“生命”的意思，和分别查“生”“命”的意思，并不是同一次查询。两个字的解释堆在一起，也不会自动拼成一个词的解释。

在许多按词工作的传统中文处理系统中，分词因此处在前面的环节。后面的翻译程序即使十分认真，也可能认真地翻译一位原文里并不存在的研究生。错误已经装进了它收到的材料。[2](https://aclanthology.org/O03-4002.pdf)

这也解释了分词在这段技术史中的位置：它先为按词查询、统计等工作准备输入。后来的系统可以采用不同文本单位，但在眼前这个查词任务里，边界没定好，后续再精巧也可能先查错对象。

于是，一个很自然的方案出现了：既然要找词，给程序一本词典不就行了吗？

### 二、词典里都有，反而更难选了
继续这个设想。为了看清操作，我们给程序准备一份只收六个词的小词表：

> 研究、研究生、生命、命、起源、招生

再规定一条办法：从左往右处理，每到一个新位置，都选词表里能够匹配的最长词。选好后，跳过这些字，接着处理剩下的部分。若一个词也找不到，就暂时把当前这个字单独留下，再往后走。

这叫正向最大匹配。“正向”表示从左往右，“最大”指的是优先选择更长的匹配结果。它是词典分词中的一种经典办法。[2](https://aclanthology.org/O03-4002.pdf)

现在把“研究生命起源”交给它。

第一步，从“研”字开始查。词表里既有两个字的“研究”，也有三个字的“研究生”。按照最长优先，程序选中“研究生”。

第二步，剩下“命起源”。词表没有“命起源”或“命起”，但有“命”，于是取出“命”。

第三步，剩下“起源”，正好也在词表里。处理结束。

结果就是开头那位研究生。每一步都遵守了规则，没有一步检查整句话是不是还在讨论生命。

这种经典词典方法，把“找不到词界”的问题缩成了“在已有候选中按长度选一个”。它为什么值得采用？试试同一词表里的另一句话：

> 研究生招生

从左边选“研究生”，再选“招生”，这次就符合原意。较长的已知词有时确实应该保留完整，不能总把它拆散。最长优先给了程序一个明确、容易执行的选择办法，也省去了在每个位置反复比较整句切法的麻烦。

“研究生”在词典里合法，在“研究生招生”里也合适；到了“研究生命起源”里，它却占用了本该留给“生命”的那个“生”。一个词局部匹配成功，并不能保证后面仍然切得合适。

### 三、删掉研究生，问题也不会毕业
最直接的修补，是把“研究生”从词表里删除。

再按原规则处理“研究生命起源”：第一步只能选“研究”，接下来选“生命”，最后选“起源”。结果对了。

可是，再处理“研究生招生”，程序先取“研究”，剩下的“生”在词表里找不到，只好按约定单独留下，最后取“招生”。于是得到“研究／生／招生”。为了修好生命起源，我们把招生简章切坏了。

那就把“研究生命”整个收入词表，让它抢在“研究生”前面？程序确实会优先取出这四个字，但结果变成“研究生命／起源”。如果我们的目标是分出“研究”和“生命”这两个词，问题仍未解决。

这也说明，补词典和处理歧义承担着不同的工作。缺少一个新的人名、地名或专业词，可以考虑补进去；两个已知词争用同一个字，就还需要选择依据。

到这里，需要改变的是选择办法：保留“研究”和“研究生”两个候选，再寻找理由决定这里该选谁。后面的字、相邻词怎样搭配，都可能提供线索；但线索具体如何变成程序的决定，还需要另外设计，不能只对它说一句“结合上下文”。

真实研究也碰到了扩充词表之外的问题。1996 年，Wong 和 Chan 研究如何给识别后的文字分词时，把最大匹配和统计信息结合起来：先按词典切；遇到某些留下单字的情形，再比较相邻片段的其他组合。原先一次定下来的切法，获得了局部复查的机会。[1](https://aclanthology.org/C96-1035.pdf)

这不是说见到单字就该重切。“命”可以独立成词，“生”也可以出现在别的表达里。单字在那种方法中是触发复查的线索，选择结果还要依靠它使用的统计依据。只换成“尽量别留下单字”，也不过是把最长优先换成了另一条可能误判的规则。

我们的两个例句说明了为什么需要额外依据，却不能证明某一种后续方法已经解决了所有歧义。词典还可以继续使用，只是词长不该独自决定每一次切分。

### 四、两种切法，也可能指着同一个人
还有一种分歧，不能全算在程序头上。2003 年的首届国际中文分词评测报告指出，研究者使用着不同的切分标准；报告还提到，此前国内评测中，“毛／泽东”与“毛泽东”都曾被允许作为结果。前者把姓和名分开，后者保留整个人名。[3](https://aclanthology.org/W03-1719.pdf)

人还是同一个人，词的边界却不同。这与把“生命”里的“生”挪给“研究生”有区别：一边是采用何种标注约定，一边是在本篇指定含义下切坏了词。要比较程序，先得说明目标切法遵循什么标准。2003 年那次国际评测就分别按对应标准严格评分，不能遇到错误再临时换一套答案。[3](https://aclanthology.org/W03-1719.pdf)

分词开始接受共同评测时，问题也从“这次切得顺不顺眼”，变成了“按事先约定的目标，能处理多少未见过的文本”。否则，研究生刚被误切出来，程序又替自己改了评分标准，招生与毕业一条龙办理，错误反倒无处登记。

回到开头，那位研究生是被“最长优先”的规则切出来的。词典给了程序候选，规则替它过早作了决定；删词能救回一句生命起源，却又损坏了招生简章。要处理这种冲突，程序还得利用词长之外的依据。

即使我们已经得到“研究／生命／起源”，翻译也只拿到了准备好的材料。这三个词该选什么译法、怎样排列，又是下一道问题。

研究生可以留在招生简章里了。翻译程序还不能下班。

### 参考资料
1. Pak-kwong Wong、Chorkin Chan，*Chinese Word Segmentation based on Maximum Matching and Word Binding Force*，1996，COLING。[论文全文](https://aclanthology.org/C96-1035.pdf)
2. Nianwen Xue（薛念文），*Chinese Word Segmentation as Character Tagging*，2003，Computational Linguistics and Chinese Language Processing。[论文全文](https://aclanthology.org/O03-4002.pdf)
3. Richard Sproat、Thomas Emerson，*The First International Chinese Word Segmentation Bakeoff*，2003，SIGHAN。[评测报告全文](https://aclanthology.org/W03-1719.pdf)


---

<a id="chapter-02"></a>

## 02　给电脑一本词典，它就能当翻译吗？

1954 年 1 月 7 日，纽约 IBM 总部的一台电脑接到了一份与计算数字很不一样的工作：把俄语译成英语。

据 IBM 的同期新闻稿，操作员把用拉丁字母转写的俄语输入穿孔卡片，电脑再把英语译文打印出来。卡片是当时给机器输入信息的载体，纸上的孔位记录着字符。输入的人不会俄语，输出却能让懂英语的人读懂。[1](https://mt-archive.net/IBM-1954.pdf)

这场由乔治敦大学与 IBM 合作的演示留下了一个诱人的画面：人把陌生文字送进去，机器把能读懂的文字交出来。

但要让这幅画面成立，中间发生了什么？如果只是把俄英词典装进电脑，让它一个词一个词查，这台机器够不够资格当翻译？

上一篇从中文分词入门，这一篇把时间拨回早期机器翻译。先假定词已经找到，看看更换语言时还会遇到什么。

### 一、词典列出了答案，却没有替你选好
主持乔治敦方面工作的 Léon Dostert 选择了一项有限的实验。研究语言问题的 Paul Garvin 与负责编程的 Peter Sheridan 等人，需要把翻译中的判断写成机器能够执行的步骤。那场实验的词汇范围很小，约有 250 个词汇项，其中包括词干和词尾，而非 250 个完整句子的对照表。[1](https://mt-archive.net/IBM-1954.pdf)[2](https://open.unive.it/hitrade/books/HutchinsFirst.pdf)

词干可以理解为一个词中承担主要意义的部分，词尾则可能随着它在句子里的用法变化。例如，英语单数的 cat 和复数的 cats，后者多出的 s 表示不止一只猫。这里仅用熟悉的短例说明拆分思路，演示系统实际处理的是俄语。

这种词典能告诉程序某个词有哪些译法。可是，候选译法越齐全，程序越需要知道此刻该用哪一个。

先设想一个今天的查词场景：英语 bank 既可以指银行，也可以指河岸。把两个意思都列出来，词典工作完成了，翻译工作却还卡着。要是每见一次 bank 都选“银行”，河边散步的人迟早会走进金融机构；永远选“河岸”，存款又无处安放。

这与上一篇“研究”和“研究生”争一个字有些相似：候选都可以成立，当前句子却只需要其中一种。分词已经做完，多出来的空格帮不了这个忙。

Garvin 后来回顾那场实验，把翻译中的基本决定分成两类：选择，以及排列。选择是确定该输出哪个译法，排列是决定译出来的部分按什么次序出现。词典提供材料，程序还需要执行这两类决定。[3](https://mt-archive.net/50/Garvin-1967.pdf)

### 二、译文里的词，需要重新排队
设想我们要做一台极简的中英翻译器，先只处理下面这种句子。这是说明机制的自拟例子，不是 1954 年系统的复刻。

> 我／把／书／放在／桌上。

如果仅按原顺序换词，程序会先拿到“我”，再碰到“把”，之后才是“书”和放置动作。但这里的“把”主要在提示：后面的书，是接下来要被放置的东西。它不需要在英语里单独占一个同样的位置。

我们可以为这个小程序预先写好一个模板：遇到“某人把某物放在某处”，先输出做事的人，再输出放置动作，随后是被放的东西，最后是位置。输入里的“把”用于识别这个模板，不单独翻译。

程序先认出四块材料：做事的人是“我”，物品是“书”，动作是“放”，位置是“桌上”。再分别取出事先存好的英语片段，按规定的次序拼接，得到：

> I put the book on the table.

它表示“我把书放在桌上”。即使你不懂英语，也可以核对操作：原句里的物品在动作前面，译文里动作排到了物品前面；“把”帮助识别关系，随后不再单独输出。

再把输入换成“我把杯子放在桌上”。只要词典补有“杯子”的对应片段，原模板就还能使用。我们没有为每一句话分别保存整句译文，而是让不同的物品进入同一种结构。

规则的价值就在这里。它把一类判断写成可重复执行的操作，机器不必每次重新发明翻译办法。

1954 年的实验也已经超出了逐词替换。它给词汇项附上控制标记，让程序查相邻项的标记，决定选哪个译法或是否调整次序。Garvin 的回顾明确说明，那套办法的观察范围被限制在紧邻的项目，选择也受到严格限制。[3](https://mt-archive.net/50/Garvin-1967.pdf)

我们的模板靠“把”识别结构，历史系统靠预先附加的标记触发规则，两者不是同一套程序。共同之处是：查到词以后，还要依照可识别的条件做决定。

但规则总有适用条件。把句子稍微改成“我把书放回桌上”，原先只认“放在”的小程序就匹配不上。给它增加“放回”的处理不难；再遇到“别把书放在桌上”，还要识别禁止；遇到“我没把书放在桌上”，又得处理事情没有发生。

词典里那些词可能一个都不少。摆放图书的业务，却已经从操作说明扩展到了禁令和情况汇报。

### 三、六条规则，不能直接乘成整种语言
回到纽约的演示。新闻稿把系统概括为使用六条规则。这个数字容易让人产生一种想法：六条就能翻译这些句子，那么规则再多一些、词典再厚一些，剩下的工作是不是主要靠继续添加？

参与者的回顾揭示了另一层限制。实验只解决了选定的问题，有些原本还需要更多判断的地方，直接在词典里放入了适用于输入句子的译法。它证明这些选定操作可以交给机器执行，却没有证明每一个尚未解决的问题都能用相同办法顺利补齐。[3](https://mt-archive.net/50/Garvin-1967.pdf)

这并不抹去演示的意义。从事后写出一段正确译文，到把规则变成能运行的程序，是实际的进展。但扩大适用范围时，必须检查新表达需要什么判断，不能只数增加了多少词条。

1960 年，研究者 Yehoshua Bar-Hillel 用一个很短的例子追问这件事。他设想一个孩子寻找玩具盒，最后发现盒子在 pen 里面。这里的 pen 有两种候选解释：书写用的笔，或者供幼儿活动的围栏。[4](https://mt-archive.net/Bar-Hillel-1960-App3.pdf)

读者通常会选围栏。关键不仅在于句子附近出现了“孩子”和“玩具盒”，还在于普通玩具盒与普通笔的尺寸关系：盒子可以放进围栏，却放不进一支笔。语法给出了“某物在某物里面”的关系，日常知识帮助判断哪一组物体符合这个关系。

现在，词典面临的新任务是：除了记住 pen 有两个意思，还得给程序提供选择时用得上的知识。要处理这个例子，可以补充容纳关系和物体尺寸；但只补一句“遇到玩具盒就选围栏”，仍然只照顾了一小片场景。

这位找盒子的孩子，是研究者明确设置的论证例子，不是一场真实的机器翻译事故。Bar-Hillel 对完全自动的高质量翻译作出了悲观判断，那是他的历史观点。这个例子能说明常识会参与译义选择，并不能据此断言后来的机器永远解决不了它。[4](https://mt-archive.net/Bar-Hillel-1960-App3.pdf)

研究者原本在安排词语的位置，走着走着，连玩具盒能装进什么地方也得考虑。一本词典若只说“两个意思都有，请自行选择”，就像给迷路的人递来两张方向相反、印刷同样精美的地图。语言处理的工作范围，被一句普通话拉出了词典。

### 四、打印出译文，还不等于完成翻译工作
到 1966 年，美国自动语言处理咨询委员会发布《语言与机器》报告，评估机器翻译时关注的是实际材料能否得到有用译文。报告采用的全自动标准排除了人工翻译和事后编辑；按这个标准，它对当时一般科学文本的机器翻译给出了否定评价。[5](https://nap.nationalacademies.org/resource/alpac_lm/ARC000005.pdf)

如果机器很快打印一页文字，人却要逐句找错、改顺、确认专业意思，那么打印机的速度并不等于交付译文的速度。打印机已经宣布下班，编辑的工作可能才刚开始。评价对象需要包括后面的人工工作。

报告同时建议支持计算语言学研究、改进人工翻译流程以及评估机器辅助翻译。它没有把“今天达不到完全自动”写成“所有语言研究都应该停止”。不同程度的人机分工，仍然是值得研究的选择。[5](https://nap.nationalacademies.org/resource/alpac_lm/ARC000005.pdf)

再看开头那个输入与输出的画面，中间已经清楚得多了：词典给出候选，规则决定选择与排列；输入一旦超出规则覆盖的范围，还可能需要更广的上下文、常识或人工判断。

所以，一本词典不足以让电脑当好翻译。早期系统的重要进展，是把部分翻译判断变成了能执行、能复用的操作。它们留下的难题则是：怎样让这些操作覆盖真实文本，而不让每一次新表达都成为一次补规则的工程？

1954 年，那台机器已经可以把句子打印出来。要让读者放心读下去，还有许多工作要做。

### 参考资料
1. IBM，*701 Translator*，同期新闻稿，档案转载页标注 1954 年 1 月 8 日，正文电头为纽约 1 月 7 日。[档案全文](https://mt-archive.net/IBM-1954.pdf)
2. John Hutchins，*The First Public Demonstration of Machine Translation: The Georgetown-IBM System, 7th January 1954*，2006 年修订稿，扩展自 2004 年 AMTA 会议论文。[研究全文](https://open.unive.it/hitrade/books/HutchinsFirst.pdf)
3. Paul L. Garvin，*The Georgetown-IBM Experiment of 1954: An Evaluation in Retrospect*，1967 年收录于 William M. Austin 编 *Papers in Linguistics in Honor of Léon Dostert*，Mouton，第 46—56 页。[参与者回顾及原始程序资料](https://mt-archive.net/50/Garvin-1967.pdf)
4. Yehoshua Bar-Hillel，*A Demonstration of the Nonfeasibility of Fully Automatic High Quality Translation*，1960 年，*The Present Status of Automatic Translation of Languages* 附录三，*Advances in Computers* 第 1 卷。[原文](https://mt-archive.net/Bar-Hillel-1960-App3.pdf)
5. National Research Council／Automatic Language Processing Advisory Committee，*Language and Machines: Computers in Translation and Linguistics*，1966 年。[报告全文](https://nap.nationalacademies.org/resource/alpac_lm/ARC000005.pdf)


---

<a id="chapter-03"></a>

## 03　一个只会接话的程序，为什么像是听懂了？

设想你在键盘上敲下一句：“我担心明天的考试。”屏幕很快回答：“你为什么担心明天的考试？”

你继续说：“因为我觉得自己准备得不够。”它又问：“你经常觉得自己准备得不够吗？”

这段对话是为解释机制编的。它听上去像有人在认真追问，但也有一种更省事的可能：对方根本没有判断你准备得怎样，只是把你刚输入的文字拆开，又装进了一个问句。

1966 年，麻省理工学院的 Joseph Weizenbaum 发表了 ELIZA 论文，展示了一种能够进行文字对话的程序。它最著名的一类脚本模仿心理访谈中的追问方式。这里讨论它的文本操作，不把程序当作有诊断能力的治疗工具。[1](https://courses.cs.umbc.edu/331/papers/eliza.html)

上一篇的翻译器需要把话译对。聊天程序却给研究者提供了另一种处境：只要回应能够让谈话继续，对方有时就愿意接着说。于是，一个值得追问的问题出现了：连贯的回应里，有多少来自程序的操作，又有多少来自人的解释？

### 一、先找到一句可以接的话
继续开头的设想。我们为小程序写一条规则：输入里出现“我担心”时，把后面的文字保存下来，再放到“你为什么担心……？”这个句式里。

输入是“我担心明天的考试”。程序找到了“我担心”，截取余下的“明天的考试”，拼成问句。它既没有检查考试时间，也没有掌握你的复习进度。

把输入换成“我担心冰箱里的西瓜”，同一条规则照样得到“你为什么担心冰箱里的西瓜？”这次对象变了，操作完全一样。西瓜得到了与考试同等郑重的关注，主要因为它站在同一个位置。

这就是模式匹配：检查输入是否符合预先指定的文字形状，把符合位置的片段取出来。随后进行重组，用选定的句式重新安排这些片段。ELIZA 原论文明确讨论了分解规则与重组规则，两者配合产生回应。[1](https://courses.cs.umbc.edu/331/papers/eliza.html)

不过，如果程序每次都在全部规则里找一遍，写得越多，查找就越麻烦。原系统先识别关键词，再尝试与关键词关联的规则；关键词还可以有优先顺序。句子同时提到几个可回应的话题时，优先顺序会影响先处理哪个。[1](https://courses.cs.umbc.edu/331/papers/eliza.html)

在我们的中文版演示里，可以设想先检查“担心”，再检查其他类别。这里的顺序由人预先规定，并不代表程序经过考虑后认定考试比西瓜重要。它从输入里选择了一个入口，这已经足够让对话继续一轮。

从早期翻译到这类对话，规则仍在发挥作用，但目标变了：翻译的错误会暴露在译文里，追问却可以把进一步说明的任务交还给用户。

### 二、把“你”和“我”调换，句子就像有了立场
只截取尾巴还不够。有些回应需要处理说话者的关系。

再设想输入：“我觉得你不相信我。”我们规定把它拆成“我觉得”“你”“不相信”“我”四块，取出中间表示态度的“不相信”，然后放入“是什么让你觉得我……你？”这个新句式。结果便是：“是什么让你觉得我不相信你？”

原输入中被指责的是“你”，也就是程序；程序回应时，这一方要变成“我”。原输入里的“我”指用户，回应里则要改成“你”。这种转换改变了人称关系，却没有验证双方究竟相信什么。

Weizenbaum 在论文里用英语说明过类似的拆分和重组：抓住指定词与其间片段，调整人称，再加上一个预设开头。上面的中文句子是对此类操作的演示，不是原程序的中文运行记录。[1](https://courses.cs.umbc.edu/331/papers/eliza.html)

这个差别很容易被流畅的句子掩盖。我们读到“我不相信你”，会自然把“我”理解成一个正在表达立场的说话者；但在程序里，它也可能只是重组模板中固定的一块文字。代词已经站对了位置，立场却未必存在。

如果把输入改成“我觉得你在冰箱里跳舞”，同一类模板也可能问：“是什么让你觉得我在冰箱里跳舞？”句法仍然通顺，常识已经有点冷了。程序可以对荒唐前提进行形式上合适的追问，因为它执行的是转换，不是核查。

这也说明了规则的能力和边界。它能保留用户输入中的具体内容，所以比每次都回答“请继续”更贴近谈话；但贴近可以来自复制与重组，不能仅凭这一步推断它拥有相应经历、信念或世界知识。

### 三、接不上时，怎样让谈话不断线
实际聊天不会永远提供规整的“我担心……”句子。用户可能只说“嗯”，也可能输入一个脚本没有覆盖的话题。若程序立即沉默，刚建立的对话感就会消失。

ELIZA 的设计因此还包括没有找到合适关键词时的回应办法：可以使用不依赖具体内容的句子，也可以在特定条件下取出较早生成并保存的材料。原论文把这一问题单独列为系统需要解决的事项。[1](https://courses.cs.umbc.edu/331/papers/eliza.html)

为了看清区别，设想我们的小程序刚保存过“明天的考试”。用户随后只输入“唉”，当前规则匹配失败，于是程序按预定条件取出保存的片段，问：“再说说明天的考试？”用户可能觉得它一直记挂着这件事；实际操作则是保存一段文字，在某个分支中再次使用。

这比没有记忆的固定问答多了一步，但也别把它看成已经记住了你的全部情况。要检验保存了什么，可以继续问：“我刚才说考试在哪一天？”一个只存片段、没有相应查询规则的程序，未必能按你期待的方式回答。保存过文字与能灵活利用文字，不是同一种能力。

原系统还有一个重要安排：关键词和转换规则组成脚本，脚本与执行这些规则的程序分开。换脚本能够改变对话方式，而不必把整个程序重写一遍。这把“怎么执行匹配”与“遇到什么话该怎样接”分成了不同工作。[1](https://courses.cs.umbc.edu/331/papers/eliza.html)

这时，程序看上去学会了新话题，实际可能是编写者给它增加了新规则。这里的“学习”如果不说清来源，就容易让人工编辑穿上自动成长的外套。

### 四、一段顺畅对话，到底证明了什么
ELIZA 留给后来的问题，并不只是程序能否接上下一句。Weizenbaum 的原论文开头就在讨论：当程序内部的步骤被清楚解释出来，人们对它的评价会怎样改变。[1](https://courses.cs.umbc.edu/331/papers/eliza.html)

开头那两轮考试对话，可以同时包含真实的交流效果和有限的技术操作。用户确实可能被追问引导，进一步整理自己的表达；程序也确实可能只做了匹配、复制、人称转换和选择模板。不能因为效果有限就否认发生了互动，也不能因为发生了互动就把所有人类能力一并归给程序。

想分辨它靠什么接话，可以保持句式不变，替换内容；可以把内容保留，却换一种说法；还可以要求它核对前文中的关系。前两种变化分别检验模板是否忽略具体意义、是否过度依赖固定表达，后一种变化则检查它能否使用已出现的信息。这里没有一问定聪明的魔法试题，只有逐步缩小解释范围的比较。

后来的统计与神经方法会改变回应的产生机制。我们不能把它们都说成 ELIZA 式的模板，也不能因为它们不再靠相同模板，就省掉同样的追问：当前表现究竟由什么操作支持，在什么条件下会失效？

回到“我担心明天的考试”。小程序能把它接成一个合适的问题，是因为我们替它规定了怎样找到、截取和重组文字。那句关切可以推动谈话，却还不能证明程序知道考试是什么。

考试仍需你准备。至于冰箱里的西瓜，它暂时只享受到了格式正确的关心。

### 参考资料
1. Joseph Weizenbaum，*ELIZA—A Computer Program for the Study of Natural Language Communication Between Man and Machine*，1966，*Communications of the ACM*。[论文文本](https://courses.cs.umbc.edu/331/papers/eliza.html)、[原刊扫描件](https://cse.buffalo.edu/~rapaport/572/S02/weizenbaum.eliza.1966reprint.pdf)。


---

<a id="chapter-04"></a>

## 04　规则写不完，机器开始数词了

设想输入法收到“今天晚上吃”，要推荐后面的词。写规则当然可以：看见“吃”，就考虑食物；再找时间、地点和其他线索。

但还有一种朴素的办法：看看过去的文字里，“吃”后面经常跟什么。

假设我们有一小批已经分好词的句子，“吃”后面总共出现过十次词语，其中六次是“饭”，三次是“面”，一次是“药”。如果只根据这批假设材料估计，“饭”就排在前面。这里所有次数都是演示数据，不是实际输入法的统计结果。

这种方法没有先写出食物的完整定义，却已经可以做一个有限的预测。它带来的变化是：人不必为每次选择直接规定答案，可以规定怎样从数据估计答案的可能性。

### 一、把语言问题变成一次有条件的猜测
给下一词的不同候选分配概率，是语言模型的一种基本工作。概率在这里表示模型按已有材料估计的可能性，并不承诺接下来的人一定这样说。[1](https://web.stanford.edu/~jurafsky/slp3/3.pdf)

在我们的十次记录中，模型可以给“饭”六成、“面”三成、“药”一成。若每次都取概率最高者，它总推荐“饭”；若按这些概率抽取，偶尔也会选“面”或“药”。两者使用同一组估计，选择方式却不同。预测分数与最后采用哪个候选，是需要分开的两步。

这种最简单的统计如果只看全部词的总次数，会把经常出现的词到处推荐。某个词在全体材料里很常见，也不代表它适合接在“吃”后面。我们因此缩小比较范围：只统计紧接着“吃”的那些位置。

这叫利用条件。问题从“哪个词常见”变成“在前面是吃的情况下，哪个词常见”。把条件换成“服用”，候选的排序就可能不同。统计表开始对语境作出反应，虽然它看的语境还很短。

这种只看前一个词、预测下一个词的办法，通常称为二元语言模型。把前两个词与待预测词一起考虑，就是三元模型。这里的“二”“三”数的是这个小片段里总共有几个词，不是机器拥有几层理解。[1](https://web.stanford.edu/~jurafsky/slp3/3.pdf)

它的节约之处很明确：不必为整段历史单独准备统计，只保留最近几个词。代价也很明确：更早的信息会被这个近似方法忽略。小本子记得很快，翻页以前的嘱咐却可能已经不在当前这页。

### 二、没见过的菜，不能一律判成不存在
现在给演示材料增加一个问题：“今晚想吃馄饨。”词表认识“馄饨”，只是先前十条记录恰好没有出现“吃／馄饨”。如果机械地用次数除以总数，得到的概率就是零。

零在这里很严厉。它没有表达“我见得少，不太确定”，而是把这个接法完全排除了。假如用逐步概率评价整句话，其中一步为零，整条路径的乘积也会变成零。一个没上过这本菜单的菜，连参赛资格都拿不到。

研究者因此发展了平滑方法：从已见事件的概率里留出一些，分给没见过但可能出现的组合；也可以把较长条件的估计，与较短条件的估计结合使用。后者在具体搭配材料不足时，借助更宽泛的统计。[1](https://web.stanford.edu/~jurafsky/slp3/3.pdf)

仍用我们的例子。假设“吃／馄饨”没出现过，但材料里别的位置出现过“馄饨”。较短条件的统计可以给它一个非零基础，再与“吃”后的搭配信息结合。这样，它未必打败“饭”，却不再被宣布绝不可能。

这不会自动解决所有问题。给未见搭配分多少概率，需要有具体算法；分得太多，会稀释可靠的搭配，分得太少，又难以照顾新表达。平滑修补的是有限样本造成的过度确定，不能凭空提供一份完美的语言知识。

看更长的前文似乎能帮忙。例如“医生叮嘱按时吃”与“朋友邀请晚上吃”，对“药”和“饭”的支持不同。但条件越长，完全相同的记录越难再次出现。保留更多上下文，与获得足够统计，开始互相拉扯。

### 三、翻译也可以比较哪一种更有可能
1990 年，Peter Brown 等人在论文《机器翻译的统计方法》中讨论了一套英法翻译系统。他们使用双语材料估计翻译关系，并把候选句子的语言概率与翻译概率结合起来。原文也明确提到，计算资源和机器可读文本的发展，使这条路线更值得实际探索。[2](https://aclanthology.org/J90-2002.pdf)

回到本系列的翻译问题。设想输入一句外语，其意思是“我把书放在桌上”。候选译文可能包括“我把书放在桌上”和“书把桌上放在我”。如果只看两边用了哪些相近的词，第二句也占了不少位置；但按中文搭配估计，它的组织方式就很不自然。

语言模型负责提供一部分这样的约束。不过，单靠“中文读起来顺”，也会选出完全不相关的漂亮句子。“今晚的月色真好”很顺，却不能充当放书指令的译文。

于是还需要另一部分依据：这个中文候选与输入外语之间，是否存在数据支持的对应关系。原论文采用一种反向建模的办法，评价假定的目标句子产生所见源句的可能性，再与目标句子本身的语言概率结合。实际搜索寻找两项合起来较有利的候选。[2](https://aclanthology.org/J90-2002.pdf)

把这两项概括为“像不像目标语言”和“能不能解释输入”，可以帮助理解它们的分工，但翻译模型并不是一位真正核查含义的裁判。它也依赖假设与训练数据，因此两项分数高仍不保证意思完全正确。

为了从双语句子学习对应关系，还要考虑词的位置并不总是一一对应：一个词可能对应另一语言里的几个词，词序也可能变化。原论文用“对齐”表示这些对应安排，再把多种可能的安排纳入概率计算。对齐提供了可计算的路径，没有要求两种语言逐词站成同一排。[2](https://aclanthology.org/J90-2002.pdf)

规则时代要告诉程序什么时候交换位置；统计方法则可以从成对材料估计哪些对应与位置变化比较常见。人的工作仍然存在，只是更多转向模型设计、材料准备和搜索办法。

### 四、数得很多，也可能一直在数同一小块
统计语言模型的力量来自可积累的证据。更多适用材料，通常能让常见模式的估计更可靠；而不同领域的材料，可能给出不同偏好。用药说明里的“吃”和晚餐聊天里的“吃”，不能因为写法相同，就默认候选分布也相同。

但还有一个更根本的限制：如果把每个词当作独立编号，关于某个词的经验不一定能方便地转给另一个词。材料里反复出现“猫吃鱼”，不等于“狗吃肉”这一新组合也已经被记过。短片段统计能通过较短条件兜底，却没有因此获得完整的相似性表达。[3](https://www.jmlr.org/papers/v3/bengio03a.html)

设想一个食堂记录员很熟悉“学生吃面”，新记录却写“研究生吃面”。人很容易利用这两类人的关系，认为原有经验可能有帮助；一个只认编号的计数表，则还需要说明究竟怎样共享。研究生在第一篇惹过切词麻烦，到这里又要为统计表补交身份证明。

后来的神经语言模型会把词表示成可以学习的一组数字，让不同词之间形成可利用的联系。不过，那不是下一张更大的频数表，具体怎样训练这组数字，需要新的步骤。

现在可以回答开头：机器能通过数词来猜下一词，是因为它从已有文本中估计条件概率，再按规定的方法选择候选。它既获得了一种从材料中积累经验的办法，也继承了材料稀少、领域变化与上下文过短的限制。

“饭”排第一，说明这批记录经常这样接。至于你今天究竟想吃什么，统计表还得允许你改变主意。

### 参考资料
1. Daniel Jurafsky、James H. Martin，*Speech and Language Processing*，第3章 *N-gram Language Models*，2026 年8月草稿。[作者发布的章节](https://web.stanford.edu/~jurafsky/slp3/3.pdf)。
2. Peter F. Brown 等，*A Statistical Approach to Machine Translation*，1990，*Computational Linguistics*。[论文全文](https://aclanthology.org/J90-2002.pdf)。
3. Yoshua Bengio、Réjean Ducharme、Pascal Vincent、Christian Jauvin，*A Neural Probabilistic Language Model*，2003，*JMLR*。[论文](https://www.jmlr.org/papers/v3/bengio03a.html)。


---

<a id="chapter-05"></a>

## 05　没见过这句话，机器凭什么猜？

设想一台机器读过“猫吃鱼”“猫喜欢鱼”“狗喜欢肉”，现在要补全“狗吃——”。这几句话是我们自拟的教学材料，不是一份足够训练实际模型的数据集。

如果机器只查“狗吃”后面接过什么，它会发现这一栏空着。上篇的平滑方法可以给没出现过的答案留一点机会，但还有一个更诱人的问题：读“猫吃鱼”时积累的经验，能不能帮“狗吃肉”一点忙？

困难在于，电脑里的“猫”和“狗”，起初可以只是两个不同的编号。编号挨得近，不代表动物亲近。把猫编成7、狗编成8、拖拉机编成9，拖拉机也不会因此获得参加宠物聚会的资格。

### 先把编号换成一组可以调整的数
我们给每个词配上一组数字。这样的数字列表叫向量；与词对应的，就是词向量。机器用它参与计算，而不只是凭编号查一张孤立的次数表。

这里容易发生一个误会：是不是第一格写“是不是动物”，第二格写“爱不爱吃鱼”？通常不是。数字的初值可以没有这些明确含义，它们是在训练中一起调整出来的。一项特征可能分散在多个数字里，同一个数字也可能参与表达多种关系。

为了看清作用，再设想一个人为缩小的例子：猫的表示是两格数字，狗也是两格；两组数越接近，后面的计算就越可能给出接近的反应。这只是演示“相似输入可以共享处理经验”，并非真实模型里猫狗坐标的测量结果。

2003年，Bengio及合作者发表的神经概率语言模型，把学习词的数字表示和预测下一个词放在同一个训练任务中。向量表示与神经语言模型此前已有研究；这篇论文的重要位置，是展示它们怎样联合学习，缓解词组合太多、许多组合没有出现过的困难。[1](https://www.jmlr.org/papers/v3/bengio03a.html)

这时的变化不是给词典加了一栏百科知识，而是让原本各管一摊的词，开始共用计算办法。

### “训练”到底动了什么？
仍用“猫吃鱼”。训练时先把“猫吃”交给模型，要求它为词表里的候选答案分配概率。假设这一轮它把“鱼”分到一成，“椅子”分到八成，其余候选合计一成。数字是设想，作用是暴露问题：模型相当自信地建议猫改善一下家具库存。

原文接下来实际是“鱼”，因此训练程序知道这一轮应该提高哪个答案的概率。它用一个误差指标衡量预测与真实后续的差距；这个指标通常叫损失。把正确词的概率压得越低，这类损失就越大。

然后程序计算：参与预测的那些数字，朝哪个方向微调，能让这一批例子的总损失下降？这种局部变化方向叫梯度。沿着计算过程把影响逐层传回去，叫反向传播。它不是让模型写检讨，而是算出哪些数字该怎样动一点。

能被训练调整、会影响输出的数字统称参数。词向量里的数字是参数，负责组合信息、计算候选分数的数字也是参数。它们共同决定预测。更新一次，不等于永远记住“猫吃鱼”，更不保证每个例子都同时变好；训练反复处理许多批材料，是在共享参数之间寻找更合适的折中。[1](https://www.jmlr.org/papers/v3/bengio03a.html)

与上篇直接数词频相比，这里多了一层可以学习的计算。机器不必为每一种完整组合单独攒够次数，但也因此可能把某处学到的联系错误地带到别处。

### 为什么猫的作业能帮到狗？
把教学材料扩展一下。设想实际训练资料里，猫和狗都反复出现在“喂”“喜欢”“饿了”等相似语境中，而“鱼”和“肉”也常出现在食物相关语境中。

不同句子经过同一套预测计算。为了让这些预测一起变好，训练可能把承担相似作用的词调整到能触发相近反应的位置。这样，“猫吃”所影响的共享计算，也能影响“狗吃”的结果。这就是泛化：把训练中得到的规律用到未见过的输入上。

请留意这个“可能”。我们并没有输入三句话，就在数学上强迫机器推出“狗吃肉”。结果取决于资料、模型、训练过程，以及其他候选的竞争。“狗吃作业”如果在材料里出现很多次，机器也会认真吸取这条教育经验。

2013年的word2vec研究提供了两种高效学习词表示的任务。一种用周围的词预测中间的词，叫连续词袋模型，简称CBOW；另一种用当前词预测附近的词，叫Skip-gram。它们都利用语境关系，但任务方向不同，也不等于完成了一个通用聊天系统。[2](https://arxiv.org/abs/1301.3781)

在自拟句子“这只猫正在吃鱼”里，前一种任务可以遮住“猫”，用附近内容猜它；后一种则从“猫”出发预测附近可能有哪些词。反复训练后，词表示能留下语境关系。所谓“词义”，在这里先以“怎样参与预测才有用”的方式进入了数字。

### 相似不是相等，更不是常识全书
设想材料里“热”和“冷”都经常出现在“水很——”中。它们语境相近，却意思相反。又如“苹果”，可以指水果，也可以出现在手机新闻里；给每个词固定一份表示，必然要把不同用法挤在一起。

因此，看见词向量接近，不能立即翻译成“这两个词意思完全一样”。表示保存的是训练任务认为有用的联系，里面也可能包括偏见、混杂和错误关联。一个擅长预测菜单用词的系统，并不因此知道这道菜是否真的熟了。

Bengio的语言模型还使用有限长度的前文。它让相似组合互相帮助，却没有自动解决“句子很长，重要信息很早出现”的问题。后面我们会换一种信息传递办法，让机器一边读，一边更新状态。[1](https://www.jmlr.org/papers/v3/bengio03a.html)

开篇的答案现在可以说得更准确：机器能猜没见过的句子，是因为训练改变了共享参数，让见过的语境影响新的组合。它获得的不是一张永远正确的答案表，而是一套能迁移、也会迁移错的预测办法。

猫终于不用顿顿吃椅子了。至于狗会不会又吃到作业，还得看它究竟读过什么。

### 参考资料

1. *A Neural Probabilistic Language Model*，Yoshua Bengio、Réjean Ducharme、Pascal Vincent、Christian Jauvin，2003。[论文](https://www.jmlr.org/papers/v3/bengio03a.html)
2. *Efficient Estimation of Word Representations in Vector Space*，Tomas Mikolov、Kai Chen、Greg Corrado、Jeffrey Dean，2013。[论文](https://arxiv.org/abs/1301.3781)


---

<a id="chapter-06"></a>

## 06　一句话没读完，前面已经忘了？

设想我们要把“小王把书还给管理员”译成英文。现在逐渐加料：小王把昨天借来的那本蓝色的书，还给了正在登记新读者的管理员。

人还的是同一本书，句子却像报销流程一样，途中多了好几道手续。机器读到“管理员”时，需要保留谁在还、还什么、此前已经读到了哪里。只看最近几个词，显然容易把主角落在门外。

上一代方法为每次预测截取一个固定窗口。现在的问题是：能不能让早先读到的信息，随着阅读继续往前走？

### 边读边改一份状态
循环神经网络，英文简称RNN，采用一种反复更新状态的办法。这里的状态是一组数字，概括此前输入对当前计算有用的信息。

读“小王”时，用这个词的表示和初始状态算出新状态；再读“把”，把“把”的表示与刚才的状态合起来，再算一次。每一步使用同一套更新规则，但输入和状态不断变化。读得早的词因此有机会通过状态影响后续，而不必等它恰好还在一个短窗口里。[1](https://arxiv.org/abs/1409.3215)

可以把它想成边读边修改便笺，但便笺上没有整整齐齐的“主语：小王”。实际存的是数字，信息通过训练形成的计算关系保留。这个比喻只对应“前一步结果交给下一步”，不意味着机器偷偷写了一份中文摘要。

设想把开头改成“管理员把昨天借来的那本蓝色的书还给小王”。词差不多，顺序变了，状态经过的更新次序也变了。合适的训练应让最终预测反映“谁还给谁”的变化。循环提供了利用顺序的结构，是否学对关系，仍得由数据和结果检验。

和词向量那一篇相比，共享的不只是词之间的经验，还包括不同阅读位置使用的更新办法。一本便笺从头传到尾，页数没增加，肩上的责任倒是越来越重。

### 便笺为什么会越来越难用？
把“昨天借来的”扩成一整段插入说明。开头“小王”的影响，需要穿过许多次状态更新，才能帮助末尾预测。训练时，末尾的误差也要沿着这条链往回传，才能调整前面怎么处理“小王”。

在普通循环网络中，反复相乘的影响可能越来越小，也可能越来越大。前一种让早期步骤收到的调整信号变弱，后一种让调整不稳定。这里说的“忘”，并非一个词过了某个时限被定时删除，而是有用信息难以保留，或者训练难以学会保留它。

1997年，Hochreiter和Schmidhuber提出长短期记忆网络，英文简称LSTM，针对这类长距离学习困难设计了专门的记忆单元和控制结构。[2](https://www.bioinf.jku.at/publications/older/2604.pdf)

先理解其关键选择：如果每读一个新词，都把原有内容大幅改写，保留信息就困难。LSTM提供一条更适合持续保存内部数值的路径，并用学出来的“门”调节信息写入和读出。门是计算出来的数值控制，不是一名管理员判断“这句重要，请存档”。

在还书例子中，我们希望与“小王”有关的信息能穿过颜色、日期等插入内容，同时又把“蓝色”保留到需要翻译颜色时。它不要求所有内容永远不变，而是学习在不同位置怎样更新与使用记忆。好记性也需要选择，否则便笺很快成为会议纪要——什么都写了，谁负责却找不到。

LSTM缓解了训练与保存信息的困难，没有得到无限容量。不同后续版本还调整了门控设计；不能把后来常见的全部结构，都倒写成1997年原版已经具备。

### 读完一段，再生成另一段
还有一个问题：中文输入多少词，英文输出不一定有多少词；两边的顺序也不同。不能规定读一个中文词，就立即吐出一个英文词。

2014年，Sutskever、Vinyals和Le研究了一种序列到序列方法：一个多层LSTM读完输入，把结果交给另一个LSTM；后者逐步生成译文，直到产生结束标记。前者称编码器，负责把输入变成内部表示；后者称解码器，负责据此生成输出。[1](https://arxiv.org/abs/1409.3215)

设想在我们的教学例子中，编码器读完还书句子。解码器根据最终表示，先给英文开头的候选分配概率，选出一个，再结合已经生成的内容预测下一个。输出长度由生成过程决定，不必与中文逐词对齐。训练时则用成对的原文和译文，推动整套参数更准确地预测真实译文。

原论文还有一个反直觉操作：把源句词序倒过来输入，目标译文仍按正常顺序输出。它在论文的英法翻译实验中改善了结果。作者将效果与部分输入输出之间更短的依赖距离联系起来，同时明确表示没有完整解释。[1](https://arxiv.org/abs/1409.3215)

这不是发现法国人应该倒着读英文，更不能保证对所有语言和架构都有效。它说明，信息走多远、经过多少步，会实实在在影响学习。

### 能记住长句，不等于总该只交一份摘要
现在让解码器译“蓝色”。在上述方案里，它主要依赖编码器交出的固定规模表示以及自身状态，不能像人一样随手回原文核对颜色。原文越复杂，最终表示承担的信息越多。

这是一种潜在瓶颈，但不能把它写成“长句必败”。刚才那篇2014年论文就报告了模型在其长句测试上的良好表现。具体成败与结构、数据、训练和输入处理有关，不能为了给下一种方法登场腾地方，就替上一种方法安排一场惨败。[1](https://arxiv.org/abs/1409.3215)

真正值得追问的是设计选择：既然阅读时已经产生了沿途状态，为什么翻译时只能主要依靠最后交出的那一份？能不能保留各个位置的表示，在写到颜色、人物、动作时分别调用？

循环网络让早先信息可以传下去，LSTM让某些信息更容易被保留。下一步，则要改变查阅办法。还书的管理员终于有望拿到原始借阅记录，而不只是同事凭记忆写的便条。

### 参考资料

1. *Sequence to Sequence Learning with Neural Networks*，Ilya Sutskever、Oriol Vinyals、Quoc V. Le，2014。[论文](https://arxiv.org/abs/1409.3215)
2. *Long Short-Term Memory*，Sepp Hochreiter、Jürgen Schmidhuber，1997。[原论文](https://www.bioinf.jku.at/publications/older/2604.pdf)


---

<a id="chapter-07"></a>

## 07　翻译时，可以回头看原文吗？

设想你读完一段借阅记录，原文随即被收走，接下来只能凭一张摘要翻译。短句还好：“小王把书还给管理员。”长句开始加上昨天、蓝色、新读者，再加几处说明，摘要逐渐兼任储物间。

上篇的编码器与解码器已经能完成“读一段、写另一段”，但有些设计把原文集中压进一个固定规模表示。一个自然的改动是：别收走沿途记录。译到哪里，就重新看看哪些输入信息有用。

这个改动看上去很像开卷考试。不过，机器没有手指，也没有人在卷面旁写“答案在第三行”。它需要一套能学习的查阅办法。

### 先让原文的每个位置留下记录
2014年公布、后发表于2015年国际学习表征会议的Bahdanau、Cho与Bengio论文，为神经机器翻译引入了一种联合学习对齐与翻译的注意力机制。这里的注意力，是根据当前生成需要，对不同输入表示分配不同权重。[1](https://arxiv.org/abs/1409.0473)

先看“可查阅的东西”怎样产生。论文使用双向循环编码器：一条链从前往后读，一条链从后往前读，再把每个位置两边的信息合起来。这样，“书”的位置保存的表示不只涉及“书”这个词，也带有周围语境。

设想沿用“小王把昨天借来的那本蓝色的书还给管理员”。读完之后，各位置都留下一份数字表示。它们不是一排互不相干的词典释义；“蓝色”附近的表示与这句话中的书有关，而不是与所有蓝色事物混在一起。

这个阶段仍有循环计算。注意力论文没有凭空提前造出Transformer，更没有让网络从此不必按序编码。它先解决另一件事：让解码器可以反复利用多处原文信息。

原来只有一张总便条，现在保留了一排带语境的便条。下一步的麻烦是：不能每译一个词，就把所有便条不分轻重地塞进口袋。

### 权重怎样改变本轮拿到的信息？
设想英文已经生成到需要表达颜色的位置。解码器此刻有自己的状态，里面包含已经生成内容的影响。系统拿这个状态，分别与各个原文位置的表示一起计算匹配分数。

然后把分数变成一组非负、合计为一的权重。为演示，假设“蓝色”附近得到0.7，“书”附近得到0.2，其余位置合计0.1。这些数字是自拟的，不是从论文或实际模型读取的注意力图。

接着不是只取“蓝色”三个字，也不是把中文直接贴进英文。系统把各位置的数字表示按权重缩放，再相加，得到本轮使用的上下文表示。0.7表示这一处对本轮组合贡献较多；它不是“模型有七成把握这本书是蓝色”。

解码器把这份本轮材料和自身信息一起用于下一词预测。轮到翻译“管理员”时，匹配分数重新计算，权重可以向句末移动。这就是“边生成边回头看”的具体操作：每一步都形成不同的信息组合。[1](https://arxiv.org/abs/1409.0473)

与上篇相比，改变的是原文信息进入解码器的路径。输入还是那句话，目标还是翻译；不同处在于不再要求同一份固定摘要从头到尾包办所有细节。蓝色终于可以在需要颜色的时候发言，不用从句首开始一直举手。

### 没有老师逐字画线，怎么学会看对地方？
如果每句话都要人先标出中文哪个词对应英文哪个词，省下的翻译劳动可能又以画连线的形式回来。

论文中的匹配计算本身带有可训练参数，并与翻译部分一起训练。训练目标推动模型给正确译文更高概率；误差信号也通过加权组合影响匹配参数，因此系统可以学到对当前翻译有用的分配方式。[1](https://arxiv.org/abs/1409.0473)

设想它总在应该输出颜色时集中使用“昨天”的信息，得到的颜色预测很差。这种预测误差能够影响整条计算链，包括颜色相关信息怎样进入本轮结果。反复训练后，合适的信息分配有机会得到加强。

但这不是人类语言学家藏在机器里逐句划分主谓宾。一个目标词可能需要多个源词，某个源词也可能影响多个输出位置。权重是连续分配的，通常称为软对齐；它不像小学连线题，要求一端只能牵一只手。

历史上，统计翻译也研究词语之间的对齐。这里的变化是，对齐相关计算进入可一起优化的神经网络，不必把它理解为注意力第一次发现“翻译两边有对应关系”。

### 开卷能帮忙，不能替你读懂题
论文在自己的英法翻译比较中，发现该方法相对所用基础编码解码模型更能应对长句。这个结论有明确比较对象，不能扩张成“所有没有注意力的系统都不会翻长句”。上一篇介绍的另一项2014年研究，就采取不同设计并报告了良好的长句结果。[1](https://arxiv.org/abs/1409.0473) [2](https://arxiv.org/abs/1409.3215)

再设想源句根本没写书是什么颜色。注意力再努力，也不能从不存在的信息中查出蓝色。又如“他”有两个合理指代对象，模型可能分配出看起来集中的权重，却选错了人。能够访问证据，与证据足够、使用正确，是三件事。

查阅也需要成本。每生成一步，都要对多个源位置做匹配和组合。长原文与长译文意味着更多此类计算。我们改善了信息入口，并没有获得免费的无限阅读。

开篇的问题因此有了明确答案：可以回头看，方法是保留原文各处表示，用当前生成状态计算权重，再组合所需信息。它让翻译过程不必死守一份总摘要。

但我们目前主要讨论的是“译文怎样查看原文”。接下来要把视线移到原文内部：读“书”的时候，能不能直接汇集“小王”“蓝色”“还给”的信息，而不必让消息沿着一长串阅读步骤挨个传来？

开卷考试已经获准，下一轮要改的是教室里的通信方式。

### 参考资料

1. *Neural Machine Translation by Jointly Learning to Align and Translate*，Dzmitry Bahdanau、Kyunghyun Cho、Yoshua Bengio，预印本2014，ICLR 2015。[论文](https://arxiv.org/abs/1409.0473)
2. *Sequence to Sequence Learning with Neural Networks*，Ilya Sutskever、Oriol Vinyals、Quoc V. Le，2014。[论文](https://arxiv.org/abs/1409.3215)


---

<a id="chapter-08"></a>

## 08　Transformer：词与词之间，怎样直接交换信息？

设想我们仍在翻译“小王把昨天借来的那本蓝色的书还给管理员”。前一篇解决了译文如何查看原文。现在先不急着翻译，只看原文内部：“书”要利用“蓝色”的信息，或者“还给”要结合人物关系，消息必须怎样走？

循环网络沿着阅读次序更新状态，远处信息常需要经过多步传递。2017年，Vaswani等人提出Transformer，采用以注意力为核心的架构来处理这类序列任务。[1](https://arxiv.org/abs/1706.03762)

它的一项关键改变是：让不同位置在一层计算中直接按权重交换信息。接力赛改了赛制，参赛者终于不必等纸条绕操场一周。

### 先分清：查别人，还是查自己这句话
上篇中，译文的当前状态查看原文各位置，这类信息跨越了两组表示。自注意力中的“自”，则表示查询与被查询的信息来自同一组序列表示。

设想“书”这个位置准备更新自身表示。它与句中允许访问的位置计算匹配关系，再把这些位置提供的信息按权重组合回来。与此同时，“蓝色”“还给”“管理员”等位置，也各自计算自己的组合。

所以自注意力不是挑一个全句重点，让其他词集体退场。每个位置都可以有自己的一组权重，得到不同的新表示。同一层内，各位置使用的是上一层提供的信息；不是“书”先更新，再把新答案即时传给“蓝色”。这一点让许多计算能够同时安排。[1](https://arxiv.org/abs/1706.03762)

对于“书”，颜色可能有用；对于“还给”，参与者可能有用。这里只是在描述可能学到的关系，不声称某个真实模型的一层，必然按照我们画出的语法分工运行。

变化发生在表示的形成过程中。输入还是原来的句子，但每个位置现在可以通过直接加权，取得远处位置的信息。原来的注意力负责帮译者找材料，自注意力把材料本身也重新整理了一遍。

### 查询、键和值，分别干什么？
把这些词暂时放进图书馆场景，会比较容易分清工作。查询是本轮找东西所用的条件；键是用来与条件匹配的表示；值是匹配后实际取来组合的信息。它们常分别写成Q、K、V。

真实计算里，三者都是数字列表，由输入表示经过三套学出来的变换产生。它们不是人写的搜索词、书籍编号和完整书页；图书馆类比只对应“拿什么找、拿什么比、最后取什么”。

设想“书”的查询与“蓝色”的键得到较高匹配分数。系统对所有候选分数作尺度调整，再转为合计为一的权重，按这些权重混合各位置的值。某处匹配高，就可能向结果贡献更多信息。

为什么不直接拿原词向量互相比一下？因为“哪些特征适合判断相关性”和“哪些信息应该传过去”未必相同。分别学习查询、键、值的变换，允许模型为这两项工作安排不同的数字组合。[1](https://arxiv.org/abs/1706.03762)

进一步说，查“谁归还”与查“什么颜色”，可能需要不同的信息通道。多头注意力让几套不同的变换并行计算，再把结果合并。多头不是召集几个有独立人格的专家，也没有规定一号头终身管理主语。它给模型提供多组可学习的关系计算，实际分工要看训练结果。

让所有问题都挤进同一组权重，好比图书馆只留一个窗口，借书、问路和投诉空调都在那里排队。多头增加了处理不同信息的空间，但并不保证每个窗口都有清晰的人工岗位说明。

### 直接联系以后，谁还记得先后顺序？
设想把句子改成“管理员把书还给小王”。谁还书变了。若模型只把相同词组成一堆，并按内容匹配，它不能仅凭这堆词恢复原来的次序。

原始Transformer因此向词的表示加入位置信息。论文使用不同频率的正弦和余弦生成位置编码，也比较了可学习的位置表示。对普通读者来说，关键是每个位置额外带上能参与计算的顺序线索，而非要求我们先学会三角函数才能还书。[1](https://arxiv.org/abs/1706.03762)

注意力交换信息之后，每个位置还经过另一段神经网络计算，把汇集的内容进一步变换。多层重复这种过程，让后面的关系判断建立在前面加工过的表示上。原始结构还保留前一阶段表示的直接通路，并调整数值尺度，帮助多层计算稳定训练。

因此，Transformer并不是“把词两两看一眼”就结束。位置提供顺序，注意力传递信息，逐位置网络加工信息，多层叠加改变表示；这些部分的参数通过任务误差共同训练。名字里虽然没有“训练很费电”，账单里会有。

### 训练可以一起算，回答为何还是往外蹦？
原始Transformer是一套编码器与解码器结构。原文编码可以利用整句信息；生成译文时，解码器必须限制对未来输出的访问，否则训练“预测下一个词”时就偷看了答案。这个限制叫因果遮罩：把不允许查看的位置挡住。[1](https://arxiv.org/abs/1706.03762)

设想训练材料已经写好整句译文。每个位置的正确后续都在数据里，所以多个位置的预测可以一起计算，只要遮罩保证它们各自看不到不该看的未来。实际生成时，下一个词还没选出来，后一步就少了一项输入，常见的逐词生成仍有先后依赖。

训练并行与生成串行可以同时成立。不能因为许多训练计算能一起做，就说模型一次性想好整篇文章；也不能因为屏幕上文字逐步出现，就反推它内部仍是早期循环网络。

直接联系还有另一笔费用：普通完整自注意力要处理位置之间的配对。只看这一部分，长度翻倍，配对数量约变成四倍。实际速度和显存还受具体实现及其他计算影响；后续优化会改变资源使用，不能把配对数量直接当作产品账单。[1](https://arxiv.org/abs/1706.03762)

现在可以回答标题：Transformer通过自注意力，让每个位置根据学出来的匹配关系，直接汇集其他位置的信息，再经过加工和多层更新。它缩短了许多信息传递路径，也给并行训练提供了便利，代价包括长序列中的大量配对计算。

它为后来的模型提供了重要基础。但同一套架构，拿去填空还是接龙，会培养出不同使用方式。下一篇要看的不再只是“信息怎样流动”，而是“训练到底让它完成什么任务”。

### 参考资料

1. *Attention Is All You Need*，Ashish Vaswani、Noam Shazeer、Niki Parmar等，2017。[论文](https://arxiv.org/abs/1706.03762)


---

<a id="chapter-09"></a>

## 09　填空和接龙，怎么成了训练方法？

设想同一句话出现在两张考卷上。第一张写着：“小王把那本蓝色的——还给管理员。”第二张只写：“小王把那本蓝色的”。

第一张让你补空，空后面的内容也能看；第二张让你往下接，后面是什么还不知道。材料相似，能够利用的线索不同。用这两种任务训练模型，会对它的信息处理提出不同要求。

Transformer解决了信息怎样交换，却没有规定训练必须考什么。2018年的BERT和初代GPT，是理解这个分岔的两个重要案例。[1](https://arxiv.org/abs/1810.04805) [2](https://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdf)

### 先纠正考卷的计量单位
一路上我们说“下一个词”，是为了先讲清预测。不过模型实际处理的基本文本单元通常叫token，可以译作词元。它可能是完整词，也可能是词的一部分、一个字或标点；不同切分器的结果不同。

设想某个教学词表没有完整的“蓝皮书”，却有“蓝”“皮”“书”，那么可以分成较小单位表示。这里不是报告某个产品的真实切分结果。作用在于说明：不必给每个新组合都准备一个完整词条，系统也有机会处理它。

这与系列开篇的中文分词有关，却目标不同。开篇问怎样找出语言中的词界；此处还要考虑有限词表怎样覆盖文本，以及切分后序列有多长。切得很细，词表容易覆盖，计算步数却可能增加；大块很多，序列可能缩短，词表和罕见块的学习又成为负担。

2018年的SentencePiece展示了从原始句子训练子词切分模型的工具路线，不要求先用另一套语言分词器把句子切成词。[3](https://aclanthology.org/D18-2012/)

电脑并没有终于找到全世界唯一正确的切词法。它给自己选了一副方便计算的积木。人类说“一个词”，机器可能已经收了三块材料的搬运费。

### BERT：前后都看，再补缺口
BERT的英文全名指“来自Transformer的双向编码表示”。这里的双向，关键是某个位置的表示能够结合左右两边的上下文。[1](https://arxiv.org/abs/1810.04805)

如果直接把答案留在原位，再要求模型预测这个位置，它可能只学会照抄。因此BERT训练时选取部分位置，对输入作遮盖等处理，要求恢复原来的词元。教学例子把“书”遮住以后，“还给管理员”这段右侧线索也能帮助判断。

模型仍然给候选计算概率，再根据原来实际是什么来更新参数。题目和答案都能从已有文本中制造出来，不需要人逐句另写问答。这类从数据本身构造监督信号的训练，通常称为自监督学习。没有人逐空批改，不等于训练没有目标。

原始BERT还使用判断两段文本是否在原文中相接的任务。它不是所有后来编码模型都必须照办的永久考纲，我们只在这里标明原版做过什么。[1](https://arxiv.org/abs/1810.04805)

填空练习推动表示吸收语境。把“苹果很甜”换成“苹果发布新品”，同样的输入词块经过上下文计算，可以得到不同的内部表示。相较于每个词固定一份词向量，语境参与得更深入。终于不用让水果部门和手机部门共用一张写死的员工证。

### GPT：不知道后文，就练习预测后文
GPT意为生成式预训练Transformer。初代GPT采用从左到右的语言建模：根据此前词元预测后续，不能利用尚未出现的右侧内容。[2](https://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdf)

在第二张教学考卷上，模型只看到“小王把那本蓝色的”。“书”是可能的后续，“杯子”也可能。在训练样本原文确实写“书”时，误差推动模型提高这个真实后续的概率；这不等于宣布现实里蓝色物体只能是书。

继续预测、选择、把结果接回前文，就能生成更长文本。它与上篇的因果遮罩相配合：训练时不给每个位置偷看未来，使用时才有办法按同样的信息条件往下写。

这两种任务并不能简化成“BERT负责理解，GPT没有理解只会说”。理解不是贴在架构上的许可证。应比较具体工作：一段完整文字里的分类或位置判断，可能适合利用双向表示；持续生成后文，则天然符合从左到右的预测方式。实际系统还可以组合、改造结构。

更不能把初代GPT直接写成今日聊天助手。它的论文重点包括先预训练，再针对有标签的目标任务调整模型；“输入一句吩咐就完成许多工作”的使用方式，还会经过后续发展。

### 先读大量材料，再学一项具体工作
设想我们要判断一条借阅留言是在表扬服务，还是在投诉。若从随机参数开始，就得同时学文字规律和分类标准；如果已有一个通过大量文本训练的模型，可以在它的基础上，用带标签的留言继续调整。

前一个打基础的阶段叫预训练，后一个针对目标任务继续训练的阶段叫微调。BERT与初代GPT都展示了这类迁移路线，只是预训练目标和具体使用方式有所区别。[1](https://arxiv.org/abs/1810.04805) [2](https://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdf)

比如教学留言“书很好，就是借了半年还没轮到我”，单看“很好”容易误判。已有语境表示可以为后续分类提供基础，而带标签的训练让输出适应当前标准。它不是把所有预训练文本放在旁边逐条检索，也不是新来一条留言就必须重新训练。

预训练节省了每项工作都从零学起的重复劳动，但并不保证材料可靠、任务标签合理，或者模型已经适合直接服务用户。一个读过全馆藏书的人，第一天上柜台仍可能把读者投诉续写成文学评论。

填空和接龙之所以能成为训练方法，是因为它们能从文本自身产生大量可核对的预测任务，让共享参数逐渐学到有用规律。它们训练的是不同条件下的预测，不是两套人类心理学人格。

下一篇，我们会把接龙模型的规模与材料继续扩大，再看一件反直觉的事：有时不修改参数，仅在题目前摆几个例子，它也能改变接下来的做法。

### 参考资料

1. *BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding*，Jacob Devlin、Ming-Wei Chang、Kenton Lee、Kristina Toutanova，2018/2019。[论文](https://arxiv.org/abs/1810.04805)
2. *Improving Language Understanding by Generative Pre-Training*，Alec Radford、Karthik Narasimhan、Tim Salimans、Ilya Sutskever，2018。[论文](https://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdf)
3. *SentencePiece: A simple and language independent subword tokenizer and detokenizer for Neural Text Processing*，Taku Kudo、John Richardson，2018。[论文](https://aclanthology.org/D18-2012/)


---

<a id="chapter-10"></a>

## 10　接着写下去，怎么写出了翻译和代码？

设想我们在纸上写：“猫 → cat；狗 → dog；书 →”。只要掌握这些词的中英文对应，读者很容易补出book。这个任务表面上是接下去写，实际上在要求翻译。

再换一张纸：“太感谢了 → 表扬；等了三个月 → 投诉；工作人员帮我找回了书 →”。表面的操作仍是续写，但接下来的答案，要符合前面示范的分类方式。

这提出了一个问题：如果续写模型在训练中见过足够多的任务结构，能不能通过当前提示判断“这一轮应该做哪种事”？

2020年的GPT-3论文系统研究了这种使用方式：在输入中给出任务描述与少量示例，不为每个任务另做参数更新，再观察后续表现。[1](https://arxiv.org/abs/2005.14165)

### 范例进入前文，不是当场改造大脑
在我们的中英对照例子里，模型把整段提示作为条件，计算“书 →”后面各个词元的概率。前文给出的箭头、语言对应和格式，会影响当前计算，因此影响后续选择。

这种利用输入范例适应任务的现象，通常叫上下文学习。此处“学习”很容易与第五篇的训练混淆：第五篇用损失与梯度修改参数；现在，参数可以保持不变，变化的是参与本轮计算的输入及内部状态。[1](https://arxiv.org/abs/2005.14165)

设想同一模型前一轮看到中英翻译，后一轮看到“猫 → 动物；桌子 → 家具”，它可能转而给“狗”输出“动物”。这不能证明每次提示都永久写入模型参数。更像把不同试卷放到同一个已训练的答题系统面前，题目变了，计算结果随之改变。

给零个、一两个或更多范例，会形成不同测试条件。论文中的“少样本”不能理解为模型一生只见过几句语言：它此前已经接受大量预训练，只是当前任务的示例数量少。

否则，一个人读完图书馆再看两张范例，也可以宣称自己“两分钟学会英语”。图书馆可能第一个不同意。

### 任务为什么能装进一段续写？
原来我们把预测理解为补一个词。现在看整个序列，它可以包含问题、示范、说明和答案。想接得合理，有时就得利用翻译关系、类别边界或步骤规则。

设想一份文字材料正在解释怎样计算购物总价，后面附有程序。程序语言虽然能执行，写在文件里也首先是一串有结构的符号：什么位置能出现名称、括号怎样配对、前面定义的内容怎样被后面引用，都存在可学习的规律。

续写目标因而可以训练出对这些结构有用的能力。不过，“能生成像样的程序”与“程序解决了当前问题”之间仍隔着运行、环境和测试。这里解释的是任务为何能进入统一文本接口，不是证明所有任务都能靠文字样式解决。

GPT-3的论文展示了多种任务上的上下文表现，也记录了局限，包括有些比较、推理与长文本一致性任务仍然困难。[1](https://arxiv.org/abs/2005.14165)

规模扩大后，多任务使用方式更有吸引力，但“只要接龙，就必然自动掌握一切”不是论文替我们盖过章的结论。一个能续写维修手册的系统，暂时还没有亲手拧过螺丝。

### 把模型做大，钱应该花在哪里？
第五篇已经解释过参数。更多参数意味着更多可调节的计算自由度，但这些自由度需要资料与训练来形成有用结构。还有一项不能忽略：执行这些计算所需的算力预算。

设想我们只有一笔固定预算。可以买更大的模型，但每个参数训练得较少；也可以用较小模型，处理更多训练文本。哪种更好，不能只看产品海报上哪个数字长。

2022年的Chinchilla研究就把问题设为：在给定训练计算预算下，参数规模与训练词元数量怎样配合？研究者比较不同规模与数据量的训练结果，发现当时一些大模型相对缺少训练数据，并用Chinchilla验证了不同预算分配的收益。[2](https://arxiv.org/abs/2203.15556)

这里的词元数量指训练实际处理的单位数量，不等于独立事实的条数。把同一页复印很多遍，与增加同样篇幅的新材料，信息价值也不相同。资料质量、重复、领域覆盖、模型结构与优化方式都会影响结果。

因此不能把论文中的经验比例变成跨越所有时代的采购法则。尤其如果还要考虑模型部署后回答海量请求的成本，最佳取舍可能不同于只考虑一次训练预算。

参数、数据与算力是一起做饭的条件。锅越来越大，米却不增加，不能靠宣布“千亿粒级锅具”让大家吃饱。

### 看起来多才多艺以后，还缺什么？
设想你输入“帮我把这段通知改成一句话”，模型却继续写：“再翻译成英文，最后发给同事。”对于某些文本上下文，这可能是合理的句子续写；对于真实用户，它完全没干活。

这个例子揭示了下一步需要改变的目标。预训练让模型具备许多可调用的规律，上下文示范帮助它判断当前模式，但“像文档一样接下去”和“像助手一样完成请求”不总是同一件事。2022年的InstructGPT工作明确把这种差距作为训练问题。[3](https://arxiv.org/abs/2203.02155)

前面的翻译范例已经预先摆好任务格式。普通用户未必会提供这么整齐的试卷，问题也可能含糊、冲突或缺少条件。接下来，需要更有针对性的训练，让模型更稳定地按照任务要求回答，并学习哪些回答更值得选择。

标题的答案是：续写可以承载翻译、分类和代码等结构；大量预训练让模型学到可复用的规律，当前上下文又能指定其中一些用法。规模是重要条件，但与数据、计算和训练目标共同起作用。

我们得到了一位能参加许多考试的选手。下一步，要教它识别哪句话是试卷，哪句话是用户在叫它办事。

### 参考资料

1. *Language Models are Few-Shot Learners*，Tom B. Brown等，2020。[论文](https://arxiv.org/abs/2005.14165)
2. *Training Compute-Optimal Large Language Models*，Jordan Hoffmann等，2022。[论文](https://arxiv.org/abs/2203.15556)
3. *Training language models to follow instructions with human feedback*，Long Ouyang等，2022。[论文](https://arxiv.org/abs/2203.02155)


---

<a id="chapter-11"></a>

## 11　会续写，为什么还要专门学回答问题？

设想读者在图书馆网站输入：“请用一句话告诉我怎么续借。”系统回答：“请用两句话告诉我怎么预约，请用三句话告诉我怎么办证。”

排比工整，服务为零。它可能顺利延续了文本形式，却没有完成读者的意图。

前一篇的大模型已经能通过提示调用多种能力。要把这种能力更稳定地变成助手行为，需要在训练目标上再往前走一步：让符合请求的回答，更容易被模型生成。

### 先给它看，什么叫真的在回答
设想我们准备一组教学数据，每条包含用户请求与合适回答。例如，问题限定“用一句话”，回答就只保留办理入口和必要条件；问题要求列步骤，回答才依次展开。

模型在这些示范上继续训练，根据问题和已有回答前缀，预测示范回答的后续。原有参数因此被调整。这叫监督微调，常简称SFT；监督来自示范中明确给出的目标输出。

它与ELIZA的规则转换不同。ELIZA的一个脚本可以规定遇到某个模板怎样重组；这里，许多示范共同改变共享参数，影响模型在新请求上的输出。它也与上一章临时塞进提示的几个范例不同，因为这一次确实修改了模型参数。

2022年的InstructGPT研究把人工示范训练作为流程的一步，再加入对回答的比较反馈。[1](https://arxiv.org/abs/2203.02155)

在教学例子里，如果示范总是不管问题多简单都写八段前言，模型也可能学会这种热情。数据并不会自动懂得“请直说重点”的含金量。服务台培训手册本身，也需要有人检查。

### 写一个好答案很难，比较两个有时容易些
仍设想同一个续借问题。候选甲写得简洁，却漏了“已经被预约的书不能续借”；候选乙包含这一条件，但稍长；候选丙语气甜美，办理入口却编错了。评价者可以比较哪份回答更符合要求，而不必每次从空白开始写标准答案。

在InstructGPT的路线中，这些比较被用来训练另一个模型，估计评价者会更偏好哪种输出。它叫奖励模型；奖励在这里是一种数值反馈，不是程序收到了一枚开心的小红花。

然后让回答模型生成候选，用奖励模型评价，再调整回答模型的参数，增加较高评分输出的倾向。同时限制它不要为了分数偏离原来的行为太远。这一类利用人的反馈开展强化学习的方法，简称RLHF，即“基于人类反馈的强化学习”。[1](https://arxiv.org/abs/2203.02155)

读者此刻只需抓住与监督微调的差别：前者主要照着示范学习，后者利用对生成结果的评价继续改善选择。强化学习如何处理行动与长期回报，我们会在游戏那一篇完整展开。

请注意，奖励模型学的是特定资料和评价标准中的偏好，不是安装了一根直接连接宇宙真理的网线。若评价者没有发现入口是假的，文采很好的候选丙就可能混进优秀员工名单。

### 能否省掉单独训练评分员这一步？
2023年的直接偏好优化，简称DPO，提供了另一条路线：直接用同一请求下“较受偏好的回答”和“较不受偏好的回答”来调整语言模型，无须沿用先显式训练奖励模型、再执行那套强化学习优化的完整流程。[2](https://arxiv.org/abs/2305.18290)

设想一对教学样本中，乙胜过甲，因为乙保留了影响续借的关键条件。DPO的训练目标推动模型相对于参考模型，更偏向受选回答而非落选回答。比较仍建立在整条回答及其生成概率上，不是把“不能续借”四个字设成永远应当输出的口令。

这也不等于只把赢家收进普通微调数据。成对偏好及与参考模型的关系，参与了优化目标，输家提供了比较信息。

它改变的是训练办法，不是消除了评价标准的困难。同一组评价如果奖励冗长、迎合或者漂亮的假话，简化训练流程并不能顺便把坏标准净化掉。原来有两个部门一起误会用户，现在可能少了一个部门，误会依然完整。

RLHF与DPO因此适合被放在同一个问题下理解：怎样利用反馈改变输出倾向。它们不是技术史中必然前后替代的两级台阶，具体路线取决于任务与训练设计。

### 让人满意，与说得正确之间还隔着核对
设想读者问：“我记得所有书都能无限续借，对吧？”一个迎合的系统回答“对”，可能短期显得顺耳；一个真正有用的回答应当根据实际规则确认，必要时指出前提不成立。

这不是断言偏好训练必然使模型迎合。问题在于，偏好数据、评价者能力和奖励模型的泛化范围，都决定了什么行为获得鼓励。InstructGPT论文也明确说明，结果对齐的是研究过程中具体人群与标准的偏好，而非未经限定的全人类价值；模型仍会犯简单错误。[1](https://arxiv.org/abs/2203.02155)

在我们的自拟服务台中，是否简洁可以直接阅读判断；某本书今天能否续借，需要访问当前记录。即使训练使模型更愿意认真回答，也不会凭空把今天的预约状态写进旧参数。

所以“助手训练成功了”应分开看：是否遵守长度要求，是否处理了条件，是否真实引用资料，是否承认不知道。礼貌、服从、正确存在交集，但不能互相替代。把“您好”写得特别真诚，也不能抵扣一个错误的还书日期。

开篇那个只会排比的系统，需要的不是再背几种排比，而是通过示范与反馈，把用户请求和合适回答更可靠地联系起来。指令与偏好训练能够推进这件事，却没有把模型变成事实数据库。

下一篇，服务台终于要翻开真正的规章。我们会看：让模型查资料之后再回答，究竟修补了哪一步，又留下哪些新的出错位置。

### 参考资料

1. *Training language models to follow instructions with human feedback*，Long Ouyang等，2022。[论文](https://arxiv.org/abs/2203.02155)
2. *Direct Preference Optimization: Your Language Model is Secretly a Reward Model*，Rafael Rafailov、Archit Sharma、Eric Mitchell等，2023。[论文](https://arxiv.org/abs/2305.18290)


---

<a id="chapter-12"></a>

## 12　答案写得这么像，为什么查不到出处？

设想图书馆助手回答：“根据《蓝桥图书馆借阅管理办法》第十八条，每本书可续借三次。”标题像真的，条款像真的，语气比前台还笃定。你去找文件，却发现连这份办法都不存在。

蓝桥图书馆与上述规定均为自拟场景。我们关心的不是某家真实机构，而是一个技术问题：模型为什么能把没有出处的内容，写得如此像有出处？

### 熟悉文体，不等于查过事实
语言模型生成回答时，根据输入和已生成文本计算后续概率。它可以从训练材料学到法律条款、论文引文和规章通知怎样措辞，也可能学到许多真实知识。但普通生成步骤不会自动逐条访问真实文件，检查标题、条号与规定是否对应。

设想模型刚写完“根据《”，接下来选择一个看似合理的文件名，再接“第十八条”。每一小段都很像这种文体，组合起来却可能没有对应实体。类似建筑外墙做出了窗户图案，并不保证里面真的有一间房。

这类与事实或给定材料不相符的生成，常被称为幻觉。这个词描述输出问题，不是在断言模型像人一样出现感官体验，也不等于证明它蓄意撒谎。

2021年提出的TruthfulQA，专门研究模型在涉及常见误解的问题上是否给出真实回答。它提醒我们，学习人类文本，也可能学会人类反复传播的错误；不能只拿文字自然程度当正确性指标。[1](https://arxiv.org/abs/2109.07958)

上一章改善了回答方式，这里暴露的是证据入口。服务台培训得再有礼貌，如果从不看规章，依然可能把“仅供参考”说得像圣旨。

### 先取材料，再让模型组织答案
现在为蓝桥图书馆加入一份真实存在于这个设想中的教学规章：每本书最多续借一次；被其他读者预约的书不能续借。日期与规则均为演示设定。

用户问“我这本书还能续借吗”。系统先检索相关材料，再把找到的片段连同问题交给生成模型，要求依据它们回答。这类组合通常称为检索增强生成，英文简称RAG。

2020年Lewis等人的RAG论文，是把预训练检索器、外部文档索引与生成模型结合的一项代表研究。检索结合语言处理有更早历史，不能把所有“先查再答”都算作那一年突然出现。[2](https://arxiv.org/abs/2005.11401)

为了让教学资料容易查找，我们可以先把长文切成带标题与出处的片段。检索时，用关键词，或者把问题与片段转换为便于比较相关性的向量，选出候选。向量方法所比较的是为检索学到的关联，不是给文档真伪打分。

生成模型读到规章后，可以回答：“规则允许最多续借一次，但还需要知道你是否已经续借过，以及这本书是否被预约。”与刚才编出三次的版本相比，关键改变是本轮计算获得了明确、可检查的外部条件。

更新外部规章后，系统可以检索新版材料，而不必为每处制度变化重新训练整个语言模型。模型负责读材料和表达，索引负责让资料有机会进入当前输入。终于有人把柜台后面的文件柜打开了。

### 找到相关段落，为什么还会答错？
设想切片时把“最多续借一次”留在第一页，把“预约图书除外”扔到下一片。检索只找到前一片，模型据此说“可以续借”，答案流畅，也有来源，却漏了改变结论的条件。

或者库里同时留着旧版与新版规章，旧版写三次，新版写一次。若检索没有有效区分时间与适用范围，系统可能认真引用过期规定。

再或者两个片段都进来了，模型把不同读者类别的规定混在一起。这是生成阶段的信息使用错误，不能只责怪搜索。教学流程至少有几处独立关口：材料是否可靠，切分是否保留条件，检索是否找到所需版本，回答是否忠实采用。

原始RAG研究展示了外部知识结合生成的收益，但没有给所有后来的拼接式系统颁发“无幻觉证明”。论文的具体训练方案，也不能与任何一个“搜索结果复制进提示”的实现完全等同。[2](https://arxiv.org/abs/2005.11401)

检索把没有文件柜的问题，变成了怎样管好文件柜的问题。文件管理员不是失业了，而是突然发现自己还得负责版本控制。

### 引用是检查入口，不是装饰性徽章
设想回答写“最多一次”，链接却指向图书馆首页。用户还要在整个网站里寻找证据。另一个回答链接到具体规章，却把“普通借阅最多一次”说成“所有借阅最多一次”，同样不成立。

一个有用的引用，应让读者定位到支持当前论断的内容，并看见范围、时间和例外。链接能打开只证明网页存在；段落支持当前说法，才是证据关系。

在教学案例中，规章能回答“允许的上限”，却不能回答“这本书此刻有没有被预约”。后者需要借阅系统中的当前记录。即使检索完所有规章，缺少这条记录时，也应保留条件，不能把缺失信息补成一个看起来顺口的“可以”。

这正好把我们带向工具调用：有些问题不是多找一篇文章就能解决，需要查询具体状态，甚至执行操作。RAG提供的是外部材料进入生成的路径，后面的Agent还要把执行结果重新带回决策。

标题的答案是：模型能够学到出处的写法，却未必拥有或核对了对应出处。检索增强生成让它有机会依据当前材料作答，但每一条结论仍要与实际证据对齐。

蓝桥图书馆终于可以撤下那条不存在的“第十八条”。撤下它靠的不是让口气更谦虚，而是查到规章、保留条件，并在不知道读者状态时明确停在不知道的位置。

### 参考资料

1. *TruthfulQA: Measuring How Models Mimic Human Falsehoods*，Stephanie Lin、Jacob Hilton、Owain Evans，预印本2021，ACL 2022。[论文](https://arxiv.org/abs/2109.07958)
2. *Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks*，Patrick Lewis、Ethan Perez、Aleksandra Piktus等，2020。[论文](https://arxiv.org/abs/2005.11401)


---

<a id="chapter-13"></a>

## 13　多想一会儿，真的能少错一点吗？

设想图书馆要处理两份资料：甲需要10分钟，乙需要15分钟，两台机器可以同时工作；最后合并需要5分钟，必须等两份都完成。忽略切换耗时，最快多久结束？

有人把三个数相加，答30分钟。也有人画出时间线：两台同时启动，第15分钟两份都完成，再合并5分钟，答案是20分钟。

数字和条件都是自拟教学题。差别不在于谁写了更多字，而在于有没有区分“同时做”和“必须等”。让模型增加中间计算，能否帮助它保留这些关系？

### 中间步骤如何参与后面的答案
普通直接回答，可以让模型读完题后立即生成结果。另一种方法，在提示中提供含中间步骤的示范，让模型在类似问题上也先展开步骤，再输出结论。2022年Wei等人的研究系统展示了这种思维链提示，简称CoT，在若干推理任务中的效果。[1](https://arxiv.org/abs/2201.11903)

对于我们的题，一份可核对的解答会先明确甲乙可以并行，再计算两者全部完成的时刻，最后加上合并时间。写出“第15分钟两份完成”后，这段文字成为后续计算可以利用的上下文，降低最后一步还要同时处理所有原始条件的负担。

这解释了中间步骤可能有用的路径，却不是说显示出来的文字完整揭示了神经网络内部计算。读者能检查公开解答是否成立，不能据此认为自己看到了模型所有真实内部过程。

也不能将那项研究概括为“任何模型加一句请逐步思考都会更准”。结果依赖模型、任务、提示和评价方式。论文中的逐步示范，与今天各产品的内部推理机制更不能直接画等号。

让学生使用草稿纸，是提供一种计算条件。草稿纸本身没有负责把30偷偷改成20。

### 多写一遍，和真正检查不是一回事
设想一个错误解答写：“甲10分钟，乙15分钟，合并5分钟，所以总共30分钟。再次检查，10加15加5确实等于30。”

它检查了加法，没有检查并行条件。第二遍算得越认真，错误结论看起来越结实。

真正针对这道题的验证，要把候选答案放回约束：如果甲从第0到第10分钟，乙从第0到第15分钟，合并从第15到第20分钟，每个操作都符合条件；而合并不可能早于第15分钟开始，因此20也是这个设定下的下限。

这份验证同时提供可行安排和不能更早的理由。它不依赖一句“我确认过了”。如果题目改成只有一台机器，第一步并行不再合法，答案才变成30分钟。

2022年的自一致性研究采用另一种办法：为同一题采样多条推理路径，再看最终答案的一致性，而不是只选一条生成路径。[2](https://arxiv.org/abs/2203.11171)

设想几条路径分别画时间线、先算瓶颈、列开始结束时刻，都得到20，可以增加选择这个答案的依据。但若所有路径都忽略“两台”，它们也可能整齐地投票给30。多个输出共享模型与资料，错误未必独立。全体起立，也可能只是全体坐错了车。

### 训练时练推理，与回答时多计算要分开
前两种办法主要改变回答过程：同一个模型，提供中间步骤的条件，或者让它生成并比较更多候选。还有一种办法，在训练时就更有针对性地改善解题行为。

设想我们有大量条件清楚、答案可验证的任务。模型生成候选解答后，程序核对最终数值或运行提交的代码，用结果提供反馈，再更新模型参数。训练因此增加了成功解题行为的倾向。

2025年的DeepSeek-R1研究展示了强化学习用于推理的一条代表路线。需要区分R1-Zero与R1：前者探索在已预训练基础模型上直接开展相应强化学习，后者还包含冷启动数据和其他训练阶段。它们都不是从完全空白、没有语言预训练的状态开始。[3](https://arxiv.org/abs/2501.12948)

对于数学和程序任务，规则核对或测试有时能提供相对明确的反馈。对于“这篇散文感不感人”，不存在同样方便的标准答案按钮。训练方法能扩展多远，受到可用反馈的质量与范围约束。

还要防止记错功劳：模型经过训练变得更善于使用中间步骤，是参数变化；给它更长的本次计算预算，是使用条件变化。两者可以结合，但“等了十秒”本身并不能证明发生了新的训练。

### 时间花在哪儿，比等多久更重要
设想同一道图书馆题，有三个方案。一个立即回答；一个写很长的情境描述；一个建立时间线并检查约束。后两个都更慢，只有第三个增加了直接支持结论的操作。

所谓回答时增加计算，可以用于生成更长的候选过程、搜索不同路径、调用验证工具或比较结果。不同做法的成本与收益不同。即使某个任务平均受益，也不能保证每一道题单调改善。

如果前提缺失，例如“乙是否必须等甲”，再多内部推演也不能确定用户没有提供的规则。此时有效进展可能是指出条件差异，而不是继续在同一条假设上加盖三层推理阁楼。

这把我们与上一章的检索联系起来：有些错误需要更多已知条件下的计算，有些需要外部证据。它们可以合作，却不能相互冒充。找不到规章，不是再加几遍分钟数能解决的；时间线算错，也不是引用十个网站就会变对。

开篇的答案是：多计算有机会减少错误，前提是额外步骤帮助保留条件、探索方案或验证结果。真正有用的“多想”，应在答案背后增加可以检查的依据。

两台机器最早第20分钟完成工作。至于模型花了多久宣布这个结果，是另一张账单。

### 参考资料

1. *Chain-of-Thought Prompting Elicits Reasoning in Large Language Models*，Jason Wei等，2022。[论文](https://arxiv.org/abs/2201.11903)
2. *Self-Consistency Improves Chain of Thought Reasoning in Language Models*，Xuezhi Wang等，预印本2022，ICLR 2023。[论文](https://arxiv.org/abs/2203.11171)
3. *DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning*，DeepSeek-AI，2025。[论文](https://arxiv.org/abs/2501.12948)


---

<a id="chapter-14"></a>

## 14　看懂一张菜单，还缺哪些本领？

设想图书馆楼下有家小店，菜单照片上左边写“面条18元”，右边写“套餐26元”，角落还有一行小字：“套餐含饮料。”你把照片交给助手，问：“预算25元，要一份主食和一杯饮料，套餐够不够？”

菜单、价格和问题都是自拟的。仅凭题目里的数字，套餐超过预算；但对实际看图系统而言，先得把26与套餐正确对应，还要分清饮料包含在哪一项里。

此前我们主要把文字交给模型。现在的难点不只是多接收一张图片，而是怎样让画面信息进入同一项任务，并在回答中保留位置与关系。

### 图片先变成可计算的表示
电脑收到的是像素数值。视觉编码器对它们进行计算，把局部形状、纹理及更高层联系变成内部表示。某些架构把图片分成小块，再让这些块之间交换信息；图像中的位置也要以合适方式保留，否则左列价格可能跑去给右列菜品结账。

但不能把“图像块”简单理解为“模型先把照片翻译成一段准确中文”。视觉表示可以直接保留难以用短文字描述的关系，它们首先还是数字。

2021年的CLIP研究训练图像与文本的两套编码器，让真实配对的图文表示更匹配，同批中不配对的图文相对不匹配。这是对比学习：通过哪些应当对应、哪些不应当对应来塑造表示。[1](https://arxiv.org/abs/2103.00020)

设想一批教学材料里有面条图片与“面条”的描述，也有自行车图片与相应描述。训练要求系统把正确配对区分开，而不是看见面条就把整份菜谱逐字背出。CLIP的这类能力可以帮助匹配或分类，并不单独等于能自由回答菜单问题的聊天模型。

与词向量的历史相呼应，这里仍在学习有用的数字表示，只是联系跨越了图像与文字。自行车终于不会因为同样有两个圆形物体，就被轻易推荐为双蛋面套餐；不过这个例子是解释目标，不是某个模型的实测承诺。

### 接上语言模型，还要教它怎样使用画面
2023年的LLaVA研究提供了一种具体连接方式：用预训练视觉编码器取得图像特征，再通过可训练的连接层，把它们转成语言模型可以接收的表示，并利用图像与指令相关的数据训练回答行为。[2](https://arxiv.org/abs/2304.08485)

连接层不是把一根数据线插上就自动互通。图像表示和语言模型原本处理的表示需要适配，训练通过目标回答的误差调整有关参数，让画面信息能实际影响后续生成。论文不同训练阶段调整的参数范围也有所不同，不能一概说所有部件始终一起重训。

在菜单场景中，问题说明本轮关心预算与套餐，视觉输入提供菜品、价格和布局。模型生成回答时，应结合两者，而不是只根据“小店套餐通常多少钱”的经验猜测。

如果把图片换成“套餐24元”，文字问题不变，答案应随图像证据变化。这是一种很直接的检查：系统究竟用了图片，还是把图片当成聊天背景墙？

LLaVA是一条代表路线。其他多模态模型可以采用不同的融合结构与训练目标；不能据此断言所有产品都在视觉编码器后面装了同一款转接头。

### 认得字，还得把账算到正确菜品上
设想一个系统识别出了18和26，也认出了面条与套餐，却把两列读反。它的字符清单可以几乎全对，答案仍然错。

因此需要分别理解文字识别和关系理解。光学字符识别，常简称OCR，关注从图像中取得文字；但完整任务还要求知道哪段小字修饰哪一项、哪个数字是哪道菜的价格，以及预算条件怎样作用于这些信息。

若角落小字模糊，系统可能看清“含饮料”，却漏掉前面的“不”。这不是加法的问题，错误已经发生在证据进入时。若菜单本来就没有单点饮料价格，模型也不能仅凭面条18元推出“再买饮料肯定不超过25元”。

CLIP研究本身讨论了细粒度任务等方面的局限；LLaVA则把视觉与指令结合推进到交互回答。两者的任务差异提醒我们：会匹配“菜单”这个概念，距离准确解决菜单上的具体问题，还有好几步。[1](https://arxiv.org/abs/2103.00020) [2](https://arxiv.org/abs/2304.08485)

我们的教学答案应当是：“26元套餐超过25元预算；单点面条是否能再加饮料，需要饮料价格。”一份诚实的菜单分析，有时最有价值的输出就是指出账单还少一项，而不是替老板发明一个优惠活动。

### 看懂按钮，也没有按下按钮
把纸菜单换成点餐网页。助手可以识别“加入购物车”，解释它的作用，甚至指出按钮位置。但只要没有执行点击或调用下单接口，购物车就不会因此多出一碗面。

这与前面文字模型写“已经改好文件”是同一种边界。多模态扩展了系统能接收的观察，行动还需要工具、执行环境和结果反馈。图片中的成功提示也可能只是旧截图，不能代替当前操作的实际返回。

设想系统点击后看到“已售罄”。这条新观察改变了下一步：原来的菜单理解可能完全正确，订单仍无法完成。要继续办事，模型必须把真实反馈带回判断，而非照着预先写好的成功故事念到结尾。

所以多模态不是从“会说话”到“会办事”的全部桥梁。它让画面、文字等不同输入有机会参与共同任务，之后还需要行动循环。

标题的答案可以沿着这份菜单逐项落地：看清输入，把价格和菜品对应起来，结合问题计算，承认缺失信息；若要点餐，还得真正执行并检查结果。

我们已让助手看见那碗面。下一篇要解决的是：它说“给你点好了”时，厨房究竟有没有收到单。

### 参考资料

1. *Learning Transferable Visual Models From Natural Language Supervision*，Alec Radford、Jong Wook Kim、Chris Hallacy等，2021。[论文](https://arxiv.org/abs/2103.00020)
2. *Visual Instruction Tuning*，Haotian Liu、Chunyuan Li、Qingyang Wu、Yong Jae Lee，2023。[论文](https://arxiv.org/abs/2304.08485)


---

<a id="chapter-15"></a>

## 15　它说改好了，文件真的改了吗？

设想你让助手把通知里的“周五闭馆”改成“周六闭馆”。它马上回答：“已修改。”你打开文件，周五还坚守在原地。

对于纯文本生成，写出“已修改”只是产生了一段文字。文件存在于另一个系统里，改变它需要实际操作。模型要从回答问题走向办理任务，就必须跨过这道边界。

### 先把一句话变成可执行的请求
设想助手能使用三种工具：读取文件、替换指定文本、重新读取文件。工具说明告诉模型，各工具做什么、需要哪些参数、会返回什么。

模型可以先生成一个结构化请求，指定读取哪份通知。宿主程序接到请求后，检查格式与允许范围，真正执行读取，再把文件内容作为工具结果交回来。决定“读哪个文件”与实际“打开文件读取字节”，由不同环节承担。

然后模型根据读到的内容提出替换请求。执行成功后，文件才发生变化。模型输出的工具参数如果错了，程序可能报错，也可能作用于错误位置；工具可用并不保证调用正确。

2022年公布的ReAct研究，将语言中的推理与面向任务的动作交替安排，让外部观察参与接下来的处理，是理解现代语言模型行动循环的一项代表工作。[1](https://arxiv.org/abs/2210.03629)

和第十二篇的检索相比，读取只是其中一种工具。有的工具取得信息，有的改变状态。后者一旦执行，世界可能已经变了。通知上的日期不会因为模型后来换了个说法，就自动变回去。

### 为什么执行以后还要再看一眼？
仍用同一教学任务。工具返回“未找到周五闭馆”。这时合理的下一步不是宣布完成，而是检查是否有空格、日期格式差异，或者目标文件是否选错。

设想重新读取后发现正文其实是“本周五暂停开放”。模型可以根据实际内容提出对应改动；工具执行后，再读到“本周六暂停开放”，才有依据报告文件中的变化。

观察、选择动作、执行、取得新观察，再决定下一步，这就是本篇使用的Agent基本工作方式。Agent常译作智能体，但行业定义并不统一。我们在这里明确指能够围绕目标，根据反馈组织若干行动的系统，不把任何一个会聊天的角色都自动算入。[1](https://arxiv.org/abs/2210.03629) [2](https://www.anthropic.com/engineering/building-effective-agents)

循环的价值在于后一步可以依赖前一步尚未发生时未知的结果。它也能出错：找错文件、误读工具返回、重复修改，都可能让任务偏离。因此“跑了很多轮”不等于“进展很多”。洗衣机同样很擅长循环，但它不负责把通知发到正确日期。

与ELIZA时期相比，这里的关键已经不限于回应文本与上一句是否搭得上。外部文件是可独立检查的对象，成功必须体现在那个对象上。

### 流程写死，还是让模型决定下一步？
设想另一个需求非常稳定：每天读取一份表格，计算总数，按固定模板生成摘要。程序完全可以预先规定步骤；其中某一步让语言模型润色，也不会让整套程序突然获得自由行动能力。

Anthropic的工程文章作了一种有用区分：工作流主要沿预先编排的程序路径运行；Agent则让语言模型动态决定更多处理过程与工具使用。这是该文的架构区分，实际产品可能混合两者。[2](https://www.anthropic.com/engineering/building-effective-agents)

对于固定日期替换，受限流程可能更简单可靠；如果任务是“找出通知与网页之间的不一致，修正受影响内容”，相关文件和下一步检查未必事先确定，动态决策更有用。

灵活性的代价是选择更多，也就增加了选错与检查的成本。模型决定每个步骤，通常还需要额外调用与等待。不要仅为获得一个更时髦的称呼，就让本来三步结束的工作开成十二次协调会。

历史变化因此不是“所有自动化升级为Agent”。预设流程仍适合许多明确任务；语言模型增加的是处理变化、组织工具的另一种选择。

### 工具接口和技能说明，各自补什么？
设想两个文件工具，一个参数叫“文件名”，另一个叫“资源地址”，返回格式又不同。接入更多系统时，开发者必须让模型与宿主程序知道这些接口怎么用。MCP，即模型上下文协议，提供一种连接工具与数据服务的标准化方式；它解决连接约定的一部分，不自动保证每次决策正确。[2](https://www.anthropic.com/engineering/building-effective-agents)

再设想项目有份可复用说明，规定修改通知前核对生效日期，修改后检查目录中的所有入口。将这种指令与资源打包为Skill，可以让后续任务按需使用。它主要把工作方法明确提供给系统，并不等于为模型即时训练了新参数。[3](https://learn.chatgpt.com/docs/codex/cli)

工具像实际能操作的设备，Skill像针对工作的方法说明，Agent循环负责在当前情境下组织步骤。三者不能互相替代。拿着详细操作手册，没有编辑工具，文件照旧；工具齐全，目标理解错了，也可能高效地改错通知。

如果任务涉及提交或发送，还必须区分准备内容与实际提交的边界。系统具备调用能力，不意味着任何动作都已经得到授权；权限范围会直接决定哪些请求能被执行。

标题的答案最终落在证据上：真正改好了，应该有执行后的文件状态支持。语言模型生成动作请求，宿主执行，结果进入下一轮判断，这套闭环才让“我来做”有机会变成现实变化。

下一篇，我们把通知换成软件项目。那里最不配合表演的角色已经就位：测试程序。它不太关心“已修复”四个字写得多有信心。

### 参考资料

1. *ReAct: Synergizing Reasoning and Acting in Language Models*，Shunyu Yao等，预印本2022，ICLR 2023。[论文](https://arxiv.org/abs/2210.03629)
2. *Building effective agents*，Anthropic，2024。[工程文章](https://www.anthropic.com/engineering/building-effective-agents)
3. *Codex CLI*，OpenAI，读取于2026-09-07；正文使用其中技能与项目工具说明。[官方文档](https://learn.chatgpt.com/docs/codex/cli)


---

<a id="chapter-16"></a>

## 16　Codex、Claude Code：从补一句代码，到修一个项目

设想一家小店规定：商品金额扣除优惠后，满100元包邮。顾客买了120元商品，用掉30元优惠，实际商品金额90元，网站却显示免运费。

商家向编程助手提出：“修好包邮判断。”这听起来只要改一行。但助手必须先找到那行，理解“满100元”的口径，还要确认改完以后100元整不会被收运费。

这是自拟的教学故障。文中的三种判断与四组金额已用本地程序核对，用来说明执行与验证的作用，不是Codex或Claude Code的产品对比测试。

### 先看项目，才能知道改哪儿
如果只让模型续写一小段代码，它能依据眼前片段提供补全。项目维修的输入则分散在不同地方：业务说明写包邮规则，优惠模块计算折扣，运费模块作判断，测试文件记录预期行为。

因此第一步往往是读取项目说明、搜索有关名称、查看调用关系。所谓调用，就是一个部分把数据交给另一个部分处理。读取这些关系，才能知道运费判断拿到的是优惠前还是优惠后金额。

Codex CLI的官方说明包括检查项目文件、修改内容和运行本地开发工具；Claude Code的官方机制说明则明确描述了收集上下文、采取行动、验证结果的循环。[1](https://learn.chatgpt.com/docs/codex/cli) [2](https://code.claude.com/docs/en/how-claude-code-works)

在教学项目里，假设读取后发现：优惠模块已经算出90元，但包邮判断仍拿120元比较。问题不在“模型懂不懂减法”，而在正确结果没有进入正确位置。

这也是编程Agent相对单点补全的重要工作范围变化：它有机会主动取得分散的证据。不能把“可访问整个项目”误解成“每次推理自动同时精读整个项目”；真正进入当前判断的内容，仍依赖搜索、读取与上下文管理。

满仓工具，不等于已经找到那颗松动的螺丝。

### 先重现错误，别只写一份修复宣言
在这个例子中，可以把输入固定为商品120元、优惠30元，运行现有判断。旧逻辑看120元是否满100元，返回包邮；业务规则看90元，应返回不包邮。预期与实际相冲突，错误因此可以重复观察。

为了避免金额表示的其他因素干扰，内部验证按“分”计算：12000减3000得到9000，与10000比较。本篇只讨论这一项资格规则，设定金额非负、优惠不超过商品金额，不添加真实商店可能还有的税费、地区和会员条件。

这一步的价值是给修复一个明确目标。如果不重现，模型可能改了名称相近但根本未使用的旧函数，随后写出一篇非常专业的完成报告。代码修改是真实的，问题仍然真实存在。

2023年提出的SWE-bench将真实代码仓库中的问题与修复评测联系起来，关注生成的修改能否通过相关测试，而不只是文字上像一个补丁。[3](https://arxiv.org/abs/2310.06770)

这里的补丁指一组文件差异，说明哪里增加、删除或改写。补丁写得合理是必要过程，运行后的行为才回答“修好了没有”。维修发票不能充当发动机点火测试。

### 修好90元，又错在100元
设想第一次改动把条件变成“优惠后金额大于100元”。120减30得到90，确实不再包邮，最初故障消失了。

但第二组输入是120元减20元，正好100元。规则写“满100元”，应当包邮；“大于100元”却将它排除。第一轮修改纠正了计算口径，又引入边界错误。

测试结果进入Agent的下一轮输入，它可以据此把条件改成“优惠后金额大于或等于100元”。再检查90元、99.99元、100元和101元，前两者不包邮，后两者包邮。四组结果与本篇规则一致。

这个过程增加的不是一次更响亮的自我肯定，而是一条此前未知的外部反馈。模型提出修复，程序运行，失败定位新的条件，再修改，形成与上一章一致的行动循环。

同时还要检查原来正确的行为是否被破坏。这叫回归检查：修复目标故障之后，原有应当通过的情况仍然通过。SWE-bench的评测也区分原先失败、修后应通过的测试，以及原先通过、修后仍应通过的测试。[3](https://arxiv.org/abs/2310.06770)

“一个红灯变绿”值得高兴，但如果顺手把旁边三个绿灯改红，系统只是重新设计了交通拥堵。

### 测试通过以后，结论应该有多大？
在教学范围里，四组输入通过，支持这段资格判断符合设定。它不证明页面展示、支付总额、服务器部署都正确。若网页调用的仍是旧版本，顾客照样会看到错误结果。

所以项目任务需要让验证范围与承诺相配。只改函数，就说明函数级检查；声称用户流程修复，就需要在实际流程里核对。运行环境也会影响结果：依赖缺失造成程序无法启动，与业务断言失败，应分别处理。

Codex和Claude Code在这里代表的是一种工作方式：语言模型与文件、命令及反馈连接，由外层系统管理执行和上下文。不能从一个产品名称推断固定模型版本，也不能根据界面外观猜测未公开的内部架构。本文产品描述以读取到的官方资料为界。[1](https://learn.chatgpt.com/docs/codex/cli) [2](https://code.claude.com/docs/en/how-claude-code-works)

最终交付还应包含可查看的改动与验证结果。把文件改好、把改动提交到版本记录、把软件发布给顾客，是不同动作，是否执行取决于本次任务范围。

标题中的跨越因此不只是“代码写得更多”。项目Agent会围绕目标寻找资料、定位错误、执行改动，并利用真实测试继续调整。它把语言生成接进了软件工作的反馈链。

我们的90元终于不包邮，100元也保住了资格。下一篇要把时间拉长：如果维修跨过许多轮对话，助手还能记得这条规则为什么这样改吗？

### 参考资料

1. *Codex CLI*，OpenAI，读取于2026-09-07。[官方文档](https://learn.chatgpt.com/docs/codex/cli)
2. *How Claude Code works*，Anthropic，读取于2026-09-07。[官方文档](https://code.claude.com/docs/en/how-claude-code-works)
3. *SWE-bench: Can Language Models Resolve Real-World GitHub Issues?*，Carlos E. Jimenez、John Yang、Alexander Wettig等，预印本2023，ICLR 2024。[论文](https://arxiv.org/abs/2310.06770)


---

<a id="chapter-17"></a>

## 17　任务一长，AI为什么开始忘事、返工、提前交卷？

设想包邮故障刚修好，商家又让助手补优惠说明、检查购物车、整理交付文档。工作跨过许多轮后，助手重新打开运费判断，把“优惠后满100元”改回“商品总额满100元”。

它可能不是突然反悔，而是这一轮没有拿到之前的关键理由。又或者文件已经写对，它看到页面能打开，就宣布整个任务完成，忘了结账流程还没检查。

一次正确修改与持续推进一个长任务，是两种不同难度。后者要求信息、环境与完成标准跨越多次决策保持一致。

### “聊过”不等于“本轮都能用”
模型每次处理的输入有长度范围，通常称上下文窗口。系统可以保存很长的完整聊天记录，但当前调用未必把所有原文一并交给模型。为容纳后续工作，可能压缩、筛选或检索旧内容。

设想最初用户写“包邮必须按优惠后金额”，后面堆积了大量运行日志。如果摘要只留下“已经修复运费”，新一轮知道做过什么，却不知道决定怎么做的条件。它很容易把旧问题重新包装成新修复。

即使文字还在窗口里，也不能保证模型稳定用好每一处。2023年的《Lost in the Middle》在所测多文档问答与键值检索条件中，观察到相关信息放在不同位置，会显著影响一些模型的表现；长窗口容量不自动等于可靠的信息使用能力。[1](https://arxiv.org/abs/2307.03172)

这不意味着所有后来模型都有相同程度的问题，也不是规定一到中间就必忘。它提醒我们，能装下与能准确取用，应分开评测。

原来在第六篇里，我们担心一句话中的信息传不过去；现在，担心的是整个任务记录怎样进入当前工作。便笺升级为文件柜，找文件的责任并没有消失。

### 把交接写成下一步用得上的材料
设想准备一份短交接：包邮条件为优惠后金额至少100元；资格函数已修改，四组边界输入通过；购物车页面尚未验证；具体改动可在版本记录中查到。

这份材料同时留下目标、关键约束、已验证状态和未完成项。下一轮读完之后，可以直接选择检查购物车，而不是再次猜测包邮口径。详细运行日志仍可另存，需要时再取，没必要每轮把所有输出塞到面前。

2025年，Anthropic关于长时间运行Agent的工程文章描述了它们在网页开发试验中遇到的两类问题：一口气做太多，留下难以交接的半成品；或见到已有进展便过早认定全部完成。它们采用进度文件、版本记录、功能清单与增量工作来改善连续性。[2](https://www.anthropic.com/engineering/effective-harnesses-for-long-running-agents)

这是有具体场景的工程经验，不是所有Agent失败的普遍统计。本篇包邮故事也不是该文报告过的真实事故。

还要检查记忆本身的来源。如果把模型猜测“也许会员免费”存成确定规则，下一轮会更加稳定地犯错。持久保存提高的是可重复取得的信息，不保证信息一开始就正确。

一张错得很工整的交接单，可以让错误顺利完成跨班次传承。

### 先检查现场，再相信昨天的记录
设想进度文件写“测试全过”，但此后有人改了优惠模块。昨天的结果仍是真实历史，却不能直接证明今天的代码也通过。

所以继续任务时，需要将记录与当前环境核对：文件是否变化，工作位置是否正确，关键程序能否启动，有关检查是否还有效。版本记录帮助定位改动前后，当前测试则检查现在的状态。

Anthropic的上述试验要求后续工作先了解版本与进度，启动环境并做基础功能检查，再选择未完成事项。这种做法将“接着聊”变成“接着处理一个可观察的项目状态”。[2](https://www.anthropic.com/engineering/effective-harnesses-for-long-running-agents)

在我们的例子里，若四组资格判断仍通过，但页面显示错，下一步应查页面与数据连接，而不是再把正确的比较条件改来改去。可靠记录帮助缩小搜索范围，现场反馈防止旧记录变成护身符。

跨轮工作因此不只是让模型有更长记忆，还要让它不断将记忆与对象核对。仓库管理员不能因为昨天盘过点，就断言今天没人领走螺丝。

### 什么时候才有理由交卷？
设想任务清单包含三项：资格计算正确、购物车显示正确、交付说明齐全。第一项完成后，文件增加了、测试绿了，场面已经很像竣工现场；但仍有两项缺口。

如果完成标准只写“把项目做好”，模型需要每轮重新猜测“好”意味着什么。将要求落实为可观察结果，可以减少这类漂移：哪种输入应得到什么行为，哪些页面应显示什么，哪些材料必须交付。

这不是让清单越长越好。把同一项拆成十个近义句，增加的是勾选工作；列出真正独立的验收条件，才帮助判断完成。也不能通过删除失败项，把尚未完成的任务改造成百分之百完成。

还应区别两种停止：要求全部满足后的结束，以及因缺少必要输入或环境受阻而停止。后者应报告阻断点，不能沿用“全部完成”的口气。产品外层的上下文管理、工具与执行控制共同影响这件事，Claude Code的机制说明也明确把这些放在Agent运行系统的职责中。[3](https://code.claude.com/docs/en/how-claude-code-works)

标题中的忘事、返工和提前交卷，往往可以从信息缺失、状态过期和完成标准不清等具体环节分析，而不是统统归为“AI没耐心”。持续工作需要可靠交接、当前状态核对和匹配任务的停止条件。

我们的包邮助手终于不用每隔几轮重新发明一次100元。接下来我们暂时离开软件，回到更早的游戏研究：如果不告诉机器每一步该按什么，只用结果给分，它怎样学习行动？

### 参考资料

1. *Lost in the Middle: How Language Models Use Long Contexts*，Nelson F. Liu等，预印本2023，TACL 2024。[论文](https://arxiv.org/abs/2307.03172)
2. *Effective harnesses for long-running agents*，Justin Young／Anthropic，2025-11-26。[工程文章](https://www.anthropic.com/engineering/effective-harnesses-for-long-running-agents)
3. *How Claude Code works*，Anthropic，读取于2026-09-07。[官方文档](https://code.claude.com/docs/en/how-claude-code-works)


---

<a id="chapter-18"></a>

## 18　没人教每一步，机器怎样学会玩游戏？

设想一个简化的接球游戏：屏幕上方的小球正在下落，你只能让底部挡板左移、右移或不动。接住得分，漏掉结束这一局。

现在不提供“此刻应该左移”的逐步示范，只让程序看到画面、选择动作、得到结果。它怎样从胡乱移动，变成较可靠地接球？

讲到这里，时间需要回拨。强化学习与控制研究远早于今天的大语言模型Agent。1992年的Q-learning论文已经讨论如何根据行动后果改善选择；2013年的深度Q网络研究则将深度神经网络与这种路线结合，用于Atari游戏。[1](https://www.gatsby.ucl.ac.uk/~dayan/papers/cjch.pdf) [2](https://arxiv.org/abs/1312.5602)

### 分数没有告诉它，刚才哪一步值得表扬
先把游戏拆开。环境是负责推进游戏并返回画面的系统；动作是左移、右移等允许操作；观察是程序能看到的内容；奖励是每一步收到的数值反馈。

环境的真实状态，还可能包括小球速度等信息。一张截图里的球在同一位置，可以正往左下，也可以往右上。单看这一帧未必能决定下一步。连续画面或历史信息，有助于区分这些情况。

策略，就是根据当前可用信息选择动作的办法。强化学习希望通过经验调整策略，让累计结果更好，而不是每一帧都得到人工标准动作。[2](https://arxiv.org/abs/1312.5602)

设想挡板第一步右移，第二步继续右移，第三步停下，第四步接住球。得分在第四步出现，却与此前移动有关。如果只表扬最后的“不动”，机器可能练成一位站着等球的哲学家。

这就是长期后果给学习带来的困难：眼前没有奖励，不表示这一步没价值；眼前得了一点奖励，也未必值得牺牲后面更大的机会。相较于文本预测中直接知道下一个真实词元，行动学习的反馈往往更间接、更延迟。

### 给动作估计长期价值
Q-learning提供一种思路：为“处在某种状态时，采取某个动作”估计未来能取得的累计回报。Q值是这类动作价值估计，不是这个动作像不像人类玩家。

设想当前右移还不得分，但右移后到达的位置，更有机会在下一步接住球。系统用这一步实际收到的奖励，加上对下一状态未来价值的估计，来修正刚才“右移”的价值。

当接球附近的状态逐渐学到较高价值，经过反复更新，这种信息可以影响更早的选择。未来回报通常还按距离作折扣，使较远的收益在当前计算中占较小权重。折扣比例是一项设定，不是机器对人生失去了耐心。[1](https://www.gatsby.ucl.ac.uk/~dayan/papers/cjch.pdf)

这个学习过程起初会依赖不准确的估计。1992年论文的收敛结论有明确条件，包括相应的状态动作访问与学习率要求；不能把表格表示下的结论直接搬给任意深度网络，说只要玩得久就保证最优。

选择动作时还要探索。若机器最初碰巧觉得“不动”最好，从此再不尝试右移，就无法知道右移可能更好。一种简单办法是多数时候选当前估计较好的动作，少数时候随机尝试。探索牺牲一部分眼前表现，换取新的经验。

动作价值把问题从“记住哪次得分”推进到“哪些早期选择通往好结果”。分数仍然晚来，但功劳开始有路往前找。

### 屏幕那么大，总不能每张截图单开一行表格
如果每一种可能画面都要单独记录左、右、不动的价值，表格会大得无法实际使用。2013年的深度Q网络，常简称DQN，用神经网络根据画面表示估计动作价值，让不同但相关的画面共享计算经验。[2](https://arxiv.org/abs/1312.5602)

论文使用卷积神经网络处理视觉输入。卷积的一项基本操作，是用共享的小范围计算在图像不同位置提取局部模式，再进一步组合。它适合从像素中取得有用特征；这条路线并没有使用后来才发表的Transformer。

在我们的接球设想中，小球向右挪一点，画面不同，却与原来的接球问题相近。网络有机会利用共同特征作出价值估计，不必为每个像素位置从零积攒一整套独立经验。

DQN还保存经历过的状态、动作、奖励和后续状态，再从中抽取样本训练，这叫经验回放。它一方面重复利用经验，一方面减少只连续学习相邻画面造成的强相关影响。这个想法也有更早研究，不能把整套深度学习与强化学习的历史都归给一篇论文。[2](https://arxiv.org/abs/1312.5602)

回放不是让挡板现场倒带。游戏可以继续向前，训练程序则从经验库抽取旧片段。运动员在场上接球，教练组在旁边翻录像，只不过这里的“教练组”也是计算。

### 学会拿分，为什么还不等于懂了游戏世界？
设想规则改成“只要挡板不断左右移动就加分”。程序可能学会疯狂摇摆，即使经常漏球。它优化的是我们给出的奖励，设计者心里的“优秀接球手”不会自动补进目标。

这与第十一篇的偏好训练连在一起：反馈怎样定义，会影响学出什么行为。评价讨喜的回答、核对程序结果、统计游戏得分，是不同奖励来源，不能因为都叫强化学习，就认为条件和能力范围相同。

还有一个对后面很关键的区别：上述Q学习可以直接学习动作价值，不必另外建立一个能预测下一幅画面的模型。这里的“无模型”，指不显式学习环境转移模型，不是说它没有神经网络这个机器学习模型。[1](https://www.gatsby.ucl.ac.uk/~dayan/papers/cjch.pdf) [2](https://arxiv.org/abs/1312.5602)

于是它可能知道“此刻右移较好”，却没有一套可供我们询问“连续右移三步，球和挡板将怎样变化”的环境预测器。行动策略与环境模型，是不同的东西。

标题的答案是：机器通过尝试动作、接收后果、更新对长期价值的估计，逐步改善策略。没人逐帧教它，不意味着没有游戏规则、奖励设计、数据和训练条件。

可如果每次尝试都要付出真实成本呢？游戏挡板坏不了，机器人撞一次货架却有账单。下一篇，我们要给行动系统增加一种能力：先预测可能发生什么，再利用这些预测练习。

### 参考资料

1. *Q-learning*，Christopher J. C. H. Watkins、Peter Dayan，1992。[原论文](https://www.gatsby.ucl.ac.uk/~dayan/papers/cjch.pdf)
2. *Playing Atari with Deep Reinforcement Learning*，Volodymyr Mnih等，2013。[论文](https://arxiv.org/abs/1312.5602)


---

<a id="chapter-19"></a>

## 19　现实里试错太贵，能不能先在模型里练？

设想一个小车要穿过仓库，把箱子送到门口。每次失败都可能撞歪货架。老板很支持人工智能，但不打算让每次参数更新都对应一张维修单。

上一章的行动学习，可以从真实交互经验中改善策略。现在我们增加一个问题：能否先学一个环境模型，预测“在当前情况下这样做，接下来可能怎样”，再利用这些预测训练行动？

这类研究里的世界模型，并不是把整个宇宙塞进电脑。它首先是针对所处理环境与信息，学习状态怎样随动作变化的模型。名字管得很宽，能预测什么，仍由训练内容和检验结果决定。

### 先学“会发生什么”，再学“应该做什么”
在仓库设想中，先记录实际经历：当前画面、转弯或前进的动作、随后画面，以及与任务有关的反馈。预测模型可以用这些记录学习从当前情况与动作推到后续情况。

动作不能省略。同样面对货架，选择前进与后退，后果可能不同。若模型只学“一般接下来出现什么画面”，却不以动作作为条件，就难以回答我们真正关心的比较。

2018年，David Ha与Jürgen Schmidhuber的《World Models》展示了一种把观察压缩、动态预测和行动控制分开的研究方案。其视觉部分将图像变成紧凑表示，循环预测部分结合表示、动作和历史预测后续，控制器则利用这些信息选择动作。[1](https://worldmodels.github.io/)

这里可以看见本系列的旧朋友：数字表示、循环状态、训练。世界模型并不是等到聊天模型流行以后才出现的想法，也不要求每个部分都使用Transformer。

在我们的例子中，环境模型回答“右转可能进入过道”，策略回答“为了送箱子，现在选右转”。即使两者放在同一套系统里，也要分清工作。天气预报说有雨，与你决定带伞，是相互有关的两件事。

### “在想象里练习”，不是必须播放一部高清电影
直接预测每个像素很费力，而控制所需的信息可能集中在位置、运动和障碍关系上。潜在表示，就是模型内部学到的紧凑数字状态；它不必与人命名的“坐标”“速度”逐格对应。

设想我们已经从仓库画面得到一个内部状态。让模型输入“右转”，预测下一状态；再输入“前进”，继续预测。这样可以在没有实际移动小车的情况下，形成一段候选轨迹。轨迹是按顺序连接的状态与动作，并非一条装饰性的路线图。

2019年公布、发表于2020年会议的Dreamer，把这类潜在空间中的预测用于学习行为。它学习环境动态与奖励相关预测，再在想象出的轨迹上训练动作模型和价值模型，最后回到实际环境收集新经验。[2](https://arxiv.org/abs/1912.01603)

为什么需要价值模型？预测通常只展开有限步，任务却可能更长。价值估计用来评价展开范围之外的后续收益，帮助行动学习不只盯着眼前几步。

在仓库里，某条路径前几步离门口更远，却绕开了货架。若只看短期距离，小车可能拒绝绕路；结合后续价值，绕路就可能成为值得学习的选择。路线最终是否学对，要回实际任务检验。

训练期间可以在紧凑状态里计算，无须每次都生成供人观赏的清晰视频。把状态解码成画面，常是为了观察模型表现。小车练习搬货，不必给每次练习配导演和调色师。

### 模拟器也会被自己的学生钻空子
问题很快出现：模型预测可能错，而策略会主动寻找高回报的做法。一个小预测漏洞，可能被反复利用。

《World Models》的作者报告过这样的现象：在其学出的虚拟射击环境中，控制器找到某些行为，使预测环境中的怪物不再正常发射火球。这种策略在模型里得利，却不代表在真实游戏中也成立。[1](https://worldmodels.github.io/)

回到仓库设想：如果模型错误地认为货架边角可以穿过去，策略可能学出一条漂亮近路。在模拟里节约时间，在现场更换保险杠。它不需要有“作弊”的心理，只要优化目标偏爱这条错误预测出来的路径。

还有误差积累。第一步把位置预测偏一点，第二步以偏了的位置为输入，后面可能越走越远。策略进入训练数据很少覆盖的区域时，模型也可能尤其不可靠。

因此，预测图片好看、单步误差较小、训练策略得分高，都不能各自充当最终保证。应该检查与目标有关的动作后果，以及策略回到实际环境后的表现。增加随机性、改善数据覆盖、继续收集经验等办法能够帮助处理问题，但没有一种简单开关能让错误消失。[1](https://worldmodels.github.io/) [2](https://arxiv.org/abs/1912.01603)

比起无模型方法，这条路线增加了可利用的预测，同时也增加了必须管理的模型误差。它是一项取舍，不是宣布真实试错从此退休。

### 从能用一次，到更容易在不同任务中用
设想仓库换了一个版本：奖励从送达加1改为加100，动作从左右按钮改为连续转向角度。学习算法如果每遇到变化就需要专家大改设置，应用成本仍然很高。

Dreamer第三代研究关注的一项问题，就是怎样让同一算法设置更稳健地用于不同环境与奖励尺度。论文采用数值变换、归一化及训练目标平衡等设计，减少跨任务调参负担。[3](https://arxiv.org/abs/2301.04104)

这里的设置通常叫超参数，例如训练中某项损失占多大权重；它们与通过训练得到的模型参数不同。相同超参数在多个任务有效，也不意味着同一份已训练权重无需新经验就能驾驶所有仓库的小车。

这项发展把问题从“能否靠预测学习”推进到“这套办法是否足够稳健、便于复用”。后续研究还会增加模型规模、使用离线视频，并尝试更复杂的交互环境；但复杂画面不会免除动作检验。

标题的答案是：可以先在学出的模型里练习。先用经验学习环境如何变化，再在预测轨迹中学习行动，能减少部分直接交互的需求；收益取决于预测对任务是否足够可靠，以及如何处理错误和数据覆盖。

老板可以少付一些维修费，但不能把真实仓库的验收员全部换成模型里的虚拟同事。

最后一篇，我们将面对更容易让人惊叹的展示：一个可以实时走进去、转身、探索的生成世界。画面已经动起来了，接下来该怎样判断它究竟掌握了多少规律？

### 参考资料

1. *World Models*，David Ha、Jürgen Schmidhuber，2018。[作者研究全文与演示](https://worldmodels.github.io/)
2. *Dream to Control: Learning Behaviors by Latent Imagination*，Danijar Hafner、Timothy Lillicrap、Jimmy Ba、Mohammad Norouzi，预印本2019，ICLR 2020。[论文](https://arxiv.org/abs/1912.01603)
3. *Mastering Diverse Domains through World Models*，Danijar Hafner、Jurgis Pasukonis、Jimmy Ba、Timothy Lillicrap，DreamerV3，预印本2023。[论文](https://arxiv.org/abs/2301.04104)


---

<a id="chapter-20"></a>

## 20　生成一个能走进去的世界，就掌握它的规律了吗？

设想屏幕上生成了一间图书馆。你向前走，书架逐渐靠近；向左转，窗户进入视野。你把一本蓝色的书放在桌上，绕过书架，再走回来。

书还在不在原处？桌子有没有悄悄换颜色？如果你改为推倒书，而不是把它放平，后续会不会相应变化？

这是自拟的检验场景，不是对某个产品实测结果的描述。漂亮的第一帧很容易令人惊叹，连续动作之后的这些小问题，却更接近世界模型需要承担的工作。

### 视频继续播放，与环境响应动作有什么差别？
一段普通预生成视频，后面的画面已经由生成过程决定。观众按左键，通常不会让镜头改走左边。可交互环境则需要根据已有状态或画面，以及现在输入的动作，生成对应后续。

设想从同一图书馆入口开始，一次向左，一次向右。我们希望两次后续有与动作一致的区别，而不是把同一段漫游视频换个播放按钮。交互把生成问题从“接下来像什么”，进一步约束为“采取这个动作后，应当怎样变化”。

2024年的Genie研究用视频训练可交互环境：把画面编码成视频词元，学习表示变化的潜在动作，再由动态模型根据历史和动作预测后续。训练视频并不要求提供逐帧真实按键标签。[1](https://arxiv.org/abs/2402.15391)

具体说，训练时模型可以同时看到前后画面，尝试用少量离散动作代码概括中间变化，并让这些代码帮助预测后续。使用时，用户选择相应代码来控制生成。这里学到的动作不是天然带着“左键”“跳跃”的人类标签，也不保证与真实控制器逐项一致。

它给无动作标注的视频提供了一条进入交互建模的路径，但不能把“没有动作标签”说成“没有训练数据”，更不能说模型直接发现了适用于所有环境的物理定律。

图书馆现在会响应按键了。至于按下“向左”时究竟是你左转，还是整间图书馆配合你一起搬家，还得继续观察。

### 画面接得顺，不代表东西记得牢
Google DeepMind于2025年8月介绍Genie 3，展示由文本描述生成并实时探索动态环境的能力。官方发布同时列出动作范围、持续交互、地理准确性和多主体互动等方面的限制。[2](https://deepmind.google/blog/genie-3-a-new-frontier-for-world-models/)

为什么“转身回来”是一个好问题？因为物体离开画面之后，后续生成仍需要保留与它有关的信息。只要每一小段看起来顺畅，却在离开视野时重新抽签决定摆设，就会得到局部自然、整体不一致的环境。

在图书馆设想中，可以分开检查：蓝书短暂被遮挡后是否仍在，取走蓝书后桌面是否确实空了，换个视角是否保持大致几何关系。不同检查针对不同要求，不能凭一个成功片段推断所有方面都成立。

2026年1月，Google推出Project Genie实验原型，让用户创建和探索生成世界；当时的说明也明确指出，画面未必始终符合真实物理，控制还有局限。模型研究与具体原型的开放能力、时长限制并不完全相同。[3](https://blog.google/innovation-and-ai/models-and-research/google-deepmind/project-genie/)

同年5月，官方又介绍与Street View街景影像结合的能力，让生成起点可以关联真实地点。这增加了现实参照，不等于把后续生成全部变成该地点的可靠测量记录。[4](https://blog.google/innovation-and-ai/models-and-research/google-deepmind/project-genie-expands/)

如果真实街角在生成世界里接出了一座城堡，我们可以欣赏创造力，却不能据此更新导航。生成的图书馆管理员，也不应负责告诉消防员真正的出口在哪里。

### 能在里面练出行动，证据就又多一层
上一章的Dreamer提醒我们，世界模型不只供人观看，还可以用于训练策略。问题从“画面是否连贯”进一步变成“模型中的经验，能否帮助完成目标任务”。

2025年的Dreamer 4论文研究在学出的世界模型中训练行动，使用高效Transformer等设计支持复杂环境预测。它在Minecraft任务中探索固定离线资料下的学习，随后在实际游戏评测中检验获得钻石的表现。[5](https://arxiv.org/abs/2509.24527)

这项结果需要带着条件阅读：论文使用包含视频、动作和事件标注的既有资料，并提供子任务条件；“离线学习”指训练时不让Agent额外与游戏交互取得新经验，不是训练和最终评价都从未接触游戏，也不是完全没有人类资料与任务设计。

设想两个仓库模型都能生成很逼真的货架。一个把碰撞预测得较对，另一个偶尔允许穿墙。在它们内部训练出来的策略，回到真实仓库之后可能表现很不一样。第二个模型可以赢得短视频点赞，却很难通过货架部门的验收。

因此，策略迁移与任务完成提供了比观感更直接的证据。但一个游戏任务上的收益，仍不能无限外推到机器人、交通或所有物理场景。环境、动作接口、训练资料和评价目标改变以后，需要新的检验。

Genie与Dreamer这两组案例回答的重点也不同：前者突出生成交互环境的能力，后者突出利用预测训练行为。它们可以接近、结合，却不是同一条榜单上只比较画质的产品。

### 走到这里，哪些东西真正连了起来？
回看开头那本蓝书。语言模型可以读懂“把书放回桌上”这句请求；视觉系统提供桌与书的观察；Agent组织操作；策略决定下一步动作；世界模型预测这些动作可能造成的变化。一个系统可以组合它们，但不能用其中一项的成功替其他项验收。

Transformer是一种计算架构，Agent是一种围绕目标组织行动的系统概念，世界模型描述对环境变化的建模作用。它们不在同一个分类层级。早期规则系统没有Transformer，2013年的DQN用了卷积网络，2018年的World Models用了循环预测；后来的一些交互模型采用Transformer，也不意味着所有世界模型都必须如此。[1](https://arxiv.org/abs/2402.15391) [5](https://arxiv.org/abs/2509.24527) [6](https://worldmodels.github.io/) [7](https://arxiv.org/abs/1312.5602)

同样，世界模型不是语言模型已经确定的统一继任者。语言擅长承载请求、知识和沟通，环境预测帮助比较行动后果，工具把决定落到对象上；它们可以在不同任务中分工合作。

整套系列从“研究生命起源”里怎样切出词开始，经过规则、概率、表示学习、预训练与反馈，走到可以读资料、用工具、检查结果，再走到预测与生成交互环境。贯穿其中的变化，是我们让机器利用了哪些信息、执行了哪些操作，以及用什么结果判断它做对了。

标题的答案也在这里：生成一个能走进去的世界，说明系统取得了重要的交互生成能力；是否掌握特定规律，还要看动作响应、持续一致性、未见情境中的预测，以及这些预测能否支持实际任务。漂亮的世界，是证据的起点之一。

我们终于又回到图书馆。那本蓝书是否还在桌上，比模型宣布“我理解了世界”，更值得走过去看一眼。

### 参考资料

1. *Genie: Generative Interactive Environments*，Jake Bruce、Michael Dennis、Ashley Edwards等／Google DeepMind，2024。[论文](https://arxiv.org/abs/2402.15391)
2. *Genie 3: A new frontier for world models*，Jack Parker-Holder、Shlomi Fruchter／Google DeepMind，2025-08-05。[发布说明](https://deepmind.google/blog/genie-3-a-new-frontier-for-world-models/)
3. *Project Genie: Experimenting with infinite, interactive worlds*，Diego Rivas、Elliott Breece、Suz Chambers／Google，2026-01-29。[原型说明](https://blog.google/innovation-and-ai/models-and-research/google-deepmind/project-genie/)
4. *Simulate real-world places with Project Genie and Street View*，Diego Rivas、Jonathan Herbert、Nicole Segaran／Google，2026-05-19。[更新说明](https://blog.google/innovation-and-ai/models-and-research/google-deepmind/project-genie-expands/)
5. *Training Agents Inside of Scalable World Models*，Danijar Hafner、Wilson Yan、Timothy Lillicrap，Dreamer 4，2025。[论文](https://arxiv.org/abs/2509.24527)
6. *World Models*，David Ha、Jürgen Schmidhuber，2018。[作者研究全文](https://worldmodels.github.io/)
7. *Playing Atari with Deep Reinforcement Learning*，Volodymyr Mnih等，2013。[论文](https://arxiv.org/abs/1312.5602)
