深入剖析 RAG 检索系统中的召回方式:BM25、向量召回、混合策略全解析
目录
一、什么是 RAG 检索系统?
二、为什么召回方式对 RAG 至关重要?
三、RAG 系统中的常见召回方式详解
3.1 🔷 BM25 召回(稀疏召回)
3.2 🔷 BCE 向量召回(稠密语义召回)
3.3 🔷 混合召回(Hybrid Recall)
四、其他召回方式拓展
4.1 📌 Query Expansion(查询扩展)
4.2 📌 实体召回 / 多跳实体路径召回
4.3 📌 类别召回 / 标签召回
五、召回方式对比与选型建议
六、RAG 系统中的召回架构实践
七、总结:如何构建适合你的召回系统?
八、附录:参考工具与资源
总结
一、什么是 RAG 检索系统?
RAG(Retrieval-Augmented Generation,检索增强生成)是一种结合信息检索与文本生成的大模型架构,它在回答问题或生成文本时,不仅依赖模型知识,还利用外部文档来增强上下文,提升准确性和事实性。
RAG 的核心流程可分为三步:
-
召回(Recall):根据输入 Query,从大规模文档中召回 Top-K 候选文档。
-
重排序(Rerank):对候选文档进一步排序,提升相关性。
-
生成(Generate):使用大模型(如 LLM)结合文档生成最终答案。
其中,“召回”是第一步,决定了后续的生成质量,本篇聚焦于 RAG 中的召回方法详解。
二、为什么召回方式对 RAG 至关重要?
📌 内容说明:
-
LLM 本身知识库是静态的,无法覆盖所有事实。
-
召回的结果质量直接影响最终生成答案的准确性。
-
大规模语料下,如何在 毫秒级别 召回高质量候选文档,是系统性能的关键。
举例:如果你的知识库有百万文档,生成阶段仅能处理前 5~10 个文档,那么召回阶段必须从百万文档中精准找出最相关的那几个。
三、RAG 系统中的常见召回方式详解
3.1 🔷 BM25 召回(稀疏召回)
✅ 原理:
BM25 是基于关键词匹配和词频倒排索引的经典 IR 方法。
按照每个文档与 query 关键词的匹配程度计算得分。
✅ 特点:
不需要训练模型,部署简单
可解释性强,适用于规则/关键词主导场景
✅ 使用工具:
Elasticsearch
(官方支持 BM25)
Whoosh
(Python 本地索引)
Lucene
底层引擎✅ 示例应用场景:
FAQ 系统、法律检索、规则匹配型问答
3.2 🔷 BCE 向量召回(稠密语义召回)
✅ 原理:
使用双塔语义编码模型,将 query 和文档分别编码为向量。
利用向量之间的相似度(内积或余弦)进行匹配。
✅ 常用模型:
SimCSE(有监督/无监督)
DPR(Dense Passage Retrieval)
GTR、Contriever、Cohere embed
✅ 检索引擎:
Faiss
(Facebook 提供的向量库)
Milvus
(国产开源,支持 GPU 加速)
Weaviate / Qdrant / Vespa
等现代向量检索系统✅ 优缺点:
优点 缺点 能识别语义相似、同义词 向量计算成本高、训练门槛较高 可迁移性好,适应复杂场景 可解释性差 ✅ 典型应用场景:
多语言问答、语义搜索、知识库检索
3.3 🔷 混合召回(Hybrid Recall)
✅ 原理:
融合 稀疏检索(关键词) 和 稠密检索(语义向量) 的结果,提升召回覆盖面和精度。
✅ 融合策略:
并行召回 + 合并(去重后排序)
分阶段召回(先 BM25 再向量 rerank)
使用排序融合算法:RRF(Reciprocal Rank Fusion)
✅ 工具支持:
LangChain / LlamaIndex
Haystack(支持 Hybrid Retriever)
✅ 优势:
综合精度更高,鲁棒性更强
不易被 OOV(未登录词)影响
✅ 建议使用场景:
对召回精度要求高的 RAG 问答系统
文本风格多样、歧义多的搜索任务
四、其他召回方式拓展
4.1 📌 Query Expansion(查询扩展)
使用同义词库或语言模型对 Query 进行扩展,提高召回率。
示例:将“电流保护”扩展为“过流保护”、“短路电流保护”
4.2 📌 实体召回 / 多跳实体路径召回
基于知识图谱,从 Query 中抽取实体 -> 关联相关节点 -> 返回文档
常用于专业问答系统、医学/法律领域
4.3 📌 类别召回 / 标签召回
先对 Query 做分类(如所属主题),再在相应子索引中召回
提高召回效率,降低误召概率
五、召回方式对比与选型建议
方法 | 语义能力 | 精度 | 速度 | 部署成本 | 典型场景 |
---|---|---|---|---|---|
BM25 | 弱 | 中 | 快 | 低 | FAQ、关键词匹配 |
向量召回 | 强 | 高 | 中 | 中高 | 通用问答、语义搜索 |
混合召回 | 强 | 很高 | 中 | 高 | 复杂场景、企业知识库 |
实体召回 | 强 | 高 | 中 | 中 | 专业领域、结构化文档 |
扩展召回 | 中 | 高 | 慢 | 中 | Recall Coverage 提升 |
六、RAG 系统中的召回架构实践
一个标准 RAG 检索系统的召回架构:
七、总结:如何构建适合你的召回系统?
只做关键词匹配够用吗?
小数据量 / FAQ类系统中 BM25 已够用。想实现语义检索怎么办?
推荐使用SimCSE + Faiss/Milvus
,可用开源模型快速启动。如何保证召回稳定和高覆盖?
混合召回是大趋势,RRF 等融合策略可显著提升 Recall@K。有没有一体化工具推荐?
Haystack
、LlamaIndex
、LangChain
等支持多种召回模块组合。
八、附录:参考工具与资源
类别 | 工具/平台 | 简介 |
---|---|---|
稀疏检索 | Elasticsearch、Whoosh | BM25 支持 |
向量库 | Faiss、Milvus、Qdrant | 向量召回 |
模型 | SimCSE、DPR、Contriever | 语义编码模型 |
框架 | Haystack、LangChain、LlamaIndex | 检索增强生成框架 |
总结
召回是 RAG 系统的起点,是构建高质量智能问答、搜索、知识系统的根基。选择合适的召回策略,不仅能提升系统性能,更能让大模型“看得见”正确的知识。
如果你正在构建一个 RAG 系统,建议从 BM25 + SimCSE 混合召回开始实践,并逐步引入更强的 rerank 模块,实现端到端闭环的问答系统。