Bili-Docs
技术工具AI 应用

20分钟速成 RAG & 向量数据库核心概念 【小白学AI系列 -1 】

视频深入浅出地讲解了RAG(检索增强生成)的工作原理及其在解决AI幻觉、降低成本方面的核心优势。

UP主: Jim大表哥2025 · 时长: 20:03 · 🔗 B站原视频

发布: 2025-01-26 · 收录: 2025-03-25

标签: RAG · 向量数据库 · 大语言模型 · AI科普 · 检索增强生成

开场:AI 一边惊艳,一边让人抓狂

你一定听过这样的声音:家人们太炸裂了,就在刚刚,OpenAI 突然发布目前最强大模型,我整个人都惊呆了,又一次突破 AI 极限,拿出王炸模型,直达人类智能水平。

但你也常常听到另外一种怀疑的声音:吹什么牛逼,GPT 一本正经地胡说八道。我又不是没有见过 AI,就是资本炒作,骗我一次可以,休想骗我第二次。

那么真相究竟是什么?一方面 AI 展现出了令人惊叹的强大能力,仿佛无所不能;另一方面它又时不时让人抓狂。这种看似矛盾的现象,恰恰反映了当下 AI 发展的真实面貌。

AI 幻觉:GPT 胡说八道的根源

GPT 胡说八道现象,其根源在于 AI 的幻觉问题,也就是业界所称的 AI hallucination 现象。

AI 出现幻觉是由多种原因导致的,其中一个主要因素是它的工作原理:概率生成机制。在生成文本时,大型语言模型依赖统计概率来预测下一个最可能的词语,而不是基于事实进行查询,这可能导致信息错误。

此外,AI 的回答局限在训练数据的范围内。大模型并不掌握你的个人信息或公司内部的私有信息,对于超出训练数据范围的问题,就容易胡说八道。现阶段基于 Transformer 架构的模型,还无法彻底杜绝 AI 幻觉。

不过,给大模型外挂知识库、补足其知识短板,就能有效减少 AI 幻觉问题,这一方法就是 RAG。

RAG 是什么:检索增强生成

RAG 的全称是 Retrieval Augmented Generation,检索增强生成。它是一种 AI 框架,通过将大语言模型与外部信息源相整合,来提升模型的输出质量。

RAG 会从外部知识库中检索相关的上下文(context),并将这些信息连同用户的问题一起传递给大语言模型,从而提高输出的准确性和可靠性。

用客服机器人举例:RAG 的大致工作流程

以智能聊天客服机器人为例。假设你是一家汽车公司的高管,希望创建一个客户支持聊天机器人,回答用户关于产品规格、故障排除、保修信息等方面的问题。

用户提出一个问题:汽车中控显示屏出现故障怎么办?客服机器人借助 RAG 技术准确回答了用户的问题,它是这么做到的:

  1. 用户提出问题后,系统先将问题转化为向量表示。
  2. 随后在向量数据库中进行相似性搜索。向量数据库中存的是外部知识库信息,比如公司内部产品信息、特定项目的专属资料等,这些往往是大模型原生状态下无法知晓的。
  3. 需要注意:向量数据库里存的并不是外部知识库的原始内容,而是把知识经过一系列处理转化后得到的向量数据。
  4. 系统检索出相关信息后,把它作为上下文相关信息(context)来使用。
  5. 这些 context 会被整合进提示词模板,用户问题也会被嵌入提示词模板内,与 context 相结合,形成一个新的提示词。
  6. 新提示词发送到大语言模型,利用其推理和文本生成能力生成答案,再返回给用户。

RAG 的核心好处:少幻觉、更新快、成本低

RAG 带来的主要好处包括:

  1. 能减少幻觉问题。
  2. 能为大语言模型注入最新资讯及特定领域的关键信息,帮助模型生成更精准、更贴合需求的回答。
  3. 在实际应用中,模型微调(fine-tuning)不仅成本高昂,而且每当模型更新时都要重新来一遍。相比之下,RAG 是一种高效、低成本的方案,因此成为推动 AI 技术落地实施的关键手段之一。

RAG 流程拆解:文档处理、分块、嵌入、入库

RAG 工作流程的首要步骤,是对知识库内各类格式的文档(如 PDF、Word、Wiki 等)进行处理。

在 RAG 流程中,对知识库文档进行分割是至关重要的一步。文档分割的质量,直接决定检索的准确性和生成效果。将文本分割成有意义片段的过程叫做文本分块(text chunking)。

这些文本块会由 embedding model(嵌入模型)转换为向量。嵌入模型是一种机器学习模型,可以将高维输入数据(如文本、图像)转换为低维向量。在 RAG 中,嵌入模型将文本块转换成向量,这些向量捕捉了文本的语义信息,从而支持在海量文本库中检索相关内容。

可以使用不同模型生成向量嵌入,例如 OpenAI 的 text-embedding-3-large。不同模型生成的向量数值可能会有所不同。

向量嵌入是什么:用数字表示语义

向量嵌入(vector embedding)是用一组数值表示的数据对象,在多维空间中捕捉文本、图像或音频的语义和关联,让机器学习算法更轻松地处理和解读。

举个例子:I love tennis 这句话,先转成若干 token,再用 embedding model 生成 embedding。所谓向量,就是一个数字数组,每个数值表示对象在某个维度上的特征或属性。

这些 embedding 能用来做向量搜索(也叫相似性搜索)。在向量空间中,我们寻找与查询向量距离最近的邻居,这些邻居就是与查询最相似的对象。

