Fangfei:RAG 入门第二课:从存储到检索,数据是怎么被"用起来"的
Fangfei:RAG 入门第二课:从存储到检索,数据是怎么被"用起来"的
Fangfei:RAG 入门第二课:从存储到检索,数据是怎么被"用起来"的 Fangfei:RAG 入门第二课:从存储到检索,数据是怎么被"用起来"的 Modified March 1 • 能处理同义词、近义词 缺点: 需要模型计算,成本相对较高 🔀 实际用哪种?——混合检索 在真实项目里,这两种方法通常混着用,取长补短: • 关键词检索负责精准匹配,速度快 • 语义检索负责理解语义,覆盖更广 两者结合,既准又稳,这就是「混合检索」。 03 检索完了就完了吗?——召回率的问题 检索完之后,你以为就大功告成了? 还没有。 我们还需要关注一个指标:召回率。 什么是召回率? 一句话解释: 召回率 = 系统实际找到的相关内容 ÷ 知识库里所有相关内容 举个例子: 假设知识库里有 60 本 关于驯鹿图案的产品设计手册。 你发起检索,系统返回了 50 本。但其中真正关于驯鹿图案的,只有 40 本。 那么召回率 = 40 ÷ 60 = 66.7% 意思是:知识库里的相关内容,你只找回来了 66.7%,还有三分之一漏掉了。 召回率越高,说明系统越"完整"——重要的信息不容易被漏掉。 怎么提升召回率? 方法一:使用混合检索 上面已经提到了,用关键词 + 语义双管齐下,覆盖面更广,自然能找到更多相关内容。 方法二:Query 改写(问题改写) 用户的提问有时候太简短或表达不准确,导致检索找不到对应内容。 Query 改写的思路是:把用户的问题"扩展"一下,生成多个相关的子问题,分别去检索,再把结果合并。 比如用户问"怎么退货",系统会自动改写成: • "退货流程是什么?" • "退款政策有哪些规定?" • "换货和退货有什么区别?" 三个问题分别去检索,找到的内容更全面,召回率自然更高。 04 最后一关:结果重排序 好,现在我们已经检索到了一批相关文档。 但这些文档有个问题:排列顺序可能不太对。 为什么排列顺序会有问题? 初步检索时,为了速度快、成本低,通常用的是比较简单的方法。 这种方法虽然能找出相关内容,但打分不一定准确——有时候相关性其实很高的文档,分数反而排在后面。 大模型在生成回答时,会优先参考排在前面的文档。 如果前面的文档相关性不够高,最终的回答质量就会下降。 重排序是怎么解决这个问题的? 重排序 = 用更精准的方法,对初步检索的结果重新打一遍分,让最相关的内容排到最前面。 流程是这样的: 初步检索(快但粗糙) ↓ 返回一批文档(顺序不一定对) ↓ 重排序(精准但慢,只对这批文档操作) ↓ 重新排好顺序的文档(最相关的排最前) ↓ 大模型参考这些文档生成回答 这样做的好处是: • 初步检索负责"广撒网",速度快 • 重排序负责"精挑细选",准确率高 • 两步结合,效率和质量都兼顾了 05 小结:本篇讲了什么? 来回顾一下这篇的核心内容: 06 下篇预告 理论讲了两篇,是不是有点抽象? 后续我们直接动手做—— 用 Coze 搭建一个真实的客服 Demo,把这两篇讲的所有概念全部串起来,让你看见 RAG 在实际项目里是怎么跑起来的。 敬请期待~ 🎉 END 我是Fangfei,一个永远在折腾的普通人 公开我的 AI 学习、思考、成长以及所有的一切 如果觉得文章对你有帮助,欢迎加我:Fangfei kai • 能处理同义词、近义词 缺点: 需要模型计算,成本相对较高 🔀 实际用哪种?——混合检索 在真实项目里,这两种方法通常混着用,取长补短: • 关键词检索负责精准匹配,速度快 • 语义检索负责理解语义,覆盖更广 两者结合,既准又稳,这就是「混合检索」。 03 检索完了就完了吗?——召回率的问题 检索完之后,你以为就大功告成了? 还没有。 我们还需要关注一个指标:召回率。 什么是召回率? 一句话解释: 召回率 = 系统实际找到的相关内容 ÷ 知识库里所有相关内容 召回率 = 系统实际找到的相关内容 ÷ 知识库里所有相关内容 举个例子: 假设知识库里有 60 本 关于驯鹿图案的产品设计手册。 你发起检索,系统返回了 50 本。但其中真正关于驯鹿图案的,只有 40 本。 那么召回率 = 40 ÷ 60 = 66.7% 意思是:知识库里的相关内容,你只找回来了 66.7%,还有三分之一漏掉了。 假设知识库里有 60 本 关于驯鹿图案的产品设计手册。 你发起检索,系统返回了 50 本。但其中真正关于驯鹿图案的,只有 40 本。 那么召回率 = 40 ÷ 60 = 66.7% 意思是:知识库里的相关内容,你只找回来了 66.7%,还有三分之一漏掉了。 召回率越高,说明系统越"完整"——重要的信息不容易被漏掉。 怎么提升召回率? 方法一:使用混合检索 上面已经提到了,用关键词 + 语义双管齐下,覆盖面更广,自然能找到更多相关内容。 方法二:Query 改写(问题改写) 用户的提问有时候太简短或表达不准确,导致检索找不到对应内容。 Query 改写的思路是:把用户的问题"扩展"一下,生成多个相关的子问题,分别去检索,再把结果合并。 比如用户问"怎么退货",系统会自动改写成: • "退货流程是什么?" • "退款政策有哪些规定?" • "换货和退货有什么区别?" 三个问题分别去检索,找到的内容更全面,召回率自然更高。 04 最后一关:结果重排序 好,现在我们已经检索到了一批相关文档。 但这些文档有个问题:排列顺序可能不太对。 为什么排列顺序会有问题? 初步检索时,为了速度快、成本低,通常用的是比较简单的方法。 这种方法虽然能找出相关内容,但打分不一定准确——有时候相关性其实很高的文档,分数反而排在后面。 大模型在生成回答时,会优先参考排在前面的文档。 如果前面的文档相关性不够高,最终的回答质量就会下降。 重排序是怎么解决这个问题的? 重排序 = 用更精准的方法,对初步检索的结果重新打一遍分,让最相关的内容排到最前面。 重排序 = 用更精准的方法,对初步检索的结果重新打一遍分,让最相关的内容排到最前面。 流程是这样的: 初步检索(快但粗糙) ↓ 返回一批文档(顺序不一定对) ↓ 重排序(精准但慢,只对这批文档操作) ↓ 重新排好顺序的文档(最相关的排最前) ↓ 大模型参考这些文档生成回答 这样做的好处是: • 初步检索负责"广撒网",速度快 • 重排序负责"精挑细选",准确率高 • 两步结合,效率和质量都兼顾了 05 小结:本篇讲了什么? 来回顾一下这篇的核心内容: 06 下篇预告 理论讲了两篇,是不是有点抽象? 后续我们直接动手做—— 用 Coze 搭建一个真实的客服 Demo,把这两篇讲的所有概念全部串起来,让你看见 RAG 在实际项目里是怎么跑起来的。 敬请期待~ 🎉 END 我是Fangfei,一个永远在折腾的普通人 公开我的 AI 学习、思考、成长以及所有的一切 如果觉得文章对你有帮助,欢迎加我:Fangfei kai 写在前面 上一篇我们聊了怎么把原始资料变成"知识库"——通过文档解析、清洗和分块,把杂乱的资料整理得井井有条。 但整理完之后呢?这些资料是怎么存起来的?用户提问的时候,又是怎么从里面找到答案的? 这篇我们就来聊聊检索这件事——RAG 最核心的环节之一。 本篇主要讲三个概念: 📌 向量 → 检索方法 → 召回率与重排序 📌 向量 → 检索方法 → 召回率与重排序 搞懂这三件事,RAG 的检索逻辑就通了。 01 先搞懂一个概念:什么是向量? 在聊检索之前,我们需要先引入一个关键概念——向量。 听起来像数学课,别慌,我用大白话解释: 向量,就是一串数字,用来描述一个东西的"特征"。 当两个东西的向量值接近时,说明它们的特征相似。 向量,就是一串数字,用来描述一个东西的"特征"。 当两个东西的向量值接近时,说明它们的特征相似。 举个例子: • 🍎 苹果 和 🍊 橘子 → 都是水果,向量值接近 • ♟️ 象棋 和 ⚫ 围棋 → 都是棋类游戏,向量值接近 • 🍎 苹果 和 ♟️ 象棋 → 完全不同,向量值相差很远 那向量对 RAG 有什么用? 原因很简单:计算机更擅长处理数字,而不是文字。 所以在离线数据处理的最后一步,我们会把所有的文本块都转换成向量,存进一个专门的"向量数据库"里。 存进去之后,特征相似的内容会自动"聚拢"在一起——就像图书馆里同类书籍放在同一个书架上,方便后续快速检索。 02 怎么从知识库里找到答案?——常用两种检索方法 知识库准备好了,用户来问问题了。 RAG 要做的事情就是:从海量的文本块里,找到和用户问题最相关的那几段内容。 这个过程叫检索,主要有两种方式: 🔍 方法一:关键词检索 原理: 直接拿用户输入的词,去知识库里逐字匹配。 比如用户问"退货政策",就去找包含"退货政策"这几个字的文档。 优点: 简单、快、计算成本低 缺点: 太"死板"—— • 用户问"怎么换货",但知识库里写的是"退换货流程",关键词不完全一样,就可能找不到 • 无法理解同义词、近义词 🔍 方法二:语义检索 原理: 把用户的问题也转成向量,然后和知识库里所有文本块的向量做比较,找出语义最相近的内容。 优点: 理解语义,不死板—— • "怎么换货"和"退换货流程"虽然字不一样,但语义接近,照样能找到