Multi-Query 与 RAG-Fusion
查询改写为问题选择一种检索表达,但很难事先知道哪种措辞最容易找到目标文档。Multi-Query 会生成多条表达不同、信息需求相同的查询,分别执行检索,再合并各路结果。
RAG-Fusion 在这个流程中进一步使用 RRF(Reciprocal Rank Fusion)合并排名。两者的关系是:Multi-Query 扩大检索入口,RAG-Fusion 给这些入口找回的候选安排一个共同顺序。
同一个问题,生成几种查法
以“2026 年境内出差回来,报销最晚什么时候交”为例,可以保留原问题,再生成两条查询:
q0:2026 年境内出差回来,报销最晚什么时候交?
q1:2026 年境内差旅结束后的报销提交期限
q2:2026 年境内差旅费用申报时限三条查询都在找提交期限,分别使用用户措辞、制度表达和财务申报术语。知识库里如果写的是“费用申报时限”,q2 可能比 q0 更容易命中;如果编码模型已经能连接这些表达,三路也可能返回相同结果。
查询数量增加并不保证覆盖面增加。将 q2 改成“差旅报销审批后多久付款”,会变成另一个信息需求;只是把 q1 的语序调几遍,又可能没有新增作用。生成查询时需要保留年份、境内范围和提交这个动作,同时寻找文档中可能出现的不同表达。
这里的各条查询可以使用同一个检索器。如果使用 BM25 和向量检索分别查找,那是混合检索;混合检索也可以与 Multi-Query 组合,但增加查询和增加检索器是两个不同操作。
分别检索后,候选怎样合并
假设三路查询得到以下排名:
| 查询 | 排名 1 | 排名 2 | 排名 3 |
|---|---|---|---|
| q0,用户表达 | A:报销入口 | B:提交期限 | C:发票材料 |
| q1,制度表达 | B:提交期限 | A:报销入口 | D:补交说明 |
| q2,财务术语 | B:提交期限 | D:补交说明 | C:发票材料 |
最简单的合并方式是按 chunk ID 去重,得到 A、B、C、D 四个候选。这已经能把单条查询未找到的材料带回来,例如 D 只出现在 q1、q2 中。但如果只能向回答模型提供少量片段,还需要决定优先保留哪几个。
直接比较各路的原始相似度分数不一定合适。不同查询的分数分布可能不同,0.8 不一定在每路查询中都代表同样的相关程度。RRF 只使用名次,对同一候选在各列表中的贡献求和:
RRF(d) = Σ 1 / (k + rank_i(d))rank_i(d) 是候选 d 在第 i 路的名次,从 1 开始;未出现的列表贡献为 0。k 是平滑常数,常见取值为 60。它与检索返回的 top-k 数量无关。
沿用上表并取 k = 60:
A:1/61 + 1/62 ≈ 0.0325
B:1/62 + 1/61 + 1/61 ≈ 0.0489
C:1/63 + 1/63 ≈ 0.0317
D:1/63 + 1/62 ≈ 0.0320
融合排名:B、A、D、CB 在三路中都靠前,因此融合后排到第一。RRF 不需要再次读取正文,也不判断事实真假;它利用的是多组排名中共同出现的相关性信号。
RAG-Fusion 的完整流程
查询生成、并行检索、排名融合、回答生成,共同构成通常所说的 RAG-Fusion。传入回答模型的是原问题和选出的文档片段,多条生成查询主要服务于检索阶段。
也可以在融合后增加 Reranker。RRF 依据现有名次合并,Cross-Encoder 则联合读取问题与候选正文,重新判断内容是否相关。例如“提交期限”和“付款期限”用词接近,内容重排可以进一步区分两者。重排是可选的后续步骤。
查询重复和偏题会怎样影响结果
RRF 将每个列表都当作一份排名信号。如果生成五条几乎相同的查询,五路可能一直返回同一批材料,让重复的表达获得过多权重。生成查询时应减少重复;单路结果中的重复 chunk ID 也应先去重,避免同一候选在一份列表内重复计分。
偏题的查询同样会贡献排名。假如多条分支把“提交”换成“付款”,付款条款可能被融合到前面。因此,查询生成后要检查它们是否仍在回答原问题。明确的年份、地区等过滤条件应在所有分支保持一致,访问权限也由检索服务统一执行。
对于制度编号、错误码或完整标题查询,生成多个说法通常帮助不大,还可能破坏精确词项。Multi-Query 更适合存在术语差异、同义表达,或者单次召回覆盖不足的请求。
多路检索的代价
三条查询各取 20 个候选,最多产生 60 条命中记录,去重后数量取决于三路有多少重叠。并行执行可以减少等待时间,但检索请求数和后续重排量仍然增加。
选择查询数量时,可以观察新增分支是否找回了原查询漏掉的相关片段。比较时也要给原查询一个相近的检索预算,否则“原查询 top-10”与“三条查询各 top-30”的差异可能主要来自候选数量。
若用户本来就问“提交期限与付款期限分别是多少”,应先用问题分解拆出两个事实需求,再考虑每个子问题是否需要多查询。Multi-Query 的多种表达仍然围绕同一个信息需求。
延伸阅读
- RAG-Fusion: a New Take on Retrieval-Augmented Generation:讨论多查询与 RRF 的组合,以及生成查询不相关时的偏题现象。
- Reciprocal Rank Fusion:排名融合的原始工作。RRF 本身早于 RAG,也可用于不同检索器结果的融合。