在上一篇里我们聊了知识库构建,这一篇,咱们接着讲 RAG 的第二个灵魂模块——在线检索(Retrieval)。
这是很多候选人在面试时掉分的地方。 大多数人能说出“我用了向量检索”,但一追问:
“为什么不用BM25?为什么要做重排?Top K怎么调?”
立刻就露怯了。
如果你能讲清楚检索模块的设计逻辑、优化方向和工程权衡, 那你在面试里已经领先90%的候选人。
一、检索模块在RAG中的角色
RAG 的结构很像“搜索引擎 + 语言模型”的组合, 知识库构建是铺地基,检索模块就是“搜索引擎”部分。
它的目标是:在海量文档中,快速准确地找到最相关的内容片段。
检索不准,模型“答非所问”;
检索不全,模型“无话可说”。
很多人以为检索是简单的“向量查相似度”, 其实工业级 RAG 的检索模块是一套完整的管线:
- Query 向量化
- 初步召回(Recall)
- 精排(Rerank)
- 结果过滤与合并
接下来我们逐步拆开。
二、第一步:Query 向量化
用户输入一句自然语言,系统要先把它变成可计算的向量。
关键点有三:
- Embedding模型一致性检索Query必须用和知识库相同的Embedding模型,否则向量空间不对齐。
- 归一化与维度控制通常会对Query向量做归一化,保证相似度计算稳定。 向量维度太高(比如1024)会拖慢检索速度,工程上会做降维或量化。
- 保留关键词特征除了语义向量,还可以提取关键词备用,为后续BM25或混合检索服务。
举个例子: 用户问“RAG优化有哪些方向?”, Embedding负责捕捉“优化”与“改进”这种语义近义关系, 而关键词提取能确保“RAG”这种专有词不会丢。
三、第二步:召回——找得快,还要找得全
召回阶段的核心任务是从海量向量中“快速找到Top K相似片段”。
主流做法有两种:
1. 向量召回(Dense Retrieval)
基于Embedding的语义相似度检索。 常用算法有 HNSW、IVF、PQ 等近似最近邻(ANN)结构, 能在百万级文档中毫秒级返回结果。
优点是理解语义; 缺点是有时不够“精”,比如处理数字、代码、专有名词时。
2. 关键词召回(Sparse Retrieval)
基于传统搜索技术,如BM25或倒排索引。 优势是精确匹配,例如识别“TCP/IP协议”这种短语。
在实践中,最常见的优化手段是——混合检索(Hybrid Search): “先用Dense召回语义相关内容,再用BM25补足精确匹配。”
两者取并集或加权融合, 既保留语义理解,又不漏关键术语。
四、第三步:重排——从“差不多”到“最相关”
召回得到几十条候选文本,还不能直接喂给模型。 下一步要做的,就是精排(Rerank)。
Reranker一般是一个跨注意力模型(Cross-Encoder), 它会把 Query 和候选文本一起输入,逐条计算相关度分数。
典型做法:
- 召回阶段取 Top 50;
- Reranker排序后取 Top 5~10;
- 再交给 LLM 进行生成。
这一阶段的优化重点:
- 模型选型:bge-reranker、monoBERT、cohere reranker;
- 代价权衡:Rerank计算贵,需缓存高频Query;
- 阈值调优:设定合理cutoff分数,防止噪声内容混入。
可以简单理解为:召回是“找全”,重排是“挑好”。
五、第四步:结果过滤与合并
得到高分候选后,还要做最后一道关口——过滤。
常见做法包括:
- 按元数据过滤: 比如只取最近30天内容,或限定来源为“技术文档”;
- 去重: 不同文档可能含相同片段;
- 多子问题合并: 对复杂Query可分解为多个子问题分别检索,再合并结果。
这一步是RAG工程落地时常被忽略的,但它直接决定用户体验。 尤其在多轮对话里,错误过滤会导致模型“跑题”。
六、优化策略与常见挑战
1. 平衡召回率与精确率
Top K取太大,检索会拖慢、内容太杂,取太小,又容易漏掉关键信息,建议通过验证集调优,比如固定生成质量的前提下,寻找最佳Top K。
2. 降低检索延迟
可采用以下手段:
- 向量库分片并行;
- 向量量化;
- 缓存高频Query;
- ANN索引参数调优(如HNSW的M、efSearch)。
3. 域内专有词优化
向量检索往往识别不了冷门术语。 可通过:
- 领域微调Embedding;
- 构建同义词表;
- 对特定关键词强制BM25召回。
4. 多语言与跨模态
如果系统需要支持多语言文档,可采用多语Embedding模型(如LaBSE), 或者在检索前先做翻译归一化。
七、实战案例:一次检索优化的演进
以训练营做的一个企业知识问答项目为例:
- 初版只用Dense检索,召回准确率约70%;
- 后来加入BM25混合召回,召回率提升到85%;
- 再加Reranker模型,最终精确率接近90%;
- 引入缓存机制后,响应时间从2.1秒降到0.8秒。
这就是典型的从“能用”到“好用”的优化过程。
八、答题框架总结(面试一分钟版本)
面试时可以这样回答:
“RAG 的检索模块优化主要包含四个方面:
- 向量化:使用统一Embedding模型;
- 混合检索:结合Dense与BM25,兼顾语义与精确;
- 精排模型:用Cross-Encoder做Rerank;
- 缓存与元数据过滤:提升速度与结果可靠性。
我在项目中通过Hybrid Search + Reranker的方式,将检索准确率提升了20%以上。”
这样的答法逻辑完整,又有实操感,面试官很难不满意。
九、结语:检索优化的本质是系统设计
检索优化看似是算法问题,但本质上是工程平衡——速度、准确率、成本的取舍。
最好的系统从来不是“最复杂”的,而是在正确的地方做取舍。
记住一句话:“好RAG不靠玄学Prompt,而靠检索稳、知识准。”