RAG 的检索模块是怎么优化的?
RAG 的检索模块是怎么优化的?

RAG 的检索模块是怎么优化的?

在上一篇里我们聊了知识库构建,这一篇,咱们接着讲 RAG 的第二个灵魂模块——在线检索(Retrieval)

这是很多候选人在面试时掉分的地方。 大多数人能说出“我用了向量检索”,但一追问:

“为什么不用BM25?为什么要做重排?Top K怎么调?”

立刻就露怯了。

如果你能讲清楚检索模块的设计逻辑、优化方向和工程权衡, 那你在面试里已经领先90%的候选人。

一、检索模块在RAG中的角色

RAG 的结构很像“搜索引擎 + 语言模型”的组合, 知识库构建是铺地基,检索模块就是“搜索引擎”部分。

它的目标是:在海量文档中,快速准确地找到最相关的内容片段。

检索不准,模型“答非所问”;

检索不全,模型“无话可说”。

很多人以为检索是简单的“向量查相似度”, 其实工业级 RAG 的检索模块是一套完整的管线:

  1. Query 向量化
  2. 初步召回(Recall)
  3. 精排(Rerank)
  4. 结果过滤与合并

接下来我们逐步拆开。

二、第一步:Query 向量化

用户输入一句自然语言,系统要先把它变成可计算的向量。

关键点有三:

  1. Embedding模型一致性检索Query必须用和知识库相同的Embedding模型,否则向量空间不对齐。
  2. 归一化与维度控制通常会对Query向量做归一化,保证相似度计算稳定。 向量维度太高(比如1024)会拖慢检索速度,工程上会做降维或量化。
  3. 保留关键词特征除了语义向量,还可以提取关键词备用,为后续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 的检索模块优化主要包含四个方面:

  1. 向量化:使用统一Embedding模型;
  2. 混合检索:结合Dense与BM25,兼顾语义与精确;
  3. 精排模型:用Cross-Encoder做Rerank;
  4. 缓存与元数据过滤:提升速度与结果可靠性。

我在项目中通过Hybrid Search + Reranker的方式,将检索准确率提升了20%以上。”

这样的答法逻辑完整,又有实操感,面试官很难不满意。

九、结语:检索优化的本质是系统设计

检索优化看似是算法问题,但本质上是工程平衡——速度、准确率、成本的取舍。

最好的系统从来不是“最复杂”的,而是在正确的地方做取舍

记住一句话:“好RAG不靠玄学Prompt,而靠检索稳、知识准。”

发表回复

您的电子邮箱地址不会被公开。