RAG 知识库-检索策略

发布时间:2026/10/7 2:49:16
RAG 知识库-检索策略
一、RAG 检索策略到底在解决什么问题RAG 检索的本质是在召回率和精确率之间找平衡。召回率衡量的是“该找到的有没有找到”。如果用户问年假制度知识库里明明有三份相关文档检索只召回了其中一份这就是召回不足。精确率衡量的是“找到的有没有用”。如果召回了十段文本其中八段都是无关内容不仅浪费上下文窗口还会干扰 LLM 的判断引入幻觉风险。不同检索策略的核心差异就在于它们如何在这两个指标之间取舍向量语义检索擅长召回“意思相近但说法不同”的内容但对精确匹配不敏感关键词检索BM25 擅长精确命中特定术语、编号、专有名词但完全不懂语义混合检索试图同时保留两者的优势代价是系统复杂度上升重排序在初筛之后加一道精排牺牲延迟换取精确率。选策略的第一步是明确你的场景更怕“漏”还是更怕“错”。二、RAG 检索策略详解向量检索、关键词检索、混合检索在 RAGRetrieval-Augmented Generation系统中检索质量直接决定了大模型回答的上限——检索不到相关内容再强的模型也只能“一本正经地胡说1、向量检索Vector Retrieval1.1 含义向量检索是语义级的相似度匹配把用户查询和文档切块chunk都转换成高维向量Embedding通过计算向量间的余弦相似度衡量语义相近程度。它的核心价值是理解意图——“电脑开不了机”能命中“主机无法启动的排查方法”即使两个词面完全不同。强项语义泛化能处理同义改写、口语化提问弱项对精确术语、编号、专有名词不敏感对领域外词汇容易“语义漂移”典型场景开放域问答、FAQ、语义模糊的提问1.2 实现逻辑技术栈为 PostgreSQL pgvector 扩展余弦距离算子配合 HNSW 近似最近邻索引用户查询 ↓ ① Embedding 模型向量化 查询向量 在向量表中执行 ANN 近邻搜索 ↓ ② 在向量表中执行 ANN 近邻搜索 ↓ ③ 按距离升序 相似度降序LIMIT 取候选池 候选块列表含相似度分数几个实现要点部分索引HNSW 索引只建立在启用向量的行上停用文档的向量不参与索引兼顾性能与一致性分数即最终语义分数余弦相似度天然落在 [0,1] 区间可直接被阈值过滤强依赖 Embedding 模型检索前先做能力预检确保激活 EMBEDDING 模型而非失败后才报错。1.3 局限对精确匹配弱查询型号、编号、专有名词时语义相近但词面不同的块可能排在前面依赖 Embedding 模型的质量与领域适配度。2、关键词检索Keyword Retrieval2.1 含义关键词检索是词面级的精确匹配按字面关键词在文档内容中查找命中。它不理解语义但对专有名词、型号、编号、错误码这类查询极其可靠——用户搜 “E-1003”就必须命中包含 “E-1003” 的内容语义模型的“模糊理解”反而是干扰。强项精确命中术语、编号、法条、型号、人名弱项完全不懂语义用户换个说法就找不到典型场景政策条款查询、编号检索、法律/医疗等术语密集型场景2.2 实现逻辑关键词检索基于 BM25Best Matching 25 算法是一种经典的稀疏检索Sparse Retrieval 方法。它通过词频统计来衡量查询与文档之间的字面匹配程度核心考量三个因素词频TF查询词在文档中出现得越多相关性越高逆文档频率IDF查询词在整个语料中越罕见区分度越高权重越大文档长度归一化对长文档进行惩罚避免因篇幅长而虚高BM25 的输出是每个文档块的词频统计得分并按得分从高到低排序返回。它的优势在于精确命中术语、编号、专有名词但对语义改写和近义表达不敏感。在实践中BM25 的分数没有固定范围因此更适合按排名取 Top K而非设置绝对分数阈值。不依赖任何模型requiresEmbedding false全部为关键词检索的知识库不要求配置 Embedding 能力设计时可与向量检索共用一张走向量表复用 kb_id / document_id / enabled 过滤条件与行映射逻辑避免重复实现3、混合检索Hybrid Retrieval3.1 含义向量检索懂语义但弱于精确匹配关键词检索懂词面但不懂语义——混合检索 两条链路并行召回再把结果融合成一路让“语义相近”和“字面命中”互相补位。这是生产环境知识库检索的推荐默认项。RRF倒数排序融合只看排名不看分数兼容性强最常用加权分数融合需要归一化处理调参成本高3.2 实现逻辑用户查询 ├─→ 向量路ANN 搜索召回 topK×2 块含相似度分数 ├─→ 关键词路ILIKE 匹配召回 topK×2 块 ↓ 按融合规则二选一互斥执行非顺序执行 ├─ 规则A加权分数融合 └─ 规则BRerank 重排序融合 ↓ 融合候选池分数降序融合规则 A加权分数融合与 RRF按名次倒数计分不同加权分数融合直接操作分数本身两路分数各自min-max 归一化到 [0,1]消除量纲差异整路同分时视为满分按权重加权求和score wV × normVec wB × normKw权重合计为 1同一块被两路同时命中 → 两份加权分相加双命中天然靠前仅一路命中 → 该路权重 × 归一化分按融合分降序输出。向量路和关键词路的相对重要度由用户通过滑块配置默认 0.7 / 0.3。融合规则 BRerank 重排序融合两路结果先做 RRF 等权合并仅生成一个候选池顺序作为重排失败时的保底顺序 精排交给编排层的 Rerank 步骤完成 ——由重排序模型按“查询-文档”语义相关度重新打分。也就是说模式层只负责“把两路汇成一个候选池”重排统一在编排层执行全链路只重排一次。三、检索参数参数含义默认值检索方式向量/ 关键词/ 混合检索 三选一向量Top-K最终返回给大模型的最大块数5Score 阈值最终分数低于该值的块被过滤0 表示不过滤0.6Rerank 开关是否启用重排序模型关闭Rerank 模型执行重排的 RERANK 注册模型开启后必选无向量权重 / 关键词权重加权融合的两路权重合计为 10.7 / 0.3Rerank 重排序粗召回向量/关键词/融合给出的是“快速、粗糙”的排序。Rerank 模型Cross-Encoder 类会把“查询 每个候选块”成对输入输出精确的语义相关度分数代价是更大的 token 开销与延迟——因此它是可选项而非默认项。实现上是一个编排层公共执行器输入查询文本 粗召回候选 指定的重排序模型行为调模型逐块打分 →覆盖块分数→ 按新分数降序返回容错模型未配置、返回数量不匹配、下标越界、调用异常一律返回 null调用方保底粗召回顺序——重排只提升排序质量绝不因它失败而丢结果。Rerank 之后Score 阈值过滤的是重排分数而非原始相似度这是“低向量分但重排高分”的块能被保住的关键。四、小结维度向量检索关键词检索混合检索匹配本质语义相似度词面精确匹配语义 词面互补模型依赖Embedding无Embedding擅长意图理解、同义改写专有名词、编号、错误码通用推荐融合逻辑无无加权分数融合 / RRF Rerank 重排序二选一