Retrieval-Argumented Generation (RAG)–检索增强生成

内容来自B站up主马克的技术工作坊 RAG 工作机制详解——一个高质量知识库背后的技术全流程

检索增强生成主要就做了两件事:

1、先从资料库中检索相关内容

2、 再基于这些内容来生成答案

RAG是目前最常用的AI问答方式之一(2025年)

RAG技术解决了什么问题:

假设有这一个场景,一个用户问你们公司的产品保修政策是什么。每次回答都要带着公司的手册给LLM,会导致下面的问题

1.模型无法读取所有内容,上下文窗口大小有限制。 模型容易读了后面忘了前面

2.模型推理成本高,输入越多,成本越高)

3.输入越多,模型需要消化的内容越多,模型推理速度就越慢

所以RAG系统就是为了解决这一个问题,不用让模型每次都读取到所有的内容,考虑只用把文档中相关内容发给模型就可以节约计算成本和,带着用户的问题和答案来回复用户

RAG的基本运行流程:

  1. 分片 (用户提问前)
  2. 索引(用户提问前)
  3. 召回(用户提问后)
  4. 重排(用户提问后)
  5. 生成(用户提问后)

第一步RAG会把文档切分成多个片段

如何分片以及如何选择相应的分片都是需要一定研究 ,切片分的好 模型回答的问题就会非常好,反之则可能非常差。

2.在多个片段中寻找问题相关内容。研究如何寻找到相关片段

分片方式大致基本有四种还有更多的切分方式:

  • 按字数
  • 按段落
  • 按章节
  • 按页码
  • 按语义

第二步索引:

一共有两步

  1. 通过Embedding将片段文本转化为向量
  2. 将片段文本和片段向量存入向量数据库

向量是什么:就是有大小有方向的量,一堆浮点数的数组。

Embedding是什么:

就是把文本转换成向量的过程。一个文本可能会有512维 768维 1536维的一个向量,维度越大所包含的信息也就会越丰富。每一个维度可能代表了这个词、文本、token的某种语义特征,某几维在编码地理信息,某几维在编码情感信息,某几维在编码饮食类别等等。人类一般很难解释每一个维度,但是LLM能学习这些特征信息通过海量的数据训练,去捕捉这里这里面的向量关系,对应的语义关系。

为什么需要向量数据库和向量,就是将自然语言转换成数学空间的语义表示。含义相近的文本,转换成向量后,所在的区域也是相近的。

这一步的操作就是就会是需要需考虑Embedding模型的选择,考虑去github的排行榜看看链接

向量数据库:

文本通过Embedding向量化后存入向量数据库,同时原始文本也会存入向量数据库的。 通常以JSON的为主要的交互格式来存储这些数据

索引总结:

这里的前提就是文本在先前就进行了切片 每一个片段都进行Embedding向量化

  1. 通过Embedding将片段文本转化为向量
  2. 将片段文本和片段向量存入向量数据库

第三步召回:

召回就是搜索与用户问题相关的片段过程,通过给每个片段打上关键词,标题能让RAG快速返回一些相似片段

搜索与问题相似度较高的结果,召回的结果就是10个与用户问题最最相关的片段,就是返回最相似的一批片段。这个10这个数字可以是人为设置的。

计算向量相似度,similarity(用户问题向量,片段向量)依次将所有的片段向量放入到向量相似度的公式中,计算得出来向量相似度,然后得出来前10个最高的片段

计算向量相似度的计算方式基本三种:余弦相似度,欧氏距离,点积

特点:成本低,耗时短,准确率低,适合初步筛选

余弦相似度计算方式:

计算两个向量之间家教的cos值,夹角越小,值越大

欧氏距离算法,计算AB两点之间的直线距离

点积:通过代数方式衡量两个向量相似度的方法。点积不仅考虑两个向量之间的方向关系,还要考虑他们的长度

举例:首先从A引入关于B的垂线

得到垂线与B向量的交点,交点到原点的距离与B向量长度的乘积,乘积越大就代表相似度越高。

如果两个向量方向相同,向量越长,点积值越大;方向相反(与另一向量夹角大于90度),得到的乘积是负的,垂直时点积为0。

第四步重排rerank:

在召回结果中进行重排,再挑几份与用户问题最相似的。做的视频跟召回是一样的

召回是从所有的片段中里面挑出来10份最相似的,重排rerank只是在10份里面再挑出来3份与用户相似度最相似的最为重排的结果。

这里会有一个问题,为什么不直接在召回阶段直接挑三个不就好了。原则上是可以直接挑出来的,但是召回没有召回+重排的方案好。之所以一定是召回后+重排,而不是直接在召回时就挑少几份,主要还是因为重排与召回阶段在计算相文本似度计算逻辑存在差异。

召回:

向量相似度计算,余弦相似度,欧氏距离,点积 他们的特点都是成本低,耗时短,准确率低。适合做初步筛选,也就是在短时间内把上千条片段的相似度数值都计算出来从中挑出来10个最高的。

重排:

使用cross-encoder的模型计算每一个片段与用户问题的相似度,相对而言成本高,耗时长,但是准确率会更高。适合场景是精挑细选

这类似于公司挑选人才,公司面试一共是分为两个环节,一个是简历初筛(召回),一个是面试(重排)

第五步生成

生成的过程就是,生成答案,现在我们有了用户问题,也有了用户问题的参考资料,我们就可以将这两部分一起发给大模型,让它根据片段内容来回答用户,到此整体流程就结束了。

RAG的整体流程

准备部分(用户提问前):

分片+索引实现知识库构建,将数据进行分片,对所有分片后的数据进行向量化,向量化后存入向量数据库中。这一切都是发生在用户提问问题之前的准备工作。

召回+重排+生成 (用户问问题之后):

将用户的问题进行向量化,然后召回步骤查询筛选向量库中相似度较高的文本,再利用cross-encoder重排过滤筛筛选相似度较高的文本,最后将筛选得到的文本+用户的问题发给大模型。

评论

发表回复

目录