比如把 cat、kitty、apple 转成向量后,你会发现 cat 和 kitty 的数值很相近,语义上也相似;kitty 和 apple 数值差异明显,语义上不相似。相似的对象在向量空间里会靠得更近,不相似的会更远。

通常 embedding 有数百甚至数千维。为了可视化,会用 PCA 之类的方法把维度从 2048 维降到 3 维,才能在图上看到不同类别形成的簇。

向量数据库是什么:存向量,用来做相似性搜索

这些 embedding 存储在向量数据库中。

向量数据库是一种专门用于存储和检索高维向量数据的数据库,主要用于处理相似性搜索相关任务。它能够存储海量高维向量,这些向量可以表示数据对象的特征,也可以作为 AI 系统的长期记忆库。

目前有一些专业厂商提供高性能向量数据库解决方案,例如 Pinecone 等。向量数据库里存的向量,主要由非结构化数据通过嵌入模型转化而来。

非结构化数据如文本、视频、音频,占全球数据的大约 80%,通常来源于人类生成内容,不易以预定义格式存储。这类数据转换为向量嵌入后,可以在向量数据库中有效存储、管理和检索。结构化数据则以表格形式存在,与非结构化数据形成对比。

向量数据库 vs 传统数据库:语义检索 vs 精确匹配

你可能会问:向量数据库和传统数据库有什么区别?

传统数据库主要用于存储结构化数据,数据以行和列组织,适用于存储明确的数据类型,如整数、字符串、日期等。它通过精确匹配关键词来检索数据,适用于结构化数据的高效查询。

向量数据库专注于存储和检索高维向量数据,通常用于处理非结构化数据(图像、文本、声音)经过特征提取后的向量表示。它侧重于相似性搜索,通过语义理解来检索相关结果,不依赖精确匹配,对拼写错误和同义词有较好的包容性。

Retrieval:RAG 里的“检索”到底在干什么

回到 RAG 流程:当用户问一个问题后,问题也会通过嵌入模型转换成向量(vector embedding),捕捉问题的语义特征。系统将该向量与向量数据库中的其他向量进行比较,执行相似性搜索,找到最相关的数据条目。

在向量数据库中检索与用户问题相关的信息,这个过程就叫检索(Retrieval)。Retrieval Augmented Generation 这个名字的首字母 R 就来源于此。

检索的本质是在向量空间中寻找与查询向量最相似的邻居,通过计算查询向量与数据库中其他向量之间的距离,找到最近邻并返回最相关的对象。

例如 wolf 和 dog 在向量空间中靠得很近;cat 也和 dog 有一定相似性;而苹果、香蕉等水果词彼此更接近,但和动物词汇距离很远。通过这种基于相似度的搜索,我们可以超越简单关键词匹配,找到语义相关内容。

相似度怎么衡量:欧式距离、余弦相似度、点积

问题来了:如何衡量向量嵌入的相似性?怎样计算两个向量之间的距离?

相似性向量搜索中,常用的度量指标包括欧式距离、余弦相似度、点积(dot product)。

余弦相似度通过计算两个非零向量夹角的余弦值来衡量相似性,常用于基于文本的数据。点积计算的是两个向量模长乘积与夹角余弦值的乘积,会受到向量长度和方向的影响。

余弦相似度的优势在于:即使两份文档长度不同导致欧式距离较远,它们的夹角仍可能很小,从而具有较高的余弦相似度,因此在自然语言处理领域应用很广。

余弦相似度的值范围是 -1 到 1:

  • 1 表示两个向量方向完全一致(非常相似)
  • 0 表示正交(无相关性)
  • -1 表示方向相反

夹角越小,余弦值越高,相似性越大。比如狗和狼向量夹角比狗和鸭子更小,所以狗和狼的余弦相似度更接近 1,而狗和鸭子更接近 0。

Top-K 与重排序:把最相关的片段挑出来

在检索阶段,系统会从海量文档或数据集中找出与用户查询相关的内容,并筛选出排名靠前的 K 个文本片段(Top K text chunks)。

接下来,系统会在这些 Top K 文本片段基础上,根据与用户查询的相关性和上下文适配度进一步重新调整排序,这一步叫做重排序(re-ranking)。

例如系统检索到 10 个候选文本块,但初始排序并不最优,这 10 个会送入重排序模型(reranking model)重新排序。之后从重新排序结果里筛选出排名靠前的 Top N。比如原本第 7、第 10 的文本块,重排后进入了 Top 5。

这些重排序后的文本将作为 context 发送给大模型,用于提升整体响应质量。

Prompt Template:把 context 和问题拼成新提示词

重排序过的文本作为 context,被嵌入到提示词模板中,与用户的问题相结合,构建出一个新的提示词。

模板里通常会包含类似指令:请根据下面的 context 回答问题;如果没办法依据给出的信息来回答,请回复“我不知道”。

把外部知识库检索到的 context 和用户问题融合到一个 prompt template 中,再发给大模型,可以增强回答的准确性和可靠性。然后大语言模型(比如 GPT-4o)生成最终答案,再返回给用户。

收尾:下一期讲 ANN 近似最近邻

以上就是对 RAG 和向量数据库的初步介绍。最后再聚焦 RAG 系统的核心模块检索(Retrieval):它的本质是寻找与查询向量最相邻的数据点。

那么问题来了:我们该如何高效地找到这些最近邻?这就不得不提到向量数据库中的核心算法——ANN 近似最近邻算法。它是如何工作的,下期视频再讲。

大家好,我是 JIM 大表哥,我们下期再见。

On this page