鉴真阁的核史官
一、最好的史官,出了一段假史
国史馆里,论才情,没人比得上何太史。
何太史大名何敏行,三十四岁入史馆,四十二岁升太史。他修过《世宗实录》,主编过《皇朝通典》,经手的文稿摞起来比他本人还高两头。同僚们说:"何太史写的人物列传——你读着就觉着这人好像刚从你面前走过去。"
但偏偏就是在人物列传上,何太史出过一次大错。
去年国史馆重修《文宗实录》。何太史负责写六位大臣的列传。其中一位叫盛文昭——做过一任礼部侍郎,不算很有名。何太史洋洋洒洒写了三千字。写了他哪年科举、哪年中进士、哪年上过一道著名的"请罢矿监"折子——写得绘声绘色,从殿上对答到同僚侧目都写了。
稿子送到总纂官案头。总纂官姓陈,是个以"龟毛"闻名的老学究——一个年份前后差半年他都能跟你较三天劲。
陈总纂翻完何太史的盛文昭传,没批字。过了三天,他把一沓文牍放在何太史桌上。
"你写'盛文昭于隆庆三年上《请罢矿监疏》'——我查了隆庆三年所有的奏疏档,没有。"
何太史接过文牍,翻了一遍。确实没有。
"那可能年份记错了——"
"不急。"陈总纂再推过来一沓文牍,"我查了盛文昭从隆庆元年到万历十年所有的行状和墓志——此人在礼部任上从未就矿监一事上过任何奏疏。矿监这回事,盛文昭一辈子就没碰过。"
何太史的脸白了。
"你再看看你自己写的《世宗实录·盛文昭传》。"陈总纂从架上抽出另一本书,"八年前你写的初版。里面没有矿监这回事。"
何太史翻开自己写的旧稿。确实没有。
三千字的列传——写了一个不存在的事件,引了一篇不存在的奏疏,描绘了一场不存在的朝堂辩论。
而写下这一切的,是国史馆最有才情的笔。
二、它不是在说真话——它在说像真话的话
出事的第二天,何太史把自己关在屋里,把那份假列传从头到尾重新看了一遍。
写法没有任何问题。结构、辞章、典故、语气——一个字都没有错。它完全"读起来像真的"。
读起来像真的——可它不是。
他又翻了另一样东西——那天写这份稿子时的草稿。他有一个习惯——下笔之前先列几个要点。草稿上第一行写的是:"盛文昭,万历初年礼部侍郎。此人资料不多。"
"资料不多"——这四个字,是关键。
"资料不多的时候,我干了什么?"何太史对着自己的草稿在想。他没有凭空想象。但他做了另一件事——把"同时期其他礼部官员经常做的事"填了进去。万历初年,礼部好几个侍郎都上过折子反对矿监——他把这个背景当成了盛文昭的履历。不是故意编造——是他的脑子里,把一群人的共同经历,不知不觉贴到了一个人身上。
陈总纂来找他喝茶。
"老何,我核了你近几年写的列传。不光盛文昭——其他五个冷门人物,至少也有三个,多多少少都有类似的问题。不是大错——把同时期另一人做的某事塞到了传主头上、移了一年的时间、换了一个地名。每个单独看,都不起眼。"
"但拿这种稿本面世——一年之后别人转引了,就没人分得清哪些是你查过的、哪些是你自己也不知道从哪冒出来的。"
何太史放下茶杯:"我写盛文昭那三千字的时候——每一句在我脑子里都是顺的。我下笔的时候没觉得有任何不对劲。"
陈总纂点头。
"这才是要命的。你错得越自信,将来害的人越多。"
三、信手拈来的地方,最不可信
陈总纂做了一个决定——在国史馆设了一个从来没有过的职位:核史官。
不是一个。是十个——专门核对史馆稿件中的每一个"可核查的事实陈述"。哪个年份、哪条奏疏、哪个人名、哪个地名、哪个数字——只要有原始档案可查,一律翻档案对。
头一个月,核出了四百多处错。不是何太史一个人的——整个史馆的人都有。最擅写战史的武太史,核出了三十七处——全是战争的兵员数字。不是说错——是前后不一致。同一个战役的同一个数字,在这篇里用了三万人,在那篇里用了三万两千——差距不大,但在史书上差两千人可能差的是一路的胜负。
武太史被核出来的时候很不高兴。"差两千人算什么大事?战场上本来就没个准数。"
"两千人算不算大事我不管,"陈总纂说,"但你用了两个不同的数,同时又都没有出处。这两个数从哪儿来的?你写的时候到底看没看档?"
武太史憋了一会儿:"三万这个数——是写的时候脑子里蹦出来的。三万二这个——可能是后来查过的。"
"那你为什么不把查过的写进两篇?"
武太史答不上来。因为他写第一篇的时候觉得"我记性好,不用查"。等他后来真去查了——发现错了——但没回头改第一篇。
核史官们发现了三个规律。
第一,错误最集中的地方——是史官自己觉得"太熟了,不用查"的地方。"太熟了"往往意味着"我大概知道,细节不一定"。而细节,才是最要命的地方。
第二,错误最隐蔽的地方——是史官在描述"一群人里的某一个人"的时候。群体特征会被不知不觉地当成个人履历。盛文昭就是这样掉的坑——他周围的人都上了矿监折子,他就被"平均"成了也上过。
第三,错误最多的作者——不是那些新手。是那些最有经验的、下笔最快的、文采最飞扬的老史官。不是新人不出错——是新人出错了你能一眼看出来。老手出的错,裹在漂亮的句子和圆融的逻辑里——不核死它,它就像真的。
四、放过去不是因为它对,是因为没人核
何太史被核了三个月。核了改,改了核——核到核史官手头的"待核清单"上他的条目从四十条降到三条降到一条,最后归零。
三个月后的何太史,写东西变慢了。可他写出来的东西——每一句话,都多了两行小字:"出处:文宗实录卷六十二"、"出处:盛氏家谱·世系考"。
"你以前写东西像飞,"陈总纂翻着他的新稿子,"现在一步一步走。"
"以前是信手拈来。现在是如履薄冰。"
何太史放下笔:"但至少不会再写一篇三千字的假列传了。"
那年国史馆出了一本《核史则例》——把核史官一年的经验写成了十条规矩。第一页第一行是:
凡立一传、记一事、引一言——必有出处。无出处者,宁删勿存。
第二条——
愈熟之事,愈当核。盖熟者易疏,疏则生错。
第七条——
文采佳、下笔疾者,其稿尤当细核。盖疾者多凭记忆,记忆者,不可尽信。
《核史则例》印出来那天,陈总纂坐在院子里翻了一下午。何太史走过来,看到他在翻最后一页。
"老陈,核史官这个职位——以前为什么从来没人想过?"
陈总纂把书合上。
"因为以前大家都是这么写的——凭记忆、凭印象、凭'我记得好像是这样'。放过去了,从来不是因为对了——是因为没人去核。有人去核了,才知道过去放过去的东西,有多少是经不起推敲的。"
何太史望着院子里的银杏树,一片叶子正往下掉。
"所以核史官不是在查错——是在给每一个'放过去了'的东西,补上那道本应有人过的关。"
"对。而且这道关永远过不完。"
何太史回过头:"那怎么办?"
陈总纂也站起来,看着同一片叶子落地。
"天底下没有不出错的笔。但有一件事可以做得比笔好——知道自己什么时候可能出错,并且在那个时刻,把手里的稿子,再核一遍。"
技术解读
幻觉(Hallucination)是大语言模型从诞生之日起就与之共存——且至今无法根除的核心问题。早在 GPT-3(Brown et al., 2020)时代,研究者就注意到:模型在知识空白处不是"说不知道",而是倾向于"生成听起来合理但不真实的内容"。2023 年,Ji 等人在《Survey of Hallucination in Natural Language Generation》中系统回顾了幻觉的分类、成因与缓解策略。
幻觉的根源深植于自回归语言模型的训练范式本身——模型的唯一目标是最大化训练数据的似然估计 P(text | corpus)。它没有"这句话是否真实"的显式信号,它学会的只是"在给定的上文之后,哪些词最常出现"。在一个概率的世界里,"听起来像真的"和"真的是真的"在 loss 函数上没有区别——两者都是高概率的 token 序列。这是幻觉的数学根源。
核心概念回顾
| 概念 | 通俗解释 |
|---|---|
| 幻觉(Hallucination) | 模型生成了语法正确、逻辑通顺、但与事实不符的内容——且通常以高度自信的语气表述 |
| 内在幻觉(Intrinsic Hallucination) | 生成的内容与给定上下文(如 prompt 中的信息)直接矛盾——模型无视了眼前的信息 |
| 外在幻觉(Extrinsic Hallucination) | 生成的内容无法从给定上下文中验证,且与外部事实不符——模型在"编造"知识 |
| 高熵状态(High-Entropy States) | 当模型对下一个 token 不确定(多个备选概率接近)时,更容易产生幻觉——因为这恰好是"不确定性最高"的时刻 |
| 统计规律 vs 事实知识 | 语言模型学的是"词与词的共现概率",不是"事实的真假"。这两者高度相关,但并不等价 |
| 长尾信息幻觉 | 对于训练数据中出现频率极低的知识(如偏门人物、模糊日期),模型更容易出错——因为统计信号太弱 |
| 自信与准确度的脱节 | 模型对其输出的置信度(token 概率)往往与其事实准确性几乎无关——即"错得越离谱,说得越笃定"是完全可能的 |
| 知识冲突 | 模型的参数记忆与外部检索到的信息或 prompt 中的事实约束发生冲突时,模型优先信任参数记忆 |
| 主动拒答(Refusal / Abstention) | 教模型在不确定时说"我不知道"——这是缓解幻觉的一线方法,但过度拒答会影响有用性 |
| 事实一致性检查(Factual Consistency Check) | 用检索或另一个模型交叉验证模型生成的"事实陈述"是否能在外部来源中得到确认 |
故事中的隐喻对照
| 故事元素 | 映射的技术概念 | 解释 |
|---|---|---|
| 何太史(才情最高、文采飞扬) | 高能力但不可靠的 LLM | 模型越强,其幻觉越难被发现——因为包装在流畅的文笔和合理的逻辑中 |
| 盛文昭的三千字假列传 | 外在幻觉 | 生成了一个完全不存在的、但读起来合理且文笔优美的事件描述 |
| "资料不多"(触发幻觉的条件) | 长尾信息的统计信号弱 | 冷门人物/事件在训练数据中出现极少——模型没有足够信息但仍要完成生成,只好"脑补" |
| 把同期礼部官员的集体经历贴到个体身上 | 统计泛化的误用 | 语言模型学到的是"这类文章中常见的模式"——它把群体统计规律当成个体事实来输出 |
| 核史官(十个人核对每一条事实陈述) | 事实一致性检查 / 自动核查管道 | 系统地检验输出中每条可核查事实是否与外部来源一致 |
| "四百多处错"——整个史馆都有 | 幻觉的普遍性 | 所有 LLM 都会产生幻觉——这不是某个特定模型的缺陷,是自回归语言建模范式的固有局限 |
| "脑子里蹦出来的数"vs"后来查过的数" | 参数记忆 vs 检索验证 | 快回答靠记忆(容易出现幻觉),经过检索验证后更正——但"懒"的时候就直接凭记忆说了 |
| "太熟了就不用查"的地方错最多 | 高频信息的幻觉 | 高频知识不一定不出错——"太熟了"意味着模型在快速生成模式下,缺少验证步骤就输出了"直觉答案" |
| "错在自信——下笔的时候没觉得有任何不对劲" | 置信度与实际准确度的脱节 | 模型对其输出的 token 层级概率可能与事实准确性高度无关——流畅的文本可以全都是编的 |
| 《核史则例》十条规矩 | 幻觉缓解策略体系(如 retrieval-augmented verification、输出结构约束、不确定性标注) | 把幻觉缓解工程化——从特例变成系统性的规范与流程 |
| "无出处者,宁删勿存" | 拒答(Abstention)与引用溯源 | 没有可信来源的陈述就不应输出——宁可少说,也不说错的 |
| 何太史三个月后——每句话加了两行出处小字 | 带引用的生成 / RAG 验证 | 经过了系统性核查流程的模型,输出从"自信发言"变成了"有据可查的回答" |
| "以前放过去不是因为对了——是没人核" | 基准测试幻觉的低估 | 传统 NLP 基准测的是流畅度和表面相关性,测不出"这句话是不是事实"——幻觉在历史中一直被低估 |
为什么这个故事对应 LLM 幻觉?
自回归 LM 的数学本质决定了"流畅≠真实"。 交叉熵损失函数衡量 P(下一个词 | 上文) 和真实分布的差距——它不衡量"这句话和世界事实是否一致"。在训练中,一个精心虚构的句子("隆庆三年盛文昭上矿监疏")和一句真话("盛文昭历任礼部郎中、侍郎")在 loss 上可能几乎没有差别——因为在文本表面,它们都是"合理的中文句子"。这就是幻觉的数学根源。
长尾知识是高幻觉区域。 盛文昭的资料在训练数据中极少出现——模型处于"需要完成生成但又没有足够信息"的状态。"资料不多"对应训练数据中相关 token 窗口的稀疏性——统计信号极弱,任何模式的波动都可能导致错的输出。
群体验特征与个体事实的混淆。 "万历初年礼部官员上矿监折子"是训练数据中的一个高概率模式。模型在生成盛文昭的传记时,会基于"礼部侍郎 → 大概率上过矿监折子"的统计关联自动完成——而不是基于 "盛文昭本人确实没有上过"。这是幻觉的另一种常见成因:用群体的常态推断个体的史实。
"自信是最大的敌人"——置信度校准的失败。 何太史写假列传时"没觉得有任何不对劲"——这正是 LLM 幻觉的最可怕之处:模型对错误输出的"自信"程度和它对正确输出的自信程度几乎没有可区分的差异。标准的 token 概率无法充当"这句话是不是事实"的可靠信号。
系统性的核验是缓解幻觉的工程方向。 核史官对应了事实一致性检查管道:Retrieval-Augmented Verification(用检索验证生成的事实)、LLM-as-a-Judge(用一个独立的模型检查另一个模型的输出)、不确定性标注(标记不可验证的部分让用户判断)。"核史官不是在查错——是在补那道本应有人过的关"。
"这道关永远过不完"——幻觉无法根除。 这是 LLM 研究和应用中最清醒的共识。任何基于概率的语言模型都无法 100% 排除幻觉——因为"真实"不是语言模型的损失函数。我们能做的是:降低幻觉频率、标注不确定性、提供引用溯源、在关键场景中引入人工审核。
后记:幻觉是 LLM 最脆弱也最诚实的一面镜子——它照出了"预测下一个词"与"说出事实真相"之间的那条鸿沟。何太史用他的三千字假列传换来了一个教训:自信不是凭证,流畅不是真相。国史馆的核史官们从此以后每天都在翻档案——不是因为他们不相信史官的才情,而是因为他们终于理解了:才情编得出最美好的故事,核验撑得起最卑微的事实。而历史,归根到底,是一堆经得起核验的事实垒起来的。 银杏叶落了又长,核史官的灯亮了一夜又一夜。天底下不出错的笔还没有出现,但现在至少有人在看着——每一句说出去的话,是不是真有那一页泛黄的档案在底下垫着。

