跳到主要内容

3 篇博文 含有标签「chunking」

查看所有标签

给模型插上“开卷考试”的 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

ai学习ragchunkingrerankhybrid-search阅读需 8 分钟

解决大模型的最终幻觉

无论提示词(Prompt)写得多么天花乱坠,大模型依然有两个无法凭借算力解决的死穴:记忆停滞(只记得训练截止日期前发生的事),以及私有壁垒(绝对不可能读过你们公司内网的财报)。

如果你问一个不在它预训练数据里的问题,它就会一本正经地胡说八道(产生幻觉)。怎么破?那就不要让它去靠死记硬背猜答案,而是把参考书翻开摆在它面前,让它做阅读理解

这就是 RAG (Retrieval-Augmented Generation,检索增强生成)。


1. 什么是 RAG?(开卷考试范式)

RAG 的逻辑极其朴素,它就像是一个外包客服的工作流程:

  1. 用户提问:“我们公司这个月的报销标准降了吗?”
  2. 检索 (Retrieve):客服一愣(因为他没背过公司财报),转身冲进公司的资料档案室,通过电脑系统检索搜出了包含“报销标准”的相关规定。
  3. 增强 (Augment):客服把这些规定和用户的问题拼在一起:“根据这篇文档显示,这个月差旅报销降了50块钱。现在用户的原问题是:报销标准降了吗?”
  4. 生成 (Generate):大模型发挥它卓越的总结能力,输出最终答案:“您好,根据最新规定,本月报销标准已下调。”

这就是 RAG:让大模型停止猜测,强制它转为进行严格带引用的阅读理解

[图片占位:(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. Abstract visual.)]


2. 第一道关卡:文本切分 (Chunking)

在 4.1 章节中,我们讲过 Embedding 模型能把文本转成坐标。但在把公司的知识变坐标存进库之前,你必须面临一个极其现实的物理难题。

你绝不能把一整本厚达 1000 页的《员工手册》直接打包存成一个单独的向量坐标。大模型的注意力机制在面对过量信息时容易失焦,且向量维度有限,几万字挤在一个坐标点里,其特征信息会被彻底稀释成一锅粥。你必须把它切碎(Chunking)

切碎文本远不是用刀一分为二那么简单,目前工程落地中有几种截然不同的切分哲学。

最粗暴的做法是固定大小切分。比如设定每 500 个字无情地切一刀。这种方法写代码最快,但也最容易酿成惨剧:它极有可能把一句重要的话从中间拦腰斩断,导致前半截留在上一个区块,后半截落在下一个区块,让检索系统捞出来的全是残暴的断头语的垃圾数据。

为了避免断章取义,聪明一点的做法是重叠切分 (Overlap)。在切的时候设定 50 个字的重合区,就像铺瓦片一样,上一片和下一片叠在一起,从而拼死保住关键概念在边界处不丢失。

