上回说到
我们把文档切分好,也存进了向量数据库。

但跑起来一试,发现个大问题:
有时候问一些特定名词(比如“报销流程”、“错误代码 502"),向量检索找出来的全是些“意思相近”但不沾边的废话。

怎么办?今天咱们来给检索系统加个“强力外挂”。


🧐 为什么单纯的向量检索会翻车?

向量检索的核心逻辑是找“意思相近”的。
这有个致命弱点:它对精确关键词不敏感。

举个例子:
你问:“Q3 季度的财务报表是多少?”

向量检索可能会觉得:

  • “财务报表” -> 找到了很多关于财务的段落。
  • “是多少” -> 这是个问句。
  • 于是它返回了一堆讲“财务定义”、“怎么做财务报表”的通用文档。

但它偏偏漏掉了那个标题叫"2025 Q3 财报数据"的具体段落。
因为在向量空间里,"2025 Q3 财报数据”和"Q3 季度的财务报表”可能离得并不近。

这就是“语义匹配” vs “关键词匹配”的经典矛盾。


🛠️ 解法一:混合检索(Hybrid Search)

既然“语义”和“关键词”各有所长,那咱们两个都要!

混合检索就是把两种检索方式的结果合并起来:

  1. 1. 向量检索:负责兜底,找出语义相关的段落。

  2. 2. 关键词检索(BM25):负责精准,找出包含特定关键词的段落。

然后把两边的结果加权融合。

什么是 BM25?

全称有点长,你就把它理解为 Google 搜索的核心算法。
它专门统计关键词在文档里出现的频率。如果你搜“报销”,它就死盯着那些“报销”出现次数最多的段落给你找出来。

实战效果:

  • 问:“财务定义是什么?” -> 向量检索赢了,BM25 也能辅助。
  • 问:"Q3 财报数据?” -> BM25 直接命中,向量检索辅助。

两者结合,基本通杀。


🛠️ 解法二:重排序(Rerank)

混合检索找回来了 10 条候选结果,但这 10 条里肯定有鱼目混珠的。
怎么把最相关的那一条排到第一位?

这就需要 Rerank 模型 出场了。

Rerank 模型就像一个严格的考官。
它会把“问题”和“候选段落”放在一起,逐个打分(0-100 分)。

比如:

  • 问题:“年假怎么休?”
  • 段落 1:“员工每年有 5 天年假……" -> 考官打分:95 分(完美!)
  • 段落 2:“请假流程包括事假、病假……" -> 考官打分:60 分(相关,但不是正解)
  • 段落 3:“公司考勤制度规定……" -> 考官打分:40 分(沾边,太泛)

最后,我们只取分数最高的那个段落交给大模型。 准确率瞬间提升 30% 以上!

常用的 Rerank 模型:

  • BGE-Reranker-v2(北京智源,中文效果极佳)
  • Cohere Rerank(国外最强,但收费)
  • Jina Rerank

🛠️ 解法三:元数据过滤(Metadata Filtering)

还记得第 2 篇咱们切分 Markdown 时,存下来的 Header 1, Header 2 吗?
那就是元数据。

检索的时候,我们可以给向量数据库下指令: “先帮我过滤出《员工手册》里的段落,然后再在里面找关于‘年假’的内容。”

# Chroma 的元数据过滤示例
collection.query(
    query_texts=["年假怎么休"],
    where={"source": "员工手册.pdf"},  # 只看员工手册
    n_results=2
)

这招在多知识库场景下特别好用。
比如公司有“人事库”、“技术库”、“财务库”。
如果不加过滤,问“怎么请假”可能会把“服务器怎么下线”也检索出来(因为都有“怎么”和“下/休”)。
加上元数据过滤,精准度直接拉满。


💻 综合实战代码

咱们用 LangChain 演示怎么把它们串起来。

假设我们用一个支持混合检索的库(比如 LangChainEnsembleRetriever)。

from langchain.retrievers import EnsembleRetriever
from langchain_community.retrievers import BM25Retriever
from langchain_chroma import Chroma
from langchain_openai import OpenAIEmbeddings  # 或其他 Embedding

# 1. 初始化 Embedding 模型(必须有!)
# 如果你用的是本地模型,可以换成 HuggingFaceEmbeddings
embeddings = OpenAIEmbeddings()  # 或 from langchain_community.embeddings import HuggingFaceEmbeddings

# 2. 初始化向量检索器
vector_store = Chroma(
    collection_name="my_knowledge",
    embedding_function=embeddings,
    persist_directory="./chroma_db"  # 持久化目录
)
vector_retriever = vector_store.as_retriever(search_kwargs={"k": 5})

# 3. 初始化 BM25 关键词检索器
# 需要传入原始文档列表(这里假设 docs 已经加载)
bm25_retriever = BM25Retriever.from_documents(docs)
bm25_retriever.k = 5

# 4. 组合!
# weights 决定谁的话语权大。0.5 表示五五开。
ensemble_retriever = EnsembleRetriever(
    retrievers=[bm25_retriever, vector_retriever],
    weights=[0.5, 0.5]
)

# 5. 使用
retrieved_docs = ensemble_retriever.invoke("Q3 财报数据")

如果有条件,还可以再加一步 Rerank:

from langchain.retrievers import ContextualCompressionRetriever
from langchain.retrievers.document_compressors import CrossEncoderReranker
from langchain_community.cross_encoders import HuggingFaceCrossEncoder

# 加载 Rerank 模型(需要先下载模型)
# 推荐用 BAAI/bge-reranker-base 或 BAAI/bge-reranker-large
reranker = CrossEncoderReranker(
    model=HuggingFaceCrossEncoder(model_name="BAAI/bge-reranker-base"),
    top_n=3  # 只保留最相关的 3 个结果
)

# 包装一下
compression_retriever = ContextualCompressionRetriever(
    base_compressor=reranker,
    base_retriever=ensemble_retriever
)

# 最终结果
final_docs = compression_retriever.invoke("Q3 财报数据")
# 这时候 final_docs 里通常只有最精准的 3 段了!

💡 注意:Rerank 模型需要单独下载,首次运行会自动从 Hugging Face 下载,可能需要几分钟。国内用户建议设置镜像或提前下载到本地。


📊 优化前后对比

阶段 检索方式 准确率 备注
L1 纯向量检索 50% 经常被“意思相近但无关”的内容误导
L2 向量 + 元数据过滤 70% 范围缩小了,准确率提升
L3 混合检索 (Vector + BM25) 85% 关键词命中率高,不怕专有名词
L4 混合 + Rerank 95% 考官把关,去伪存精,效果拔群

📝 总结一下

RAG 想要好用,检索必须强。
别光迷信向量检索,组合拳才是王道。

  1. 1. BM25 补齐了向量对关键词不敏感的短板。

  2. 2. Rerank 像是给检索结果做了一次精筛,把最相关的挑出来。

  3. 3. 元数据过滤 帮你圈定范围,防止跨库误伤。

这三招学会,你的 RAG 系统就已经打败市面上 80% 的半成品了。

资料找齐了,考官也挑好了。
下一篇,咱们聊聊最后临门一脚:Prompt 工程 —— 怎么让模型更好地引用文档?


觉得这篇优化指南干货满满?点个 ,支持我继续更新!

这里给大家精心整理了一份全面的AI大模型学习资源包括:AI大模型全套学习路线图(从入门到实战)、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等,资料免费分享

👇👇扫码免费领取全部内容👇👇
在这里插入图片描述

1. 成长路线图&学习规划

要学习一门新的技术,作为新手一定要先学习成长路线图方向不对,努力白费

这里,我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。可以说是最科学最系统的学习成长路线。
在这里插入图片描述

2. 大模型经典PDF书籍

书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础(书籍含电子版PDF)

在这里插入图片描述

3. 大模型视频教程

对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识

在这里插入图片描述

4. 2026行业报告

行业分析主要包括对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。

5. 大模型项目实战

学以致用 ,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。

在这里插入图片描述

6. 大模型面试题

面试不仅是技术的较量,更需要充分的准备。

在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。

在这里插入图片描述

7. 资料领取:全套内容免费抱走,学 AI 不用再找第二份

不管你是 0 基础想入门 AI 大模型,还是有基础想冲刺大厂、了解行业趋势,这份资料都能满足你!
现在只需按照提示操作,就能免费领取:

👇👇扫码免费领取全部内容👇👇
在这里插入图片描述

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