认识 RAG:打造垂直领域的私有 AI 知识库
在上一篇,我们了解到了公司私有组件库生成代码的问题,这个问题的本质是:由于大模型的训练数据集不包含
你公司的私有组件数据,因此不能够生成符合公司私有组件库的代码。
于是,我们需要让大模型知道你公司的私有组件库是什么样的,这就是 RAG 技术的应用场景。
在开始实践之前,我们先来认识一下 RAG 技术。
前置名词
Chunk
: 将文本(或其它数据)切分为每一段数据,是一种数据切片的方法。Embedding
: 将每个 chunk 转换为向量,是一种将高维空间的数据(文字、图片等)转换为低维空间的表示方法,后续可以通过匹配向量之间的余弦相似度
来实现语义检索。Vector Database
: 向量数据库,用于存储 Embedding 和原始 Chunk 的数据库(注意:某些 Vector Database 只支持存储 Embedding,需要自行来建立 Embedding 和原始 Chunk 之间的映射关系)。
图示构建 RAG 知识库的过程
原始数据(Resource Data):
- 从各种来源收集原始数据,比如公司私有组件库的文档文本。
分块(Chunking):
- 将资源数据细分为更小的块,称为
Chunk
。
- 将资源数据细分为更小的块,称为
向量化(Embedding):
- 将每个
Chunk
转换为向量表示,便于后续根据向量进行语义相似度匹配。
- 将每个
存储至向量数据库:
- 将所有的
Chunk
和Embedding
一一对应存储在向量数据库中,用于后续向量匹配检索出原始的 Chunk 数据。
- 将所有的
RAG 检索过程的简单示例
用户输入一个问题,如:
帮我生成一个table,包含姓名、年龄、性别。
将问题转换为向量表示。
将用户需求的向量和向量数据库中的向量进行相似度匹配,检索出相似度高的数据源(Retrieval)。
将检索出的数据源和用户需求的问题组合(Augmented),一起输入给大模型(Generation)。
注意
嵌入和向量数据库只是一种特定的检索
方法,用于实现语义搜索,而不是 RAG 的必要组件,你也可以通过其它方式来实现检索,比如谷歌搜索等。
了解了 RAG 的基本原理,接下来我们将基于 RAG 技术,来实现私有组件库的代码生成。