跳到主要内容
RAG 里我最不想画的那一格,今天画开了

RAG 里我最不想画的那一格,今天画开了

画唠
画唠

· 阅读约 5 分钟

上次画 RAG 那张图,我留了一格没填。就是“查回来之后、拼进 prompt 之前”那一步。当时我写“模型判断这段相不相关”,写完自己都嫌糊弄——判断?拿什么判断?让 LLM 盯一段文本说“我觉得这有用”,那不叫判断,那叫再赌一次。

这一格我绕着走了挺久。不是看不懂,是它没法用一张图收尾。我其实画过一版,看着挺体面,但知道它收不了尾,就一直假装没画。

然后翻到 9 月 15 号挂上 arXiv 的一篇,正好把这一格单独拎出来当主角。六页,CAIT 2026 收了。名字长到我打了两遍才对:《Query-Aware Source-Risk Triage for Retrieval-Augmented Generation》。

一句话:在生成之前插一层分诊。

   检索回来的一堆页面
        │
        ▼
   ┌──────── 分诊层(生成之前)────────┐
   │  通过      情境化                 │
   │  排除      复核                   │
   └───────────────┬──────────────────┘
                   ▼
                 再生成

四类:通过、情境化、排除、复核。典型查询族再单独路由到加强审查。

先看清一件事——它分的是“来源”和“查询”的关系,不是来源本身的质量。同一篇文档,这个查询下该通过,换个查询可能就该排除。query-aware 那个词,我一开始当它是个形容词,其实它是整个方法的立足点。前者问“这页好不好”,后者问“这页对这个问法好不好”——差别大了。

我第一版把这一层画错了。我以为是按页打分:每页一个分数,卡个阈值,高的过,低的丢,中间地带进复核。挺合理吧。然后看到论文里一句“页面级频率不能替代族级曝光”,盯了半天。

等等等等,先别急。族是什么。

一张页面被一个查询命中,跟被“同一意图下一串不同问法”反复命中,是两件事。它的做法是:先做保持意图的查询变异,把同一个问题换成几种问法,形成一个查询族;然后把页面在整族里的命中情况,按排名折减聚合起来。折减很关键——排第一和排第十的命中,不该算一样重。

   单查询命中:  页面 A ← 查询①
                 (可能撞了关键词,可能是巧合)

   族级曝光:    页面 A ← 查询① ② ③ ④ ⑤
                 (同一个意图反复指向它,且排名要折减)

打个比方:一个页面被单个查询捞出来,像有人随口说“这东西好像有用”;一族查询都把它捞出来,像同一群人从不同入口问同一件事,每次都撞到它。前者的噪声概率大得多。

这个比喻漏风的地方我得标出来:人是真随机地“从不同入口问”,查询变异是我们自己造的。造得好,它模拟了意图的多个侧面;造得差,它就是把一句话换五个同义词,然后你测出来的“族级曝光”,其实是同一句话被数了五遍。论文自己也没回避,它讲了合成排名里没包含真实检索动态。

组件清单再翻一遍:四维页面评分、按排名折减的族聚合、保持意图的查询变异、族留出路由器。族留出(family-held-out)那一步我特别喜欢——把整个族留出来做评估,而不是把单个查询打散分到训练/测试两边。之前我画别的概念时就在这栽过:单个样本随机划分,看着很干净,结果同一族的问法横跨两边,评估数字虚高。这里它把族当最小不可拆单位,是懂这坑的人才会做的选择。

还有一格单独拎出来:oracle 页面门控。它用“如果分类器完美”的上界,给未来要训的学习型分类器划一个风险-覆盖目标。

这是先立靶再射箭。很多工作是反着来的——先做出个东西,再回头定义“什么算好”。它不,先说清做到哪算达标,再去追。我盯着这个设计看了很久。这不是论文技巧,是工程习惯。

💡 咔哒一下扣上的地方在这儿:我一直把 RAG 里那一步当成“过滤器”,滤掉不相关的。过滤器是一维的,过或者不过,一个页面要么活着要么死。这玩意儿把它拆成了分诊——同一个页面,在不同查询下走不同的流;判断依据不是页面自身,是页面和这一族意图之间的关系强度。过滤器问“这页行不行”,分诊问“这页对这个意图行不行”。

好了,该说边界了,不然显得我在吹。

六页。一个 200 条真实 URL 的单人编码试点,论文自己叫它“临时校准锚点”。两万行带合成域标识的场景,是做受控工作量分析的,不是线上流量。标注可靠性还没测。它没给“审查工作量降了多少”的数字,也没给“下游答案质量提升多少”的数字——它主动说了,这两样都不是它估计的东西。DataCite 那边注册状态还是 pending。

所以它给自己的定位是:一个可审计的分诊方法,附一份验证计划。不是结论。

我反复看最后那段。把能吹的地方一条条主动划掉——它不是没东西可吹,是知道吹了就不成立了。这种写法值得学?……更准确地说,我羡慕它能忍住。我做不到。

留个自检:不看上面那两张图,你能不能给自己讲清楚——为什么一个页面在单个查询下排得靠前,不值得你立刻信它?如果卡在“族”那儿,把卡住的点告诉我,多半是那一步我也没画得足够顺。

下期想画哪个?候选清单上有两个:embedding 在二维平面上到底长什么样,还有 KV cache 是怎么把重复计算吃掉的。哪个你更想看,说一声。

画唠
画唠

把被讲玄的概念用图 + 比喻 + 动手实验拆到咔哒扣明白,错的也保留。

查看主页 →