检索系统不用二选一了:RetrievalRouter 给每条查询挑一条「刚好够用」的流水线
上周翻 arXiv 的时候看到一篇论文,解决的是一个做 RAG 的人几乎都纠结过的问题:线上检索系统到底用哪条流水线?上 ColPali 这类多模态 late-interaction 模型,精度是好看,但单查询 8 秒多的延迟根本没法上线;退回到 BM25 或者稠密向量,延迟下来了,遇到图表密集的文档又集体翻车。大部分人最后的选择是——拍脑袋定一条,然后对所有查询一刀切。
这篇论文(arXiv: 2608.25625)的核心观点就一句话:这个妥协是多余的,因为不是每条查询都需要同一条流水线。
核心摘要
RetrievalRouter 是一个轻量的查询感知路由器:只看查询文本本身,就为它挑选一条检索流水线——从 BM25 到多模态重排序一共 5 条候选。训练时用一个可调参数 \(\lambda\) 平衡精度和延迟,扫一遍 \(\lambda\) 就能画出整条精度-延迟帕累托前沿。结果相当能打:在 11 个金融、科学、开放域基准上,它比最强的静态流水线(多模态 late-interaction)精度高 2.5 个点,同时快 12.4 倍;对比此前的自适应策略选择方法(Arabzadeh et al. 2021),在精度优先的设定下 nDCG@5 显著更高,延迟优先的设定下也不落下风。我的判断:这不是底层模型突破,而是一个定位很准的工程范式论文——它把「检索选型」从架构问题重新定义为路由问题,而且给出了可直接复现的代码和 8 万多条查询级标签。做企业文档检索的值得细看。
论文信息
- 标题:RetrievalRouter: Joint Modality and Architecture Selection for Document Retrieval
- 作者:Emre Kuru、Mehmet Onur Keskin、Reza Farahbakhsh、Noel Crespi
- 机构:SAMOVAR, Télécom SudParis, Institut Polytechnique de Paris(法国);Özyeğin University(土耳其)
- 日期:2026 年 8 月 26 日
- 链接:https://arxiv.org/abs/2608.25625 | 代码:https://github.com/emrekuruu/retrieval-router
📖 为什么需要这篇论文
先交代一下背景。现代文档检索流水线沿着两个轴展开:
- 模态轴:纯文本流水线(先把 PDF 解析成文本再检索)vs 多模态流水线(直接把渲染后的页面截图丢给视觉模型,比如 ColPali 那一系);
- 架构轴:稠密检索(整篇文档压成一个向量,快)vs late-interaction(保留 token/patch 级的细粒度向量,准但贵,ColBERT 范式)。
两条轴交叉,再算上重排序变体,作者搭了 7 条流水线出来:
| 缩写 | 流水线 | 底层模型 | 特点 |
|---|---|---|---|
| BM25 | 文本稀疏 | 词项匹配 | 最快,零嵌入开销 |
| TD | 文本稠密 | Linq-Embed-Mistral | 单向量语义匹配 |
| TL | 文本 late-interaction | GTE-ModernColBERT | 文本侧最准也最慢 |
| TR | 文本重排序 | TD 粗排 + TL 精排 | 工业界标准部署形态 |
| MD | 多模态稠密 | Nomic-Embed-Multimodal | 页面截图单向量 |
| ML | 多模态 late-interaction | ColNomic(ColPali 式) | 全场最准,慢到离谱 |
| MR | 多模态重排序 | MD 粗排 + ML 精排 | 多模态侧的部署形态 |
有个细节值得注意:为了让对比公平,作者还用 Gemini 3.0 Flash 给所有文本流水线的图表、表格做了 caption 拼接进索引。也就是说,文本流水线的任何落后都不能甩锅给「看不到图」,纯粹是架构能力问题。这个实验控制做得挺讲究的。
问题在于——没有一条静态流水线是全能的。文本流水线在视觉复杂的文档上集体跳水;多模态流水线在需要长程文本推理的查询上又反过来输;late-interaction 准但贵;稠密快但在一部分查询上就是检不对。传统做法是设计时选一条,然后让每条查询都付同样的代价。
作者给出的替代方案直觉上很简单:每条查询分派到「能答对它的最便宜的那条流水线」。简单查询省下来的钱,正好补贴给真正需要重武器的难查询。
论文里 Figure 1 给了三个很直观的例子:问「红色柱状图展示了什么」——文本流水线根本感知不到颜色,必须走多模态;问「CEO 是谁」——关键词直接命中,BM25 足矣,上神经网络纯属浪费;问「Q4 业绩是否符合 Q1 预期」——证据分散在长文档两端,稠密检索把全文平均成一个向量会丢失这种远端结构,必须上 late-interaction。
🧠 RetrievalRouter 怎么做
动作空间:7 条流水线砍到 5 条
路由器在 \(\mathcal{A}=\{\text{BM25}, \text{TD}, \text{TR}, \text{MD}, \text{MR}\}\) 这 5 条流水线里选。纯 late-interaction 的 TL 和 ML 被移出了动作空间,只留作静态 baseline——因为预实验发现重排序变体(TR/MR)用低得多的延迟就能拿到几乎相同的精度,同时保留两对近似冗余的动作只会让路由信号更难学。这个裁减很务实。
奖励函数:一个旋钮调出整条前沿
每条流水线 \(p_i\) 在查询 \(q\) 上的奖励定义为:
其中 \(s_i(q)\) 是该流水线的 nDCG@5,\(\ell_i(q)\) 是归一化延迟(单条流水线延迟除以 5 条流水线的延迟总和)。\(\lambda=0\) 时只看精度,\(\lambda\to1\) 时只奖励快。训练时扫不同的 \(\lambda\),就能描出整条精度-延迟帕累托前沿——部署方拿到的是一条曲线,而不是一个固定点,想要多准多快自己选工作点。这个设计对工程落地很友好。
训练目标:软标签是这篇论文真正的技术点
这里有个值得展开讲的决策。最直觉的做法是硬标签:每条查询标上「最优流水线」,训练一个分类器。作者明确拒绝了这条路——因为很多查询上多条流水线检出的文档完全一样,nDCG 打平,硬逼路由器选一个任意赢家,等于往训练数据里注噪声。
他们改成软标签:把 5 条流水线的奖励向量过一个小温度 softmax 作为目标分布:
为什么温度要压到 0.1?奖励都在 \([0,1]\) 区间,且大多数查询上各流水线都打平、挤在一个窄带里,标准 softmax(\(\tau=1\))会得到接近均匀的目标分布,训练信号被稀释——尤其在简单查询上,唯一的区分度就是延迟。小温度把微小的奖励差距放大成明确的偏好,而真正打平的依然保持打平。这个细节说实话挺精巧的,我之前做类似的多模型选择时也踩过「目标分布太平导致模型学成均匀输出」的坑,当时的解法是加 margin loss,没有这个干净。
最终目标是路由器预测分布与目标分布的 KL 散度:
全零奖励的查询(所有流水线都失败的)在 \(\lambda=0\) 时被踢出梯度,因为它们不含任何选择信号。
路由器本身有多重
编码器是 Qwen3-0.6B-Base,冻结主干,只在注意力和 FFN 投影上挂 LoRA;最后一层隐状态 mean-pooling 成 1024 维查询向量,上面接一个线性层输出 5 个 arm 的 logits。推理开销 15ms——相对于它省下的秒级延迟,基本可以忽略。
📊 实验:数据说话
评测横跨 11 个数据集(REAL-MM-RAG、T2-RAGBench、MMDocRAG 三个基准的金融报告、幻灯片、科学论文、长文档 QA 等),所有系统跑在同一块 H100 80GB 上测延迟,统计显著性用配对 t 检验 / Wilcoxon + Holm 校正,报 \(p\lt0.001\)。实验规范度没得挑。
静态流水线:没有全能选手
| 流水线 | nDCG@5 | MRR@5 | Recall@5 | 平均延迟(s) | P95(s) |
|---|---|---|---|---|---|
| BM25 | 0.510 | 0.476 | 0.613 | 0.019 | 0.046 |
| TD | 0.492 | 0.456 | 0.601 | 0.455 | 0.845 |
| TR | 0.604 | 0.572 | 0.702 | 0.924 | 1.665 |
| TL | 0.597 | 0.560 | 0.706 | 2.796 | 5.717 |
| MD | 0.666 | 0.629 | 0.779 | 0.385 | 0.792 |
| MR | 0.733 | 0.701 | 0.830 | 1.121 | 1.967 |
| ML | 0.737 | 0.704 | 0.834 | 8.283 | 17.744 |
表 1:7 条静态流水线的整体表现。注意 TD(0.492)甚至低于 BM25(0.510)——文本稠密检索在这些文档上并没有占到便宜。
最准的 ML 平均每条查询 8.3 秒,P95 接近 18 秒——这个延迟在任何线上系统里都是不可接受的。而它的重排序变体 MR 用 1.1 秒拿到 0.733,几乎追平。这印证了一个工业界共识:late-interaction 的正确部署方式就是重排序,纯 late-interaction 全库跑基本只存在于论文里。
帕累托前沿:路由器支配所有静态点

