来源:互联网 更新时间:2026-05-30 10:50
在RAG(检索增强生成)搜索中,当你同时执行两个或更多查询时,就会遇到一个经典问题:每个查询都会产出一份独立的排名结果集,怎么把它们整合成一个既能体现各自优势、又足够靠谱的最终答案呢?这时候,
简单来说,RRF是一种优雅的算法,它会逐一评估来自不同排名的搜索结果,然后把它们融合成一个统一的结果集。无论是混合搜索,还是并行执行的多个向量查询,RRF都是那个负责“一锤定音”的角色。
它的核心思想,就是利用“倒数排名”这个概念——也就是搜索结果列表中,第一个相关文档的排名的倒数。说白了,它就是看一个文档在各个列表里排得有多靠前,排得越靠前,它在最终结果里的分量就越重。
在聊RRF之前,先讲清楚一个核心背景:RAG系统的成败,很大程度上取决于检索阶段的表现。如果检索器没能找到相关文档,后面生成环节的精度就会直线下降,所谓的“幻觉”问题(模型生成不准确甚至荒谬的内容)也会随之增加。这是所有从业者都不愿看到的局面。
实际情况是,不同的查询往往需要不同的检索策略。有些查询,用基于关键字的检索(比如BM25)效果更好;另一些查询,则用依托语言模型嵌入的密集检索(dense retrieval)更准确。混合检索技术,就是为了取这两种方法之长,而RRF正是将各路检索模型的排名结果巧妙合并、输出统一排名的聚合利器。
RRF的工作原理,可以简单分成几个步骤来看:


RRF的公式看上去非常简单:
在RRF的实际应用中,k=60是一个非常经典的默认值。这个数值为什么被广泛采用?背后有几点考量:
当然,有一点必须强调:
在实际的RAG系统里,RRF的代码实现思路很清晰:
score = 0.0
for q in queries: # 遍历发送到不同搜索引擎的查询
if d in result(q):
score += 1.0 / ( k + rank(result(q), d))
return score
# 其中
# k 是排名常数
# q 是查询集合中的某个查询
# d 是q结果集中的某个文档
# result(q) 是q的结果集
# rank(result(q), d) 是文档d在result(q)中的排名(从1开始)
如果用Python,甚至可以写成一行:
def reciprocal_rank_fusion(queries, d, k, result_func, rank_func):
return sum([1.0 / (k + rank_func(result_func(q), d)) if d in result_func(q) else 0 for q in queries])

RRF之所以在RAG系统中成为排名聚合的明星,在于它能以轻量级的数学手段,将多个检索器的优势充分结合,生成更稳健、更相关的统一文档排名。可以说,掌握RRF的原理和应用,就是掌握了提升RAG系统检索质量的一把关键钥匙。对于从业者而言,理解并优化这项技术,意味着能让自己的系统在面对复杂查询时,输出更准确、更可靠的结果。
下饭影视APP下载安装指南
灵宝派对手游下载安装地址推荐
和平精英如何做到压枪稳-和平精英怎样才能压枪稳
下载浏览器app下载安装选择推荐
初中英语同步课文跟读APP推荐|免费下载高口碑跟读软件排行榜
BuuPo官网在哪下载 最新官方下载安装地址
4D采矿者官网在哪下载 最新官方下载安装地址
阅读app安卓版下载推荐
碎片人偶Vragmeet官网在哪下载 最新官方下载安装地址
Elysium Above 履云录官网在哪下载 最新官方下载安装地址
无尽花界时装合辑
免费影视剧APP推荐
喧哗番长乙女 2nd Rumble !!官网在哪下载 最新官方下载安装地址
纸嫁衣9官网在哪下载 最新官方下载安装地址
萌神契约手游下载安装
好用的手环阅读app下载安装
儿子穿新中式现身大会堂 马斯克罕见用中文回应:他正在学习普通话
人声接近真人!OpenAI一口气更新三款超强语音AI
名单曝光!库克、马斯克等将随团到访中国 黄仁勋不在其中
短视频软件推荐
手机号码测吉凶
本站所有软件,都由网友上传,如有侵犯你的版权,请发邮件haolingcc@hotmail.com 联系删除。 版权所有 Copyright@2012-2013 haoling.cc