入库编译语义声明,2.2k token 正确率 85.2% 打赢分块

RAG Deserves an Index: Why Ingest-Time Compilation Beats Query-Time Interpretation

Kyle Wild, Yusuke Takahashi, Asako Uraki

cs.AI, cs.DB, cs.IR

2026-08-21

ISC 在入库时把语料编译成带精确出处的原子声明。留出的 500 篇访谈上,2.2k token 正确率 85.2%,最好的分块配置要用 16.3k token 才到 72.5%。

这篇在解决什么

生产里的 RAG 每次提问都让模型重新读生语料:指代、归属、结构,全部当场解一遍再扔掉。单 token 价格跌了几个数量级,总推理账单却在涨,因为塞进上下文的字比降价更快。Endgame Labs 与武藏野大学把这叫做查询时语义重建(QSR),类比数据库里的全表扫描。他们的对策沿用五十年前数据库的那一招:把贵的活放到写入时做一次,读的时候查维护好的结构。

这套结构叫 ingest-time semantic compilation (ISC,入库时语义编译):语料的含义被编译成可查询基底,当作一等数据库对象来养。

方法

基底分两层。几何层是增量维护的 embedding,回答「附近有没有类似的意思」。符号层是原子声明,每条绑死逐字出处、说话人和位置,编译时用精确引文校验,过不了门的候选直接丢掉,不修补。读者拿到的是声明加证据跨度,不再是一段还要自己解的生文本。

四个合同一起管这个对象:编译合同(语义 DDL,过不了精确引文就进不了表)、维护合同(费用跟变更量走、不跟语料规模走)、迁移合同(换 embedding 模型当对齐问题而不是全量重建)、成本模型(用盈亏平衡阅读次数 R 决定编不编)。参考实现是普通 PostgreSQL:facts 表加 factevidence 表,UNIQUE(documentid, contenthash) 让重编译幂等。

结果

维护实验是合成的:embedding 语料从 3,000 长到 9,000,50 次更新。增量低秩更新每次 8.4 ms,全量再分解 283 ms,单次便宜 33.7 倍,累计便宜 23.8 倍,主角度漂移低于 10^{-11} 度,recall@10 为 1.0。换模型用正交 Procrustes,只重嵌约 10% 向量,与真重嵌的平均余弦 0.95。作者写明这是理想上界,还没在生产 embedding API 上验证。

读路径实验用 MediaSum 广播访谈,留出 500 篇、499 题,与开发样本无文档重叠。编译声明做检索载荷,在 32 个预算×模型格子里全胜分块基线:2048 token 预算下正确率 85.2%、约 2.2k 读者 token;最好的分块配置是 72.5%、约 16.3k token。256 token 的声明(69.5%)已经超过所有 2048 token 的分块。最强分块栈(LLM 情境化+混合检索+交叉编码器重排)2048 预算下 88.0%(439/499),与声明的 85.2%(425/499)统计上分不开(McNemar p=0.202),但查询路径大约 47.7k token,是声明的 21 倍。

编译不便宜:Kimi K2.6 按轮抽取,每篇约 48.2k prompt + 4.5k completion,约 0.064 美元,500 篇约 32 美元、26.3M token。相对最强分块栈每问多花的约 45.5k token,整库编译约等于 580 次查询。20 篇回放里校验门拒掉 1.1%(29/2724)条候选,其中 28 条是引文在原文里找不到。

为什么重要

关键差别不在「检索落点」,在「读者吃什么」。Doc2Query、命题索引、情境化分块大多编译的是指针,读者仍读生文本。ISC 编译载荷,并且用精确引文当完整性约束。对会议记录、访谈、反复被问的内部语料,这更接近物化视图,而不是又一个 chunk 策略。小、极不稳定、几乎没人问的库,R 可能永远到不了,这时继续查询时解释是对的。作者把「编不编」写成可计算的规划问题,而不是教条。

局限与存疑

维护数字来自合成向量,生产修订流、崩溃恢复和语义 redo log 都还在议程里。读路径的打分器和抽取器是同一个 Kimi K2.6,人工校准和跨模型家族重判还没做完,作者把它标成初步证据。工具型 Agent 介入检索后,编译载荷的优势没有自动保住。R≈580 是 token 等价不是美元等价,编译模型和查询模型账单不同。对话语料上成立,换成长文档或多跳结构查询,数字可能改写。

术语

原文与代码

社区讨论

相关论文

全部论文解读