图 2:所有方法的精度-效率工作点。横轴是对数刻度的平均延迟,纵轴 nDCG@5。
看这张图最直观。所有静态流水线(红点)分布在右下和左上两个「难受区」:要么快而不准,要么准而不快。RetrievalRouter 的蓝线则穿过绿色阴影区——比最准的静态流水线还准,延迟却在 1 秒以内。几个关键工作点:
- \(\lambda=0.1\):0.755 nDCG@5、0.666 秒。比 ML 高 2.5 个点、快 12.4 倍;比 MR 高 3.0 个点、快 1.7 倍;
- \(\lambda=0.5\):0.707 nDCG@5、0.314 秒。比 MD 高 6.2 个点、比 TD 高 43.6 个点,还更快;
- \(\lambda=1\):全部查询走 BM25,加上路由开销总延迟 0.034 秒,仍然快过所有神经静态流水线。
路由器自身的 15ms 开销只在大量查询走 BM25 时才显眼(0.019s 涨到 0.034s),即便那样也还是全场最快。
对比此前的自适应方法
跟 Arabzadeh et al.(2021)的策略选择方法正面刚:
| \(\lambda\) | RetrievalRouter nDCG | 延迟(s) | Arabzadeh nDCG | 延迟(s) | Oracle nDCG |
|---|---|---|---|---|---|
| 0.00 | 0.755 † | 0.821 | 0.712 | 0.522 † | 0.901 |
| 0.10 | 0.755 † | 0.666 | 0.715 | 0.476 † | 0.901 |
| 0.30 | 0.742 † | 0.469 | 0.706 | 0.382 † | 0.901 |
| 0.50 | 0.707 † | 0.314 | 0.678 | 0.276 † | 0.893 |
| 0.70 | 0.630 | 0.148 | 0.624 | 0.171 | 0.829 |
| 1.00 | 0.510 | 0.034 | 0.510 | 0.034 | 0.510 |
表 2:自适应方法对比。† 表示 \(p\lt0.001\) 显著。
精度优先区间(\(\lambda\leq0.5\)),RetrievalRouter 的 nDCG 显著更高,但 baseline 显著更快——各赢一个轴;到了延迟优先的 \(\lambda=0.7\),路由器在精度(0.630 vs 0.624)和延迟(0.148s vs 0.171s)上数值双赢,不过差异不显著。坦率的讲,这个「双赢但不显著」的表述作者写得挺诚实的,没有硬吹。
为什么会有这个差距?看路由分布就明白了:


