跳到主要内容

4.2 RAG 核心机制:文档切分、混合检索与重排

阅读需 8 分钟
wqz
给模型插上“开卷考试”的 U 盘

上一篇我们谈到了 Embedding(4.1 节),它就像一台超级碎纸机兼塑封机,能把一切生涩的人类文字塑封成规整的浮点数指纹。

但这指纹该怎么用? 想象一下,今天你要让一个不懂劳动法常识的 AI(闭卷考生)替你解答:“新员工试用期怎么离职?” 你手头有一本厚厚的员工手册 PDF。我们要做的,就是把这本 PDF 切碎、归档,等到 AI 被提问时,迅速从档案室里抽出一两张纸塞给它,跟它说:“照着这张纸上的内容回答用户。

这就是大名鼎鼎的 RAG(检索增强生成) 完整链路图。我们这就来一步步拆解档案室的入库与出库运作。


1. 拆碎长文:Chunking(文档切分)

不要试图把一整本书强压给大模型,首先受到冲击的是它那昂贵且脆弱的上下文窗口限制(Token Limit),其次,一篇长文扔进去就算没溢出,大模型也往往会得“近视眼”——出现著名的“中间内容丢失(Lost in the Middle)”现象,它记住了书本的开头和结尾,反而忽略了藏在中间段的答案。

这就必须在入库前进行 Chunking(切块)

  • 固定大小切分(Fixed Size Chunking):最粗暴但最常用的手段,比如硬性规定每 500 个字符砍一刀,变成一块“Chunk”。为了防止刚好一刀切断了句子的连贯词缀,通常设定 50 个字符的重叠区(Overlap)。
  • 递归/语义切分(Recursive / Semantic Chunking):一种更人道的方法。脚本先尝试按段落回车符切分,如果段落太大才按句号切分。尽可能保证每一块 Chunk 拥有逻辑上的闭环关联。

这就好比我们在摘抄经典名句。摘抄卡片不能只是干瘪的十个字,最好连同上下文摘录几百字的段落,这便是 Chunking 诞生的初衷:保留知识密度的最小切片单位。 在高级玩法中,甚至还有 Parent-Child Retrieval(父子块检索),用极小的指纹块负责引出索引(更容易命中),但真要给 AI 查阅时则丢回携带了丰富上下文的前后巨大文段(防止 AI 觉得没头没尾)。

[图片占位:(A clean, minimalist technical diagram on a solid white background. Use simple, crisp vector line art, monochrome or with very subtle minimal color accents. Flat design, no 3D effects, no clutter. Draw a large document icon being sliced evenly into three smaller blocks, representing document chunking.)]


2. 检索博弈:查字典与品意境的巅峰对决

把卡片变成 Embedding 灌进数据库后,我们就来到了最重要的检索(Retrieval)环节

2.1 稠密检索 (Dense Retrieval)

利用我们在上一节学到的 向量坐标余弦相似度。它擅长“品意境”。

提问:“怎么跟老板说我不干了?” AI 能精准找到的向量块:“公司员工离职协商指南。”

这叫 稠密检索。不需要文字上的重合,它能精准跨越语义鸿沟!

2.2 稀疏检索 (BM25 关键词匹配)

在狂热的向量时代,传统古典算法 BM25(基于 TF-IDF 的统计改良) 却焕发了第二春。

提问:“如何重装 Windows 11 KB5031455 补丁?” 向量库可能一拍脑门:哎呀这太具体了,可能匹配出一篇《MacOS 更新流程》。 BM25 则会像搜库狗一样:死死咬住“KB5031455”这串极其特殊冷门的特定符码,精准在一篇十年前的机房旧日志中找到那唯一包含这串代码的旧段落。

它极其擅长死磕专有名词、特定货号与人名标识,这叫 稀疏检索

这便是当下 RAG 工业界公认的最佳前线引擎——做两路召回(Hybrid Search)! 一头让向量库凭感觉去捞出 50 篇相关的意境文章,另一头让 BM25 基于关键词再咬住 50 篇死板的强控文章。两堆战利品一合并,这不就万无一失了吗?

