集成检索介绍

集成检索介绍
它的优化对象是「检索召回的结果」核心逻辑是对多路不同检索引擎的召回结果做融合重排全程不修改用户的原始查询语句和查询转换阶段“改写查询文本”的核心定位有本质区别。1.3.1 集成检索器与混合检索策略1.3.1.1 核心原理与优势集成检索器的核心思想是多路召回、优势互补接入多种不同检索逻辑的检索器对同一个查询分别执行召回再通过融合算法将多路结果合并排序最终输出统一的文档列表整体效果优于任意单一检索器。单一检索算法都存在天然的能力边界稀疏检索如BM25关键词检索擅长字面精确匹配对专有名词、专业术语、数字、缩写的匹配度高但无法理解语义、同义词、上下文关联密集检索如向量相似度检索擅长语义模糊匹配能理解同义词、句式变化、隐含语义但对精确关键词、专有名词的匹配弱于字面检索。将二者结合的混合检索Hybrid Search是工业界生产级RAG的标准配置能够同时覆盖字面匹配与语义匹配大幅提升召回的准确率与全面性也是Dify、Coze等主流AI应用平台的默认检索方案。1.3.1.2 LangChain 内置实现EnsembleRetrieverLangChain 官方封装了EnsembleRetriever集成检索器原生支持多路检索器结果融合默认基于RRF倒数排名融合算法做结果重排可接入任意符合标准的Retriever实现。1.3.1.2.1 核心构造参数参数名类型说明retrieversList[BaseRetriever]检索器列表支持任意数量、任意类型的检索器组合weightsList[float]对应检索器的权重列表长度与retrievers一致权重越高对应检索器的结果优先级越高1.3.1.2.2 基础实现示例BM25FAISS混合检索最经典的落地方案是「BM25关键词稀疏检索 FAISS向量密集检索」的双路组合实现完整的混合检索能力。importdotenvfromlangchain.retrieversimportEnsembleRetrieverfromlangchain_community.retrieversimportBM25Retrieverfromlangchain_community.vectorstoresimportFAISSfromlangchain_core.documentsimportDocumentfromlangchain_openaiimportOpenAIEmbeddings dotenv.load_dotenv()# 1. 准备知识库文档documents[Document(page_content笨笨是一只很喜欢睡觉的猫咪,metadata{page:1}),Document(page_content我喜欢在夜晚听音乐这让我感到放松。,metadata{page:2}),Document(page_content猫咪在窗台上打盹看起来非常可爱。,metadata{page:3}),Document(page_content学习新技能是每个人都应该追求的目标。,metadata{page:4}),]# 2. 构建BM25关键词检索器稀疏检索bm25_retrieverBM25Retriever.from_documents(documents)bm25_retriever.k4# 3. 构建FAISS向量检索器密集检索faiss_dbFAISS.from_documents(documents,embeddingOpenAIEmbeddings(modeltext-embedding-3-small))faiss_retrieverfaiss_db.as_retriever(search_kwargs{k:4})# 4. 初始化集成检索器两路检索权重各占0.5ensemble_retrieverEnsembleRetriever(retrievers[bm25_retriever,faiss_retriever],weights[0.5,0.5],)# 5. 执行混合检索docsensemble_retriever.invoke(除了猫你养了什么宠物呢)1.3.1.2.3 运行时动态配置生产环境支持通过configurable_fields实现检索参数的动态调整无需重启服务即可修改单路检索器的召回数量、匹配阈值等配置。# 为向量检索器配置可动态修改的搜索参数faiss_retrieverfaiss_db.as_retriever(search_kwargs{k:4}).configurable_fields(search_kwargsConfigurableField(idsearch_kwargs_faiss,name搜索参数,descriptionFAISS检索器的搜索参数配置,))# 调用时传入配置动态调整召回数量config{configurable:{search_kwargs_faiss:{k:1}}}docsensemble_retriever.invoke(苹果,configconfig)1.3.1.3 融合算法逻辑EnsembleRetriever底层基于加权版RRF倒数排名融合算法实现结果合并核心执行逻辑并行调用所有检索器分别获取各自的文档排名列表对每个文档按其在各路检索器中的排名结合对应检索器的权重累计计算融合得分按总得分降序排列去重后输出最终的融合结果。与标准RRF算法相比加权RRF支持人为调整不同检索通道的优先级比如精确查询占比高的业务场景可将BM25权重设为0.6、向量检索设为0.4灵活适配业务偏好。1.3.1.4 与RAG Fusion的边界区分二者都使用了RRF融合算法但所属阶段、解决的问题完全不同是极易混淆的两个方案核心区别如下方案所属阶段核心逻辑差异来源核心目标集成检索器混合检索检索阶段同一个查询多路不同检索引擎召回结果融合检索算法/引擎不同兼顾字面匹配与语义匹配RAG Fusion查询转换检索融合多个改写查询同一路检索器召回结果融合查询语句不同提升召回的语义全面性工业界最佳实践通常是二者叠加使用先通过查询转换生成多个子查询再对每个子查询执行混合检索最后对所有结果做统一RRF融合实现最大化的召回效果。1.3.1.5 落地最佳实践权重调优默认两路各0.5是通用基线需结合业务场景调优。事实类、精确查询多的场景调高BM25权重语义类、咨询类查询多的场景调高高向量检索权重。召回数量配置单路检索器的召回数量建议略大于最终目标数量保证融合后有足够的候选池做排序。例如最终返回4条结果单路可各召回4~6条。中文分词适配原生BM25检索器默认按空格分词不适合中文文本。生产环境需替换为Jieba等中文分词器否则关键词检索效果会严重下降。可扩展组合不仅限于BM25向量还可接入图检索、SQL检索、知识库目录检索等多路通道通过统一的RRF框架融合适配复杂的多数据源RAG系统。性能权衡每增加一路检索器检索耗时会相应增加需在效果与性能之间做平衡。通用场景两路混合即可覆盖绝大多数需求不建议堆砌超过三路检索器。