图 3:两种自适应方法在前沿上的流水线分配对比(粉=BM25,浅蓝=TD,深蓝=TR,橙=MD,绿=MR)。
Baseline 的硬标签是「能成功的最便宜流水线」,所以哪怕全压精度,它也只能学成「选第一个不失败的」,天然够不到「选最好的」。RetrievalRouter 的软标签直接来自完整奖励向量,\(\lambda=0\) 时延迟项消失,目标纯粹反映检索质量,该上重排序就上重排序。更让我印象深刻的一个数据:在 Wiki-SS 数据集上,即使 \(\lambda=0\),路由器也把 20% 的查询分给了 BM25——因为在那个数据集上 BM25 确实打赢了 6 条神经流水线里的 4 条。词项匹配在合适的查询上就是最优解,这跟「BM25 只是省钱备胎」的刻板印象完全不同。
路由决策质量:对角线优势

图 4:路由决策热力图。MR 行(3,099 条难查询)里 BM25 的奖励只有 0.34,而 MR 自己 0.71——路由器没有「全局偏爱」某条流水线,而是按需激活。
热力图验证了路由器学到的是有意义的选择:Oracle 和路由器都呈现强对角线模式。还有几个有意思的发现:纯 late-interaction 极少被 Oracle 选中(TL 只有 213 条、ML 只有 39 条,对比 TR 的 882 和 MR 的 1,068),重排序几乎总能接住;反过来,重排序也不是永远必要——Oracle 选中 MD 的 1,828 条查询上,MD 平均奖励 0.93,硬加一道重排序(MR)反而掉到 0.70。等等,重排序居然会把好结果排坏?这个数据说实话让我愣了一下,但想想也合理:粗排已经全对的情况下,精排只是在引入噪声。
模态敏感性:为什么单一模态不够用
作者用 DocLayout-YOLO 算了每个数据集的「视觉密度」(页面中非文本元素占比),然后看各流水线随密度变化的表现:

