本文属于 RAG 工程框架中的「2 索引与召回」环节,聚焦「Fusion(融合召回)」方法。可先阅读 RAG-00.方法概述 再进入本篇。
原理
将多个召回器输出进行分数校准与排序融合(如 RRF),得到更稳健候选集。
关键技术/实现路径
- RRF(Reciprocal Rank Fusion)。
- 分数归一化(score calibration)。
- 异常通道回退。
优缺点
- 优点:召回稳定性高。
- 缺点:调参复杂,解释成本增加。
性能与资源
- 在线开销中等,换来明显召回增益。
应用场景
- dense 与 sparse 混合检索平台。
统一合成数据示例
输入数据片段
1 | {"query":"报销时限","dense_top":[["D01",0.82]],"bm25_top":[["D04",8.8],["D01",7.9]]} |
中间结果(融合)
1 | {"method":"RRF","fused":[{"rank":1,"doc_id":"D01"},{"rank":2,"doc_id":"D04"}]} |
最终生成示例(含引用)
1 | {"answer":"报销需在30天内提交,逾期不予报销。","citations":[{"doc_id":"D01","evidence_span":"30天内提交"},{"doc_id":"D04","evidence_span":"逾期不予报销"}]} |
原始发表与工程实现
- 代表性原始发表:RRF (Cormack et al., 2009)。
- 核心解决问题:解决多通道结果融合稳定性。
- 成熟实现工具:PyTerrier, ranx, Elasticsearch RRF。
详细原理拆解
- 跨通道排序融合 + 分数校准,RRF 是最常见稳健融合策略。
- 典型实现可拆为:输入预处理 -> 方法核心计算 -> 候选/证据构建 -> 生成与引用。
- 工程调优重点:质量(准确率/引用率)与成本(时延/token)的联合优化。
1 | flowchart LR |
工程落地扩展示例
伪代码
1 | def reciprocal_rank_fusion(rank_lists, k: int = 60): |
参数示例
1 | channels: [bm25_top50, dense_top50, sparse_top50] |
常见失败案例
- 失败模式 1:某通道总把高噪声文档顶到 rank 1,RRF 会持续放大该通道偏见。
- 失败模式 2:各通道 doc_id 不对齐(版本号不一致),融合相当于在比较不同对象。
- 失败模式 3:仅用融合不做截断,候选集过大拖慢后续重排与生成。
Demo 数据带入计算示例
1 | Fusion 与「单通道 top-1」不同:看的是 **跨通道名次之和**。 |