乐于分享
好东西不私藏

海量文档怎么"搜"出有用的?检索器全解

海量文档怎么"搜"出有用的?检索器全解

海量文档怎么"搜"出有用的?检索器全解

吴恩达新课《RAG》解读 · 第 2 篇(共 10 篇)

引子:用户不会写 SQL

上一篇我们说,RAG 靠检索器从知识库里"找资料"递给 LLM。听起来简单——检索嘛,数据库不早就干这个?

但 RAG 的检索器面对的是一种全新的难题:用户不会给你写 SQL

他们像跟人聊天一样丢过来一句"温哥华酒店这个周末怎么这么贵?"——既没关键词列表,也没结构化字段。而你的知识库里堆着的是邮件、备忘录、医学期刊、产品手册……全是给人看的,不是给机器搜的。检索器却要在零点几秒内,从这堆"乱糟糟"的文本里挑出最相关的几段。

这一篇,我们看检索器是怎么做到的。

一、检索器到底在干什么

一句话:接到提示 → 从知识库里找出最能帮 LLM 回答的文档 → 返回。

但"相关"这个词,有两种完全不同的理解方式,由此引出检索器的两大主力技术:

  • • 字面相关:文档里出现了提示中的词 → 关键词搜索
  • • 意思相关:文档表达的含义和提示接近 → 语义搜索

再加一个辅助手段:

  • • 条件过滤:只保留满足某些硬性条件的文档 → 元数据过滤

现代检索器几乎都是把这三者组合起来用,叫混合搜索(hybrid search)

二、三大技术一览

用户提示
关键词搜索字面匹配
语义搜索意思匹配
元数据过滤权限/区域/时间等
合并重排RRF 倒数排名融合
返回 Top-K 文档

下面挨个说。

1. 关键词搜索(keyword search)

最古老也最稳:文档里出现了提示中的关键词,就相关。这是搜索引擎用了几十年的方法,成熟、快、可解释。

它尤其擅长匹配专有名词:用户搜"BM25""Transformers""产品 SKU-12345",关键词搜索能精准命中。

弱点:只认字面,不懂同义。"happy"和"高兴"、"Python 语言"和"蟒蛇",它分不清。

2. 语义搜索(semantic search)

用嵌入模型(embedding model)把文本变成向量,按"意思有多接近"来匹配

它正好补关键词的短板:用户问"怎么在家做纽约披萨",能找到讲" Homemade pizza recipe "的文档——一个词都不一样,但意思对上了。

弱点:算力更贵、更慢,而且对精确术语不如关键词准。

3. 元数据过滤(metadata filtering)

注意,它不是搜索,是筛选。按文档的硬性属性剔除:只看 2024 年的、只看本部门的、只看自己有权限的……

它做不了"找相关",但能做"划范围"。而且它是**唯一能严格保证"某些文档绝不被返回"**的手段——比如权限控制,必须靠它,不能靠语义那种"大概其"的匹配。

关键词 + 语义是"找得准",元数据是"挡得死"。缺一不可。

三、为什么要把它们组合起来

单独用一个都不够好:

场景
关键词
语义
元数据
搜精确产品名/术语
✅ 强
⚠️ 一般
搜同义/换种说法
❌ 找不到
✅ 强
严格权限/区域控制
❌ 做不到
❌ 做不到
✅ 唯一可靠

所以生产级检索器的标准做法是 hybrid search:关键词和语义并行各搜一批(比如各 50 条),用元数据过滤掉不该出现的,再用一个叫 **RRF(Reciprocal Rank Fusion,倒数排名融合)**的算法把两份排名合成一份,取最前面的 Top-K 返回。

RRF 的细节、以及怎么调关键词和语义的权重,我们下一篇会展开。

四、检索器长在哪

在完整的 RAG 系统里,检索器是夹在用户和 LLM 之间的一环:

用户提示
检索器
知识库
增强提示
LLM
回答

用户感受不到它——还是输入问题、得到回答。只是回答背后,多了一次"找资料"的旅程。代价是多了一点延迟,换来的是回答准确、最新、有上下文

小结与预告

这一篇讲了:

  • • RAG 检索器的难题:把"人话提问"和"乱糟糟文档"匹配上
  • • 三大技术:关键词(字面)、语义(意思)、元数据(条件)
  • • 生产实践:三者组合成 hybrid search,靠 RRF 融合排名

但还有些关键问题没回答:关键词搜索内部到底怎么打分?语义搜索又怎么把"意思"变成可计算的数字? 这些是检索器最硬核的部分。

下一篇我们就钻进去,把 TF-IDF、BM25、向量相似度、混合搜索的 RRF 公式一个个讲透——会带公式和代码,做好硬核准备。


本文基于 DeepLearning.AI《RAG》课程整理。下一篇《关键词 vs 语义,搜索到底用哪个?》即将更新。