跳转到内容

RAG 进阶:混合检索 + Rerank 让准确率从 60% 到 90%

学完这一节,你能:

  • 配置混合检索(向量 + BM25 全文),解决“语义像但关键词丢”问题
  • 接入 Rerank 模型(BGE-Reranker),把准确率从 60% 拉到 90%
  • RAGAS 评估 RAG 质量(faithfulness / answer relevancy)

单向量检索 = 只看“意思像不像”。混合检索 = 意思 + 关键词双保险。Rerank = 复赛精选。

  • 用户问“2024 年 Q3 营收”:向量检索可能召回“2023 Q2 利润”(意思像但年份错)
  • 加 BM25 全文检索:“2024”“Q3”“营收”这些关键词必须命中
  • 两路结果合并后,Rerank 用更强的模型精排,挑出真正最相关的
检索方式 强项 弱项
纯向量(语义) 理解同义词、语义 关键词(年份、编号、专有名词)容易丢
纯全文(BM25) 关键词精确 不懂同义词
混合(生产必选) 两者互补 略复杂

向量库一次召回 20-50 条(怕漏),再用更强的 Rerank 模型(BGE-Reranker / Cohere)逐对打分,挑出 top 3-5 塞给大模型。这一步能把准确率拉 20-30 个点。

指标 含义 目标
faithfulness 回答是否忠于检索内容(不编) ≥ 0.8
answer_relevancy 回答是否切题 ≥ 0.8
context_precision 检索的片段是否精准 ≥ 0.7
context_recall 该召回的有没有漏 ≥ 0.7

🛠️ 动手实操:Dify 配置混合检索 + Rerank

Section titled “🛠️ 动手实操:Dify 配置混合检索 + Rerank”

(沿用模块 2 的 Dify 部署)

  1. 知识库设置:
    • 检索模式:混合检索(向量 0.5 + 全文 0.5 权重)
    • Rerank 模型:bge-reranker-v2-m3
    • Top K:召回 20,Rerank 后取 5
  2. 准备 20 个测试问题 + 标准答案
  3. RAGAS 跑评估:
Terminal window
pip install ragas
from ragas import evaluate
from ragas.metrics import faithfulness, answer_relevancy
# 准备 dataset:question/answer/context/ground_truth
# result = evaluate(dataset, metrics=[faithfulness, answer_relevancy])
# 目标:faithfulness ≥ 0.8

✅ 这是智谱×公积金 12329 把正确率从 60% 拉到 90%+ 的核心方法。

问题 原因 解决
混合检索后效果反而更差 向量和全文权重没调好 先各跑一遍看单路效果,再调权重(通常向量 0.6 + 全文 0.4)
Rerank 后 top 反而变了 Rerank 模型和 Embedding 不匹配 用同家族(BGE Embedding 配 BGE Reranker)
faithfulness 达不到 0.8 检索召回的片段不准 先治检索(context_precision),再测生成
1. 为什么纯向量检索不够,要加 BM25 全文?

向量懂语义但丢关键词。用户问“2024 Q3 营收”,向量可能召回“2023 Q2 利润”(语义像但年份错)。BM25 保证“2024”“Q3”“营收”这些关键词精确命中。混合检索两者互补。

2. Rerank 在 RAG 里起什么作用?为什么能提 20-30 个点?

向量库一次召回 20-50 条(怕漏),Rerank 用更强的模型逐对精排,挑出真正最相关的 top 3-5 给大模型。召回重、精排准,准确率自然上来。

混合检索 + Rerank 是生产 RAG 标配。下一节:Agent 实战——把 RAG 升级成能“干活”的智能体。

  • Pinecone RAG 学习中心 — 业界最全的 RAG 教程,从分块到混合检索到 Rerank(免费、英文)
  • RAGAS 快速上手 — 装 RAGAS,给你的 RAG 跑一次 faithfulness 评分(免费)
  • 把本节的混合检索配置在 Dify 里跑一遍,对比开 Rerank 前后的准确率

← 上一节:RAG 基础 | 下一节:Agent 实战