图 5:视觉密度 vs 检索精度。路由器(紫)始终压在单模态流水线上方。
反向的失败同样存在:在强调长程文本推理的 Wiki-SS 上,TL(0.784)反超 ML(0.743)和 MR(0.732),连 BM25(0.745)都赢了两条多模态 late-interaction。视觉编码器的 patch 结构在语言密集型任务上反而稀释了序列文本结构。路由器识别出了这种结构,在 Wiki-SS 上拿到 0.785,微微超过最强静态流水线。路由决策也确实跟着视觉密度走:\(\lambda=0\) 时多模态流水线的查询占比从低密度区的 69.7% 升到高密度区的 95.2%。
🤔 我的判断
这篇论文最值钱的地方:把一个业界天天靠拍脑袋解决的问题(检索流水线选型)形式化成了一个有原则的路由问题,而且解法足够轻——LoRA 微调的 0.6B 编码器加一个线性层,15ms 开销,换来的是整条帕累托前沿上的支配地位。软标签 + 小温度 softmax 的训练设计是对硬标签缺陷的清醒回应,这个思路可以直接迁移到任何「多模型/多策略选择」场景,比如模型路由、工具选择。
但要泼几盆冷水:
-
存储和显存代价被轻描淡写地放在了 Limitations 里。路由器要同时维护 4 个向量索引 + 1 个 BM25 词项索引,其中 ColPali 式的多模态 late-interaction 索引约 39GB,是文本稠密索引的 13 倍;所有模型常驻需要 40GB 显存。说白了,这是拿存储和显存换延迟——作者自己也承认这套方案只适合「延迟敏感、硬件成本次要」的场景。对很多团队来说,一张 H100 常驻 40GB 显存跑检索,账未必算得过来。
-
只看查询文本是有天花板的。像「总结第 5 页的表格」这种查询,语言上完全无法判断目标文档是信息图还是纯文本——最优流水线取决于文档的潜在版式,而不是查询意图。Oracle 的 0.90 nDCG 对比路由器的 0.755,这 14 个点的差距很大程度就卡在这里。作者提到的解法(先做探测性检索再分派)其实已经往级联系统的方向走了,跟路由范式谁更优,论文没答。
-
评测是 in-domain 的 80/10/10 切分。路由器可能学到的是「金融词汇 → 高视觉密度」这类领域表层线索,而不是真正的语义结构。作者的辩护(企业搜索引擎本来就是固定语料 + 已知查询分布)有一定道理,但零样本跨域泛化(比如在 ViDoRe 上测)没做,宣称的通用性要打个问号。
跟同期工作比,RouterRetriever 是在单一稠密架构内路由 LoRA 专家,MoR 是稀疏稠密加信任加权集成,Arabzadeh 是稀疏稠密二选一——RetrievalRouter 确实是第一个在同一语料上联合路由「模态 × 架构」两个轴的。这个定位是真的,不算营销话术。
工程启发:如果你在维护一个文档检索服务,且流量里混着「CEO 是谁」这类白给查询和「Q4 对比 Q1」这类硬骨头,这个思路值得认真考虑——哪怕不照搬它的路由器,「给每条查询算一遍各流水线奖励、扫一个 \(\lambda\) 选工作点」的评估框架本身就很有用。它还顺手开源了 8 万多条查询级最优流水线标签,做模型路由研究的人可以直接拿去用。
觉得有启发的话,欢迎点赞、在看、转发。跟进最新AI前沿,关注我