第二次通读

——有效的检索,预设一个已经读过的读者

《读不完的文本》收在瓶颈的迁移上:机器是第一个读完了仓库的读者,此后要紧的不再是读得完读不完,而是报告可不可信。但那篇跳过了一个中间问题——“机器读全量”到底是怎么个读法? 行业有一个现成的默认答案,叫 RAG:检索增强生成。语料装不进上下文,就先用相似度从库里抓几段回来,让模型对着这几段作答。今天几乎所有“AI 法律检索”产品都是这个架构。

本文想说的是:这个默认答案是错的。不是工程细节错,是架构错——而看清它错在哪,恰好需要上一篇铺的那两千年历史。

旧架构的机器复刻

把 RAG 的逻辑翻译成《读不完的文本》的语言:语料装不进(这次是装不进上下文窗口),于是靠索引削出一个小工作集,对着工作集干活。似曾相识——这就是“人读工作集”的老架构,只是把人换成了模型。 而且比起古法,它还退了几步:布莱克斯通的摘要有损,但他签了名;West 的编目有偏,但类目是法律人按法律语义建的;RAG 的索引是 embedding 相似度——一个没有法律语义、无人负责、连“为什么召回这几段”都解释不清的排序函数。两千年里最粗糙的一代索引员,接管了最重要的一道工序。

至于另一个方向——把全库塞进越来越长的上下文——不必讨论。语料的增长永远快过窗口,“装得下”从来不是真问题;真问题下面会看到:装下之后,权威性怎么排、完备性怎么证明,一个都没解决。

四个致命伤

RAG 在通用问答里够用,进法律场景就接连触礁,而且四处伤口指向同一个病根。

其一,相似不等于相关。 法律相关性是结构性的:同一争点、同一要件配置、同一程序姿态。两个都讲“逾期交货”的案子可能毫不相干,一个讲船舶、一个讲软件的案子可能共享决定性的裁判规则。Embedding 度量的是表面语义的邻近,抓回来的是长得像的,不是管得着的

其二,切块摧毁结构。 判决书的意思高度依赖位置:“原告主张”里的一句话和“本院认为”里的同一句话,字面全同,效力天差地别。按字数切块的检索器不认识这个边界,会把当事人的主张当成法院的认定喂给模型——这是 AI 法律检索最经典的翻车姿势,根源不在模型,在切块那一刀。

其三,top-k 没有完备性保证。 这条最要命。法律检索的成本函数是不对称的:多读十个无关案子是浪费,漏掉一个反向权威是灾难。RAG 交付的是 k 个最相似的段落,而“没有漏掉相反的”是它在原理上无法承诺的事——召回率不可测量,遗漏无声无息。斯坦福 2024 年实测过市面头部法律 AI 工具:接了检索增强,杜撰率仍在六分之一到三分之一之间。原因不难猜:抓回来的段落既不完备也不对口,模型只好拿分布里的想象填缝——《在裂缝上架桥》说过,流畅不是证据。

其四,权威维度缺失。 现行有效吗、被推翻了吗、哪个层级说的、什么审级——这些是法律检索的一等公民,在相似度空间里根本不存在。Shepard 引证表一百五十年前就在回答的问题,embedding 答不了。

四处伤口的病根是同一个:RAG 试图用检索替代阅读。 它检索的是生文本——没有人、也没有机器真正读过并消化过的文本——却指望在生成的一瞬间完成理解。理解没有捷径,于是每一个没被理解的维度(结构、完备性、权威性),都变成一处出血点。

先读后查

正确的架构把顺序倒过来:检索的质量取决于检索之前的阅读。

先看人是怎么做的。律师检索效率高,不是因为工具好,而是因为他先有体系——潘德克顿的概念树、请求权基础的检讨次序——检索只是在一张已有的地图上定位。法学教育的前几年不教检索,教通读:先长出树形,才配得上查询。有效的检索预设一个已经读过的读者——这条规律不因为读者换成机器而失效。

机器版的“先读”是这样的:在任何查询发生之前,离线读完全量语料,把每份文本拆成带锚点的结构——争点是什么、援引了哪条规范、认定了哪些要件、结论如何、原文在哪一段。读的成本付一次,此后的“检索”就不再是相似度赌博,而是数据库查询:按法条查、按争点查、按结果统计。三个立竿见影的变化:

还有一条容易被漏掉:检索是过程,不是查找。 一次性检索假设你一开始就知道该问什么,但查询能力本身来自阅读——读了三个案子,才知道真正的争点词是什么,回头重新检索。这是《往返的目光》在检索层的形态:目光在问题与语料之间往返,一轮检索的产出是下一轮更好的查询。检索、阅读、改写、再检索的循环之所以远胜单发 RAG,原因并不神秘:它把解释学循环还给了检索。

两次通读,一次精读

把架构摊开,是两次通读加一次精读,各干各的活。

第一次通读是预训练。 模型把语料吞进参数,像法科生的通读:记不住出处,但留下形状——什么问题挨着什么问题、什么说法可疑、什么结构常见。这一层长出的是直觉,《AI 是一位普通法法官吗》写过它的价值,《平均数不是共识》写过它的边界:有法感,无引证,永远不许直接引用。

第二次通读是离线结构化。 机器再读一遍全量,这次不是压进参数,而是拆成带锚点的结构。第一次通读的产物是权重——那不是一件可查之物,是一个会读的主体,此后的一切阅读与判断都由它执行;第二次通读的产物才是可查询的库。一边长出读者,一边长出读者手边的资料室。本文标题指的就是这一次:它是 RAG 省掉的那道工序,也是“机器读全量”的真正含义——阅读不发生在查询的瞬间,发生在查询之前。

临案的最后一步不再是通读,而是在检索中精读。 有了前两次,检索带回来的不是 k 段来历不明的碎片,而是一个有边界的短名单:同争点几件、反向几件、基率如何,每件挂着锚点。对这份短名单要做的,恰恰是最传统的功课——回到判决原文,在上下文里读:分清主张与认定,看清要件是怎样被坐实或推翻的,把结构化时压掉的细节读回来。切块摧毁的东西,在这里被逐字修复。通读求全,精读求深;律师从来都擅长精读,难的从来是知道该精读哪几份——两次通读的全部意义,就是把这个“哪几份”从几百万份削成一张短名单,而且削的依据不再是有损的摘要与默默的遗忘,是读过全量之后的精确定位。

两次通读加一次精读,产出依次是直觉、结构、答案——顺序不可颠倒,跳过中间一环,直觉就会假扮答案。工具的历史里,检索一直被当作阅读的替代品:发明索引,本来就是为了少读。第二次通读把这个关系倒了过来——机器把阅读做完,检索才第一次配得上“查询”这个词。 少读的时代结束了,不是因为谁终于读得完,而是因为终于有东西替我们读完了;剩下的事,是查它读得对不对。