而目前真正考究的方案则是语义树切分。它放弃了死板的字数限制,而是让脚本去精准识别文章里的 Markdown 标题层级(比如 ## 或是段落换行符),顺着作者原生的逻辑脉络一刀一刀剥离,保证切下来的每一块肉都是语义连贯、有头有尾的独立章节。


3. 把坐标锁入武器库:向量数据库

把海量的碎片存成向量坐标后,我们需要一个专门对抗“几十亿浮点数坐标大搜索”的基建。如果在这种高维空间里还想用传统 MySQL 敲一句 where name = '张伟',这种远古的匹配引擎在动辄几百维的浮点矩阵前会当场宕机。

这时,向量数据库迎来了它的繁荣时代。

对于想要在自己笔记本上快速跑通 RAG 概念的独立开发者,像 ChromaFAISS 这种本地兵器绝对是首选。它们极其轻量,一个 pip 安装命令就能拉起,非常适合个人用来打造一本私人电子绝密日记的检索引擎。

当你步入企业级开发,并且不愿意养一帮运维团队天天盯着服务器发愁时,各大云厂商趁机推出了 Pinecone 这类云原生托管库。你只管把向量坐标往云端一扔,查询速度和集群扩容的脏活他们全包了,代价仅仅是每个月账单上的那几串美元数字。

真正的百星大厂或是对数据保密极度苛求的金融机构,则会毫不犹豫地在物理机房部署 MilvusQdrant 这类重量级的开源企业版大杀器。它们不仅能扛住十亿量级规模的深海搜索,还能完美跑在多张 GPU 卡上实现暴力的硬件加速查询。


有了库,碎片也切好了,当用户一句极度口语化的提问抛过来时,怎么把最相关的碎片捞出来?这引发了古典检索派和现代向量派的长久血战。

在纯粹的**稠密检索(Dense Retrieval / 向量搜索)**眼中,它极度擅长体会“言外之意”。当你搜索“苹果公司”时,由于它在多维空间里的坐标离“库克”极近,它能极其聪明地把只提了库克的文章给捞回来。但它的软肋同样致命:当你搜索极度生僻且毫无语义关联的商品代号(比如“XM-99型工业齿轮”)时,Embedding 模型由于没怎么见过这个词,经常会把它映射到不知所云的角落里彻底抓瞎。

而老牌搜索引擎的基石——**稀疏检索(Sparse Retrieval / 如 BM25)**刚好是它的互补反面。它完全不懂什么是语义,它就是一个死磕极端字面比对的偏执狂。搜“开心”绝对找不到“喜悦”,但若是让它在百万字档里去找那串硬骨头代号“XM-99”,它能精确到标点符号一抓一个准。

经过无数次翻车与重构,目前的工业界已将这两种路径完美合体。混合搜索 (Hybrid Search) 成为了所有 RAG 系统的最终正解。系统会同时派出两路大军,一路用向量撒网捕捞大概意思,一路用 BM25 死抠专有名词缩写,最后加权把两边的战利品揉在一起,极大地拔高了知识库的命准率天花板。


5. 最后一道大门:重排序 (Reranker)

假设混合检索辛辛苦苦给你捞回来了 50 块潜在的碎片。你能把这 50 块碎片全塞给大模型吗? 绝不能。这不仅会耗费极度昂贵的 Token 算力账单,更致命的是,大模型那原本就极其有限的跨度注意力(Attention)会被垃圾信息严重冲淡,极易抓错重点。

因此,在文档送入大模型口中之前,必须设立最后一位无情的打分裁判:Cross-Encoder Reranker(交叉编码重排序)

与之前只需要算个向量坐标方向的方法不同,Reranker 要求极高,它会不厌其烦地把“用户的原问题”和每一块碎片放在一起,极其死磕地跑一遍深度的双向阅读理解,最终给出一个精确到小数点的 0 到 1 的相关度打分。在这把锋利的筛子过滤下,90% 的浑水摸鱼碎片当场被斩落马下,最终只有得分最高的那 3 到 5 块最纯正的上下文才会被谨慎地喂给大模型。

这就是现代 RAG 极其经典的心法铁律:混合召回负责把网撒得又大又广,而重排序裁判则负责挥舞剔骨尖刀,留下那仅存的精华核心。


下一章预告: 基础的 RAG 链路已经跑通。但随着用户问题的日益魔幻刁钻,简单的“关键词撞库”和甚至引入了重排序也还是无法搜出真正有用的信息。 当用户的隐晦问法甚至连正确的搜索词都不带时,怎么把埋藏在地底的上下文挖出来? 4.3 RAG进阶路线:召回黑科技与长文本博弈,我们将深入了解多路查询、大预言家伪造扩写等惊艳的业界极客思路。

ai学习rag向量检索chunking混合检索阅读需 8 分钟

解决大模型的最终幻觉

无论提示词(Prompt)写得多么天花乱坠,大模型依然有两个无法凭借算力解决的死穴:记忆停滞(只记得训练截止日期前发生的事),以及私有壁垒(绝对不可能读过你们公司内网的财报)。

如果你问一个不在它预训练数据里的问题,它就会一本正经地胡说八道(产生幻觉)。怎么破?那就不要让它去靠死记硬背猜答案,而是把参考书翻开摆在它面前,让它做阅读理解

这就是 RAG (Retrieval-Augmented Generation,检索增强生成)。


1. 什么是 RAG?(开卷考试范式)

RAG 的逻辑极其朴素,它就像是一个外包客服的工作流程:

  1. 用户提问:“我们公司这个月的报销标准降了吗?”
  2. 检索 (Retrieve):客服一愣(因为他没背过公司财报),转身冲进公司的资料档案室,通过电脑系统检索搜出了包含“报销标准”的相关规定。
  3. 增强 (Augment):客服把这些规定和用户的问题拼在一起:“根据这篇文档显示,这个月差旅报销降了50块钱。现在用户的原问题是:报销标准降了吗?”
  4. 生成 (Generate):大模型发挥它卓越的总结能力,输出最终答案:“您好,根据最新规定,本月报销标准已下调。”

这就是 RAG:让大模型停止猜测,强制它转为进行严格带引用的阅读理解

[图片占位:(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. Abstract visual.)]


2. 第一道关卡:文本切分 (Chunking)

在 4.1 章节中,我们讲过 Embedding 模型能把文本转成坐标。但在把公司的知识变坐标存进库之前,你必须面临一个极其现实的物理难题。

你绝不能把一整本厚达 1000 页的《员工手册》直接打包存成一个单独的向量坐标。大模型的注意力机制在面对过量信息时容易失焦,且向量维度有限,几万字挤在一个坐标点里,其特征信息会被彻底稀释成一锅粥。你必须把它切碎(Chunking)

切碎文本远不是用刀一分为二那么简单,目前工程落地中有几种截然不同的切分哲学。

最粗暴的做法是固定大小切分。比如设定每 500 个字无情地切一刀。这种方法写代码最快,但也最容易酿成惨剧:它极有可能把一句重要的话从中间拦腰斩断,导致前半截留在上一个区块,后半截落在下一个区块,让检索系统捞出来的全是残暴的断头语的垃圾数据。

为了避免断章取义,聪明一点的做法是重叠切分 (Overlap)。在切的时候设定 50 个字的重合区,就像铺瓦片一样,上一片和下一片叠在一起,从而拼死保住关键概念在边界处不丢失。

而目前真正考究的方案则是语义树切分。它放弃了死板的字数限制,而是让脚本去精准识别文章里的 Markdown 标题层级(比如 ## 或是段落换行符),顺着作者原生的逻辑脉络一刀一刀剥离,保证切下来的每一块肉都是语义连贯、有头有尾的独立章节。


3. 把坐标锁入武器库:向量数据库

把海量的碎片存成向量坐标后,我们需要一个专门对抗“几十亿浮点数坐标大搜索”的基建。如果在这种高维空间里还想用传统 MySQL 敲一句 where name = '张伟',这种远古的匹配引擎在动辄几百维的浮点矩阵前会当场宕机。

这时,向量数据库迎来了它的繁荣时代。

对于想要在自己笔记本上快速跑通 RAG 概念的独立开发者,像 ChromaFAISS 这种本地兵器绝对是首选。它们极其轻量,一个 pip 安装命令就能拉起,非常适合个人用来打造一本私人电子绝密日记的检索引擎。

当你步入企业级开发,并且不愿意养一帮运维团队天天盯着服务器发愁时,各大云厂商趁机推出了 Pinecone 这类云原生托管库。你只管把向量坐标往云端一扔,查询速度和集群扩容的脏活他们全包了,代价仅仅是每个月账单上的那几串美元数字。

真正的百星大厂或是对数据保密极度苛求的金融机构,则会毫不犹豫地在物理机房部署 MilvusQdrant 这类重量级的开源企业版大杀器。它们不仅能扛住十亿量级规模的深海搜索,还能完美跑在多张 GPU 卡上实现暴力的硬件加速查询。


有了库,碎片也切好了,当用户一句极度口语化的提问抛过来时,怎么把最相关的碎片捞出来?这引发了古典检索派和现代向量派的长久血战。

在纯粹的**稠密检索(Dense Retrieval / 向量搜索)**眼中,它极度擅长体会“言外之意”。当你搜索“苹果公司”时,由于它在多维空间里的坐标离“库克”极近,它能极其聪明地把只提了库克的文章给捞回来。但它的软肋同样致命:当你搜索极度生僻且毫无语义关联的商品代号(比如“XM-99型工业齿轮”)时,Embedding 模型由于没怎么见过这个词,经常会把它映射到不知所云的角落里彻底抓瞎。

而老牌搜索引擎的基石——**稀疏检索(Sparse Retrieval / 如 BM25)**刚好是它的互补反面。它完全不懂什么是语义,它就是一个死磕极端字面比对的偏执狂。搜“开心”绝对找不到“喜悦”,但若是让它在百万字档里去找那串硬骨头代号“XM-99”,它能精确到标点符号一抓一个准。

经过无数次翻车与重构,目前的工业界已将这两种路径完美合体。混合搜索 (Hybrid Search) 成为了所有 RAG 系统的最终正解。系统会同时派出两路大军,一路用向量撒网捕捞大概意思,一路用 BM25 死抠专有名词缩写,最后加权把两边的战利品揉在一起,极大地拔高了知识库的命准率天花板。


5. 最后一道大门:重排序 (Reranker)

假设混合检索辛辛苦苦给你捞回来了 50 块潜在的碎片。你能把这 50 块碎片全塞给大模型吗? 绝不能。这不仅会耗费极度昂贵的 Token 算力账单,更致命的是,大模型那原本就极其有限的跨度注意力(Attention)会被垃圾信息严重冲淡,极易抓错重点。

因此,在文档送入大模型口中之前,必须设立最后一位无情的打分裁判:Cross-Encoder Reranker(交叉编码重排序)

与之前只需要算个向量坐标方向的方法不同,Reranker 要求极高,它会不厌其烦地把“用户的原问题”和每一块碎片放在一起,极其死磕地跑一遍深度的双向阅读理解,最终给出一个精确到小数点的 0 到 1 的相关度打分。在这把锋利的筛子过滤下,90% 的浑水摸鱼碎片当场被斩落马下,最终只有得分最高的那 3 到 5 块最纯正的上下文才会被谨慎地喂给大模型。

这就是现代 RAG 极其经典的心法铁律:混合召回负责把网撒得又大又广,而重排序裁判则负责挥舞剔骨尖刀,留下那仅存的精华核心。


下一章预告: 基础的 RAG 链路已经跑通。但随着用户问题的日益魔幻刁钻,简单的“关键词撞库”和甚至引入了重排序也还是无法搜出真正有用的信息。 当用户的隐晦问法甚至连正确的搜索词都不带时,怎么把埋藏在地底的上下文挖出来? 4.3 RAG进阶路线:召回黑科技与长文本博弈,我们将深入了解多路查询、大预言家伪造扩写等惊艳的业界极客思路。

ai学习rag向量检索chunking混合检索阅读需 8 分钟