RAG 三板斧:从语义理解到精准检索的完整流程

4 阅读5分钟

前言

在 RAG(检索增强生成)的实际落地中,检索质量直接决定最终答案的上限。尤其在法律等垂直领域,用户问题口语化、术语专业、信息密度高,单靠传统向量检索远远不够。

本文总结了一套经过验证的“RAG 三板斧”实战方法:

  1. 语义理解(检索前)
  2. 多路 + 混合检索(检索中)
  3. 融合与精排(检索后)

整体流程如下:

语义理解 → 多路检索 + 混合检索 → 融合(RRF/加权)→ 截取 top-K(如 50)→ Reranker 精排 → 截取 top-N(如 5)→ 送 LLM


第一板斧:语义理解(Query Understanding)

在正式检索之前,先让系统“读懂”用户问题。这一步相当于给检索系统装了一个懂意图、懂实体、懂过滤的大脑。

1. 意图识别

判断用户想问什么类型的问题,例如:

  • 条款查询
  • 概念解释
  • 法条对比

实现方式

  • 基于 LLM:直接让大模型分类,灵活准确,适合复杂问题。
  • 基于 Embedding:与意图样例库做语义匹配,速度快、成本低。
  • 混合模式(推荐) :先用规则/轻量模型快速分类,置信度低时再走 LLM 兜底。

2. 实体抽取

抽出问题中的关键信息,例如:

  • 法律名称
  • 条款号
  • 时间范围
  • 状态(现行/废止)

常用技术:规则 + BERT / NER 模型 + LLM 兜底。

3. 元数据过滤(Metadata Filtering)

这是减少检索噪声最有效的一步
每段文档(chunk)提前打好元数据标签,例如:

json

{
  "法律名称": "中华人民共和国民法典",
  "章节": "合同编",
  "状态": "现行有效"
}

根据意图和实体生成过滤条件,例如:

法律名称 = “民法典” AND 章节 = “合同编” AND 状态 = “现行有效”

检索只在这个子集内进行,避免从全库中“大海捞针”。

元数据过滤执行步骤

  1. 获取意图 + 实体结果
  2. 根据意图添加默认过滤(如条款查询 → 仅准则)
  3. 将实体转为过滤表达式(如 standard_code = 'ISA 315'
  4. 添加全局过滤(如 status = 'active'
  5. 用 AND 组合所有条件

第二板斧:多路检索 + 混合检索

在缩小后的检索范围内,同时执行多条检索路径,每条路径都采用“关键词 + 向量”双保险。

多路检索(Multi-Query)

用户问题往往模糊或不完整,因此生成多个不同角度的检索版本:

  • 原问题
  • 查询重写(Query Rewriting) :LLM 将口语化问题改写为多个清晰版本
  • HyDE:让 LLM 生成一段“假设答案”,用这段答案去检索(更贴近真实文档风格)

混合检索(Hybrid Search)

每一路检索内部,都同时使用两种方法:

方法原理优点缺点
关键词检索(BM25)字面匹配精确、不丢专有名词不懂语义、词汇鸿沟
向量检索(Dense)语义匹配懂同义词、模糊表达对精确编号不敏感

混合检索 = 同时跑 BM25 + 向量,再用 RRF 等算法融合排序。
效果显著:在法条场景中,准确率可从 60% 提升到 80–85% 以上。

比喻:
关键词 = 查字典(精确但死板)
向量 = 问朋友(灵活但可能猜错)
混合 = 两人一起找,互相补短板


第三板斧:融合与精排

多路检索会产生大量候选结果,需要进一步提纯。

1. 多路结果融合(RRF / 加权)

将不同检索路径返回的结果合并排序。
RRF(倒数排名融合)  是常用方法,不依赖绝对分数,只看相对排名。

示例(k=60):

  • D2 在两个路径中均排名靠前 → 总分最高
  • 只在单一路径出现的结果排名较低

2. 截取 top-K(如 50)

减少后续精排的计算压力。

3. Reranker 精排

使用更强的交叉编码器模型(如 BGE-reranker、Cohere rerank)对候选文档逐一精细打分。
这一步比普通向量检索更准,但计算成本高,因此只在较小集合上做。

4. 截取 top-N(如 5)

最终将最相关的少量片段送入 LLM 生成答案。


完整流程回顾(带示例)

  1. 语义理解
    用户问:“民法典合同编里违约赔偿怎么规定?”

    • 意图:条款/概念查询
    • 实体:法律=民法典,章节=合同编
    • 过滤条件:法律=民法典 AND 章节=合同编 AND 状态=现行
  2. 多路 + 混合检索

    • 原问题、改写版本、HyDE 并行
    • 每路都做 BM25 + 向量检索
    • 每路内部 RRF 融合 → 输出该路 top-k
  3. 融合与精排

    • 多路结果合并(RRF)→ top-50
    • Reranker 精排 → top-5
    • 送 LLM 生成最终答案

补充:关键概念澄清

实体抽取 vs 关键词检索

维度实体抽取关键词检索
技术NER / LLM / 规则BM25 倒排索引
输出结构化字段文档列表
是否建索引
是否理解上下文

结论:两者是完全不同的任务,但在 RAG 流程中配合使用

意图识别(Embedding版) vs 向量检索

维度意图识别向量检索
技术相同(embedding + 相似度)相同
搜索范围小(5–20 个类别)大(全量文档)
是否需要索引否(暴力计算)是(HNSW/IVF)
目的分类检索

结论:技术原理相同,但规模和用途完全不同


总结

语义理解缩小范围,多路混合保证召回,融合精排提升精度——这就是 RAG 三板斧的核心思想。