[图片占位:(A clean, minimalist technical diagram on a solid white background. Use simple, crisp vector line art, monochrome or with very subtle minimal color accents. Flat design, no 3D effects, no clutter. Draw two distinct arrows side by side merging into one central funnel processing data, representing Hybrid Search.)]


3. 把关裁判:重排序 (Cross-Encoder Reranker)

混合搜索确实万无一失,但这也意味着它打捞上来的废件泥沙俱下(超过 100 块粗糙的 Chunk)。你把 100 块文本全部丢给 LLM 过目,光是电费和 Token 费用就让你欲哭无泪了,而且回答得还不准。

此时我们需要设置前哨检查站——重排序模型 (Reranker)

这是一种专职只干一件事的鉴别器小模型(通常基于 Cross-Encoder 架构结构,而非之前的双塔嵌入)。它的算力开销比较大,你不可能让它去扫描全库的 1000 万篇文章,但是你如果只丢给它刚才前线捞回来的 100 篇嫌疑文,它能以一种极高的洞察精细度,逐字逐句比对用户的原提问与这 100 篇文档:

“这篇虽然提到了电脑,但在说修空调,淘汰!” “这篇虽然关键词没中,但居然在说员工辞推流程?神来之笔!”

大刀阔斧一落,原本的 100 篇被去粗取精,剔除了所有伪相似的噪音,最后只留存那 5 篇拥有王牌精准度的救命文章。 这 5 篇文章,才会连同用户的原提问,最终打包成一段长长的 Prompt(这就是“增强生成”里的“增强”),喂送给最高司令部的基座大模型进行最后的口语化回答(生成)。

[图片占位:(A clean, minimalist technical diagram on a solid white background. Use simple, crisp vector line art, monochrome or with very subtle minimal color accents. Flat design, no 3D effects, no clutter. Draw a messy stack of identical document icons being processed through a small funnel or filter icon, emerging as a neatly organized stack of only three highlighted documents.)]


4. 专职评估体系:Ragas (进阶引读)

现在,你终于调通了一套完整的 RAG 问答管线,领导试用了一番还挺高兴。 但如何客观用数值证明你做的系统是无懈可击的呢?你怎样确保它没有凭空捏造虚假线索(没产生幻觉),且没有漏看检索上来的核心卡片

在业界,我们有一套公认的基于 LLM-as-a-Judge(将在 第 9 阶段 详述机理)理念打磨的专业阅卷器,其开山鼻祖就是 RAG 评估三元组(通常依托 Ragas 或 TruLens 评测框架自动打分)

  1. 上下文相关性 (Context Relevance):评判前线特工——你检索上来的那 5 篇文段里面,是不是全是废话?有没有精确命题?
  2. 答案忠实度 (Faithfulness):评判嘴炮大模型——AI 回答领导的内容,是否百分之百只使用了你递过去的检索小纸条?有没有它利用网上自带记忆凭空猜想脑补加料的现象(最典型的幻觉灾难)?
  3. 答案相关性 (Answer Relevance):评判整体——尽管 AI 态度很好也查了资料,但通篇有没有文不对题地在念洋葱新闻?

这三大维度如同严密的司法防线,一旦某个得分降低,工程师就能迅速定位是该换切分刀法,还是要改前线检索参数。


下一章预告: 至此,通过第四阶段的 RAG 外挂赋能,你的基座大模型已经成功翻阅了内部机密档案库,变为了一台博学的企业专属咨询家。 但这依旧是一种极其被动的局面——只有当用户发问了它才被动去按铃查字典。如果我们要让大模型掌握手眼协调能力,主动连线数据库、自发撰写提问调用函数、甚且独自谋划解决极其庞大冗长的自动化项目群呢? 欢迎来到智能工业时代的顶峰对角:第五阶段——Agent(智能体)与工具调用。


下一章: 5.1 基础引擎:ReAct与Tool Calling

分享这篇文章
Loading Comments...