观文堂的续笔生
一、续笔十年,未曾写过一句自己的话
翰林院下设一个小衙门,叫观文堂。编制三十人,干的活说出来都不太好意思——"代笔"。
不是代笔写文章。是续写。某位大人上折子写了上半段,下面不知道怎么接了,把稿子丢到观文堂来。观文堂的笔帖式负责往下续——续出来得跟那位大人亲笔写的一样口气、一样用词、一样立场,前后浑然一体,像同一个人一口气写完的。
观文堂的掌班叫沈续之,在这间屋子里坐了二十二年。他续过的折子不下三百万件。六部的、各直省的、都察院的、内务府的——什么样的公文他没见过?
"沈师傅续的折子,摘了落款你分不清是谁写的。"这是翰林院流传最广的一句评价。
今年开春,观文堂来了个新差事,把所有人都难住了。
不是续折子。是续——"所有东西"。
二、天底下的文字,没有它收不了的尾
新来的掌院学士姓谭,是个有想法的人。他翻了一遍观文堂二十年的存档,发现了一件事:沈续之续折子只需看三行。
"三行?"谭学士把沈续之叫来,"你只看三行,就知道后面该写什么?"
"用不了三行。"沈续之低头站着,"有时候看一行就够了。"
"那你给我续一个。"谭学士从桌案上随手抽了张纸,念了十二个字:
"'臣闻治天下者,当以民为本,以——'"
"以教化为先。"沈续之脱口而出。
谭学士愣了片刻。他把那张纸翻过来——他念的确实是原件的前半句,而原件的后半句正是"以教化为先"。沈续之根本没看过原件。
"这不是猜的,"谭学士放下纸,"你脑子里,是怎么出来的这四个字?"
"回学士——'臣闻治天下者,当以民为本'这个开头,下官见过至少六万次。这六万次里,后面跟'以教化为先'的占了两万七千次,跟'以法度为纪'的占了一万四千次,跟其他说法的加起来不到两万次。"
"如果前头是'臣闻治天下者,当以民为本,以教化为先,则——'呢?"
"后面的'则'字,十个里有八个跟'天下'——'则天下幸甚'、'则天下安定'、'则天下归心'。"
谭学士放下茶盏,来回踱了六七步。
"沈续之,你知不知道为什么我把你叫来?"
"下官不知。"
"我要你把观文堂改成另一个东西——不续折子了。续天底下所有的东西。"
三、续诗、续判、续药方、续墓志
谭学士办了一个"万文馆"——从六部衙门、各省督抚衙门、各地府州县,调来了过去一百八十年间的所有公文存档。加上国子监的课卷、太医院的医案、刑部的判词、礼部的祭文、翰林院自存的诗赋词章——摞起来有一千二百万件。
"你要什么有什么。"谭学士指着那堆积如山的文档,"我要你做一件事:把这一千二百万件全读一遍——哦不,不是读。是当成'上半段',然后往下续。"
全观文堂三十个人,花了整整一年半。把这堆纸一页一页录下来。每看到前文,就试着往下续——续完跟原文对照,看对不对。
三年后。观文堂变成了一个没人见过的怪物。
礼部来了个人,拿着一张新拟的祭天祝文,只写了开头六句。丢进观文堂。一顿饭的工夫,续出了后十二句——骈四俪六,庄重典丽,天地祖宗该用的词一个不落。
太医院来了个老御医,拿了一本残缺的《伤寒论》古抄本——中间蛀掉了一大段,竹简上的字全糊了。老御医自己琢磨了半年没补出来。丢给观文堂。观文堂的人看了前一句和残留的零星笔画,结合前后文,把蛀掉的那段补了七句。老御医拿去跟另一家藏本一对——七句对了六句,剩下一句虽然字不同,药性方向毫无二致。
最离谱的是刑部。一个案子两造各执一词,证词前后矛盾,审了半年审不清。有人突发奇想——把双方的诉状和证人证词都丢给观文堂,让"续"一个判词出来。观文堂出了一篇。刑部老尚书看了半天,说了一句:"这判词若是真堂官写的,本官服。"
沈续之的名声传遍了六部。但没人知道他续这些的时候在想什么。
四、从不问"真的假的",只管"顺不顺"
新来的学徒崔和有一天问了个没人敢问的问题。
"沈师傅,您续药方的时候——懂医术吗?"
"不懂。"
"续判词的时候——读过《大清律例》吗?"
"翻过几页,但记不全。"
"那续祭天祝文呢?您又不是礼官,您怎么知道天地祖宗跟前该说什么?"
沈续之放下笔。
"因为我不是在'写'。我只是在往下续。"
"续和写有区别?"
"写,你得知道你要说什么。续——你只需要知道,话说到这儿,下一个字最可能是哪一个。"
他拿过崔和桌上的半张纸,是某位侍郎留下的折子残稿。
"'伏念臣一介寒儒,蒙圣恩简拔,系列——'"
"'卿贰。'"沈续之把笔补上,"我不是因为'卿贰'是什么意思才写的。是因为在六万封类似的谢恩折里,'系列'后面跟的最多的那个词就是'卿贰'。我不知道它是几品官、干什么的。但我知道它该出现在这里。"
崔和听得后背发凉。
"所以您续这些东西的时候,心里没有任何'知识'?"
"也可以说有。但那个知识不是——'地球是圆的'、'药性是温的'——那样的知识。是另一种:见过太多次,就到了骨子里。你不需要'知道'它,你已经'是'它了。"
崔和想了很久。
"那要是一样东西您从来没在旧档里见过呢?比如洋人新发明的蒸汽……机?"
"那就续不好。没见过,不知道它跟什么词挨着。硬续的话——只能蒙一把。蒙中了算运气,蒙不中就是笑话。"
沈续之顿了顿:"所以我们有个铁规矩——续出来的东西,必须给行家看过。续药方请教御医,续判词请教刑部。我们只负责把'该续什么'这个事做好。对不对,那是行家的事。"
崔和终于懂了。观文堂这帮人的功夫,不是"什么都懂"。是"看过了太多"——以至于任何一句话开了头,他们都能接上。
那天傍晚,沈续之临走前又跟崔和说了一句。
"天底下的字,没有一个字是凭空冒出来的。每一个字的后面,都跟着它最可能的下一个字。二十二年——我不过是在这堆纸里,认清了它们一个牵一个的脾气。"
五、一个字,一个字,往下走
谭学士到晚年,有人问起观文堂。
"这间屋子里的东西,到底算什么?会写文章?会断案子?会治病?"
谭学士摇了摇头。
"都不是。它一样也不会。它只会一件事:你给它一截话,它告诉你,下一个字最可能是哪个。然后它把这个字接上去——再把它自己刚接的这个字也当成上文的一部分,继续猜下一个字。"
"它就是这样,一个字、一个字、一个字——走完一整段路。"
来人愣了半天:"就这?就靠猜下一个字,就能续出祭天祝文、补出医书、断出案来?"
"能。只要它见过的东西足够多。"
谭学士端起茶,透过窗子望着院子里那棵老槐树。
"抄书万卷,无师自通。续笔一字,天下无穷。"
技术解读
自回归语言建模(Autoregressive Language Modeling)是 GPT 系列大语言模型的底层训练范式——简单来说,就是教一个模型"根据上文预测下一个词"。
这个想法可以追溯到 Shannon(1948)的信息论,但真正把它变成工程现实的是 Transformer(Vaswani et al., 2017)和 GPT(Radford et al., 2018)。GPT 的核心理念有一种极致的简洁:取一段文本,用前面的 token 预测后面的 token,把这个"预测下一个词"的任务在上万亿 token 的语料上反复训练。训练完成后,你只需给模型一个开头——它就会一个字一个字地接着往下写。预训练阶段学到的不是某个具体领域的知识,而是语言本身最深层的统计规律:一个词后面,全人类最常接哪一个词。
核心概念回顾
| 概念 | 通俗解释 |
|---|---|
| 自回归(Autoregressive) | 生成每个新 token 时,把之前生成的所有 token 都当作上下文输入,一个接一个串行生成 |
| 下一个 token 预测(Next Token Prediction) | 预训练的终极简单目标:给定前文,猜下一个 token。猜对了就加强,猜错了就修正 |
| 交叉熵损失(Cross-Entropy Loss) | 衡量模型预测的概率分布与真实 token 之间的差距。训练目标就是最小化这个损失 |
| 因果注意力掩码(Causal Mask) | Transformer 中的下三角矩阵,确保每个 token 只能看到它"之前"的 token,不能作弊看后面的 |
| 最大似然估计(MLE) | 让模型最大化看到真实训练数据的概率——"让自己更有可能写出训练集中出现过的文本" |
| 复杂度(Perplexity) | 衡量语言模型好坏的指标:模型对文本"不确定"的程度。越低越好,等于交叉熵的指数 |
| 预训练语料规模 | 现代 LLM 的训练数据量级:从 GPT-3 的 300B token 到 LLaMA 2 的 2T,再到 GPT-4 的估计十余万亿 |
| 教师强制(Teacher Forcing) | 训练时,每一步的"上文"用的是真实文本而非模型自己的预测——这样才能并行训练 |
| 涌现(Emergence) | 大量能力不是被专门训练的,而是在"预测下一个词"这个看似简单的任务中,随着模型和数据的规模增长自然出现的 |
| 文本延续(Text Continuation) | 与"指令遵循"相对:原始 GPT 只会续写,不会"问答"。后来的 RLHF 和指令微调才教它学会对话 |
故事中的隐喻对照
| 故事元素 | 映射的技术概念 | 解释 |
|---|---|---|
| 观文堂(续折子的小衙门) | GPT 预训练模型 | 一群"只会续写"的人,但续得足够多之后,续写本身就是一种智慧 |
| 沈续之(掌班) | 训练好的 LLM(如 GPT-3) | 看了太多文本后能自动预测下一个字,不需要理解领域知识 |
| "只看三行就知道后面" | 下一个 token 预测 | 模型的核心能力就是根据前文推测最可能的后续 |
| 一千二百万件存档 | 预训练语料 | 模型见过的所有文本数据。越多→越准 |
| "六万次里两万七千次跟了这个" | token 概率分布 | 模型为每个可能的后续 token 分配一个概率——它不是一个确定性答案,而是一个概率向量 |
| 续祭天祝文 | 在特定风格/语体上续写 | 预训练模型学到了不同文体和语域的分布,可以通过提示切换到对应风格 |
| 续《伤寒论》(蛀掉的段落) | 补全/填空能力 | 在足够多的类似文本上训练后,模型能推断出缺失部分最可能的文本 |
| 续判词(刑部案件) | 带有推理特征的续写 | 在大量判词文书上训练后,模型续写出符合裁判文书模式的文本 |
| "不懂医术、不懂律例——只是往下续" | 语言模型学的是统计规律,不是真知识 | 模型没有"理解"——它只是极其擅长估计条件概率 P(下一个词 |
| "没见过的东西续不好" | 分布外(OOD)泛化能力弱 | 模型在训练分布之外的输入上表现不可靠 |
| "必须给行家看过" | 人工审核 / 对齐 | 预训练模型的输出需要经过专家验证或后续对齐,不能直接用于高风险决策 |
| "一个字一个字往下走" | 自回归解码 | 每次生成一个 token,然后把这个 token 加入上下文,继续生成下一个 |
| "抄书万卷,无师自通" | 涌现能力 | 大量能力不是在直接监督下学会的,而是在足够大的规模和语料上自然涌现的 |
为什么这个故事对应预训练 / 下一个词预测?
"预测下一个词"是 LLM 唯一的预训练任务。 GPT 系列不做情感分析、不做文本分类、不做问答——预训练阶段只做一件事:给定上文,猜下文。这个任务简单到可以在任何文本上运行——不需要人工标注。沈续之二十二年只"续"不"写",正是这个逻辑。
"只看三行"体现的是上下文中的条件概率。 语言模型做的事情本质上是估计 P(w_t | w_1, w_2, ..., w_{t-1})——给定前文,下一个 token 的条件概率。沈续之看到六万次"以民为本"后面跟的分布,就是这一条件概率的直觉版本。
续药方、续判词、续祭文的多样性,展示了"预测下一个词"作为统一界面(Universal Interface)的能力。 不管输入的"前文"是药方、判词还是祝文——模型都用同一个机制来处理:条件概率。这使得单个模型可以覆盖无限多种任务——只要你能把任务"重写"为续写的形式。
"没见过的东西续不好"指出了预训练的根本局限。 语言模型只学到训练分布中的统计规律。面对训练数据中从未出现或极少出现的内容(新概念、新词汇、事实性的零样本问题),模型要么猜错,要么产生幻觉。
"一个字一个字走完一整段路"是自回归生成的精确写照。 推理时,模型先根据输入 prompt 预测第一个 token,然后把预测出的 token 拼回上下文,再预测第二个……如此循环。这个串行过程既是强大之处(每一步都有完整的上下文),也是效率瓶颈(不能一次性并行生成整个序列)。
涌现是预训练最令人惊叹的现象。 "抄书万卷,无师自通"——GPT-3 的论文标题叫"Language Models are Few-Shot Learners",发现 175B 参数的模型不需要专门的训练就能做翻译、问答、算术等任务——而这些能力从未被显式训练过。它们是从"预测下一个词"这个唯一的目标中涌现出来的。
后记:预训练的美感在于它的极致简约。你不需要教模型什么是语法、什么是逻辑、什么是事实——你只需要给它看足够多的文本,让它反复做一件事:猜下一个字。猜久了,语法自然就渗透进了每一层权重;猜久了,事实自然就凝结在了某个注意力头里;猜久了,连推理的路径都藏在了字与字的牵连之中。沈续之在观文堂坐了二十二年,他续过的每一个字都在告诉他——世间一切文字,不过是上一个字牵着下一个字,从开头走到结尾。所有的智慧,都埋在这"下一个字"里。

