来源:互联网 更新时间:2026-08-25 13:46
聊到RAG(检索增强生成),大家肯定都知道那个“R”代表检索。这个环节有多重要,不用多说——它直接决定了后续生成质量的底牌。而基于向量的语义检索,可以说是最基础、最广为人知的检索模式了。
不过,在实际落地的时候,单纯用一次向量检索,往往有点“不够用”。你会发现,简单的top-K召回,对很多复杂的、多层次的需求显得力不从心。所以在模块化RAG兴起的今天,各种新范式和新算法都在检索这个核心环节上做了大量的创新和优化。
这篇文章,咱们就聊两种在实际RAG应用里非常灵活、也相当有效的高级检索模式:
融合检索,说白了,就是把多种不同的检索方法组合在一起,取长补短。它的核心思路是:

那么,这种“多路不同的检索”具体怎么实现?在实际应用中,可以根据业务场景灵活选择,比如:
这种方式,是借助查询重写(或查询转换器)模块,把用户输入的原始问题扩展成多个不同表达或从不同角度细化的子问题。然后分别对这些子问题进行检索,最后把召回的知识块通过一个重排(reranker)模块重新排序,只取最终的top_K给生成环节用。

通过Rewriter模块进行问题扩展
虽然高维向量索引在语义检索上很出色,但它也不是万能的。比如,你可能需要借助知识图谱索引来精确获取实体间的复杂关系,或者用树状的摘要索引来更好地回答那些偏概要性的问题。所以,你可以同时构建多路不同类型的索引(比如向量索引和关键词索引)对同一个问题进行检索,然后把召回的知识块重排序后取top_K。
(当然,也可以用同一种索引,但采用不同的检索与评分算法)
基于向量索引与关键词索引对问题进行多路检索
这种方式是上面两种的“合体”。也就是说,同时借助问题扩展和索引扩展,来实现更多路的知识召回。召回的知识块多了,理论上找到更相关信息的概率也大了,但代价也很明显:系统性能的消耗和模型使用成本都会相应增加。在实际项目中,需要根据测试结果来权衡取舍。

基于问题扩展+索引扩展的融合检索
实现融合检索其实并不复杂。在LangChain或LlamaIndex这些主流框架里,都有现成的转换器(rewriter)、检索器(retriever)和排序器(reranker)概念和组件,你可以自由组合来实现。
......class FusionRetriever(BaseRetriever): # 基于多个检索器构造融合检索器 # 参数:检索器列表与top_k def __init__( self, retrievers: List[BaseRetriever], similarity_top_k: int = 3, ) -> None: self._retrievers = retrievers self._similarity_top_k = similarity_top_k super().__init__() # 实现检索方法 def _retrieve(self, query_bundle: QueryBundle) -> List[NodeWithScore]: # 查询重写,自行实现rewrite_query querys = rewrite_query(query_bundle.query_str, num=3) # 调用辅助方法得到全部检索结果,自行实现run_queries results_dict = asyncio.run(run_queries(querys, self._retrievers)) # RRF重新排序,自行实现rerank_results final_results = rerank_results(results_dict, similarity_top_k=self._similarity_top_k) return final_results
相较于融合检索,递归检索的玩法要更复杂一些,但思路非常符合人类的认知习惯。想象一下,你要在一大堆书里找一段特定的文字,你会怎么干?肯定不是一本本地翻。合理的做法是:
这本质上就是一种递归检索:
下面这张图可以简单示意其原理:

从图里可以看出,
从一级chunks链接到的二级对象引用,可以是以下几种:
下面我们具体看看这几种不同的链接形态及其应用场景和递归流程。
这种递归检索的本质,就是一级chunk查找关联chunk的过程:通过检索找到一级chunk,然后根据它的引用直接找到对应的二级chunk返回。在RAG里这么做的意义,通常是为了解决那个老生常谈的问题:chunk的语义精确性和上下文的丰富性往往是矛盾的,所以需要把这两种需求分离设计。
常见的应用场景有:
下图展示了这种方式的检索流程(注意并非所有的一级chunk都一定要有二级chunk的链接),蓝色部分表示实际检索过程:

这种情况下,通过检索出来的一级chunk找到对应的二级检索器(注意不是chunk),然后递归调用这个检索器再次检索,并把二次检索出来的chunks用于后续生成。
下图表示了这种方式下的检索流程:

这种方式和上一种的区别在于:一级chunk链接到的对象不再是一个输出chunks的检索器,而是一个完整的RAG引擎,它输出的答案将直接作为后续生成的上下文。上一种场景中的检索器,自然也可以换成RAG引擎,达到类似的效果。
除此之外,
下图表示了这种方式下的检索流程:

最后一种方式是从chunk节点链接到Agent。在检索出基础chunk后,根据其中保存的Agent引用继续探索,调用Agent获取答案作为后续生成的上下文。这种模式本质上与“chunk + RAG引擎”类似,
仍然以多文档RAG应用为例,我们可以做如下设计来支持更复杂的问答场景:
下图表示了这种方式下的检索流程:
到此,我们把两种复杂但强大的检索模式详细剖析了一遍。检索在RAG应用中的重要性不言而喻,单一的向量语义检索在复杂的生产环境中往往力不从心。以原型去应对生产需求,很快就会发现“举步维艰”。因此,了解和掌握不同的检索策略、算法、场景与范式,是让RAG应用真正走向“生产就绪”的关键一环。
实际上,在LangChain和LlamaIndex这些主流开发框架中,还有着更丰富的检索索引、算法和组件支持,包括但不限于:
腾讯ima怎么把微信内容一键导入知识库?
腾讯ima怎么创建共享知识库?
Celestia价格预测2026-2032:TIA币能否引领山寨币上涨行情?历史价格回顾
新浪互联网热点小时报丨2026年07月26日16时_今日实时互联网热点速递
比特币(BTC)核心周期指标复刻历史走势 价格或跌破5.8万美元关键支撑位
比特币 2025 年价格预测:BTC 的未来走势
新浪机器学习热点小时报丨2026年07月25日18时_今日实时机器学习热点速递
WorkBuddy微信版怎么获得积分?
新浪人工智能热点小时报丨2026年07月30日18时_今日实时人工智能热点速递
短剧《史上最强洪荒修为》剧情介绍
海尔消毒柜自动消毒如何中止
5000元起的鼠标哪个最值得入手?
男生高性价比充电头?
博世壁挂炉关闭暖气怎么操作
腾讯ima知识库怎么分类管理?
车载冰箱重置到出厂设置几步?
Windy卫星云图怎么看?云层变化识别技巧
5000-6000元鼠标有什么推荐?
管线机怎么接云米净水器
笔记本移动电源推荐哪款?
手机号码测吉凶
本站所有软件,都由网友上传,如有侵犯你的版权,请发邮件haolingcc@hotmail.com 联系删除。 版权所有 Copyright@2012-2013 haoling.cc