关键词检索与向量检索各返回一份列表时,不能直接把两种原始分数相加。RRF用每项在列表中的名次计算贡献,再合并相同文档,是一种容易检查的排名融合方式。

把文档身份统一后再计算
采用从1开始的名次,每份列表给文档增加1/(k+名次)。例子固定k为60,使用文档ID合并。A、B、C是虚构资料;同一份列表内假定ID不重复,真实系统需要先保证这一输入约定。
同时出现与单次靠前都影响结果
示例中B在两份列表里都有贡献,最终排在前面。这里的k用于平滑名次影响,不是检索请求要返回的邻居数量。改变列表数量、长度或权重也会改变结果,不能把融合分数当成回答正确的概率。
保留每一路名次方便排查
本站建议调试时一起记录关键词名次、向量名次和最终名次。若相关文档根本没有进入任一候选集,融合算法无法凭空找回。这个练习只验证计算逻辑,不代表已经测试了真实知识库的质量。
可以运行的练习
from collections import defaultdict
scores = defaultdict(float)
for ranking in [["A", "B"], ["B", "C"]]:
for rank, doc in enumerate(ranking, start=1):
scores[doc] += 1 / (60 + rank)
order = sorted(scores, key=lambda doc: (-scores[doc], doc))
assert order == ["B", "A", "C"]
print(order)
示例已在本地隔离环境运行检查。使用固定输入,不访问外部接口,也不读取真实业务文件。
资料与继续学习
Microsoft Learn:RRF混合检索排名。资料查阅日期:2026年10月3日。步骤与练习由本站整理。
资料查阅与编辑日期:2026年10月3日。作者:玖柒。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END







