前面我们介绍了如何使用 dify 快速开发 AI 模型应用。在开发 AI 模型应用的过程中还有一个非常重要的技术——RAG。下面我们详细讲解一下。
什么是 RAG?
RAG 即检索增强生成(Retrieval-Augmented Generation),是一种结合检索和生成技术框架。
它在处理用户查询时,先从外部知识库中检索相关信息,再利用这些信息指导语言模型生成文本,以提高生成内容的质量和准确性。
可以分为三部分来理解。检索向量数据库中的内容,增强提示词模板内容,然后让大语言模型来生成更加满足要求的回答。
为什么要使用 RAG
大模型在被训练时,基于一些通用的知识来训练的,并不具备特定行业、特定领域的知识。这使得我们在向 AI 提问一些特定领域的内容时,他只会给我们回复一些很空泛的回答。
那么如何解决这个问题呢?第一种解决方法就是今天提到的 RAG,另一种方法是微调,我们之后再讲。RAG 的难度复杂度相对于微调更低一些,更多的是让大模型能基于外部提供的知识库来回答。
RAG 的原理
RAG 是基于外部知识库来进行回答,知识库中可以包含像 word、pdf、PPT、Excel、网页等信息。有了这新信息后,需要对这些信息进行分块、向量化。
分块是把文本分成更小、更易管理文本块,可以提高检索效率。
向量化可以把非结构化的文本转为数值向量,方便计算机高效理解与处理。这些向量在高维空间中表示文本的语义信息,语义相近的文本在空间向量中距离更近。
之后再提问的时候,会从向量数据库中进行检索,检索出和问题相近的内容,然后作为上下文,添加到提示词模板中。
然后一起发送给大语言模型,它就会针对提示词提供的内容,进行更加准确的回答。
RAG 在 dify 中的应用
文档、图像等非结构化数据如何实习向量化呢?向量化需要通过嵌入模型来实现。所以我们需要安装一下 ollama 提供的 bge-m3 这个嵌入模型。
安装命令:
ollama pull bge-m3
查看是否安装成功:
ollama list
下载好后之后在 dify 的模型供应商中添加一下该模型,用于后续的向量化数据处理。
添加好之后,可以在「系统模型设置」中指定一下我们添加的这个 bge-m3 模型。
dify 自带知识库,接下来在知识库中加入我们本地的文档。
导入后,设置一下分段最大长度、分段重叠长度。
分段最大长度(chunk_size):一个分段包含多少个字,比如 100 个字、1000 个字作为一个分段。
分段重叠长度(chunk_overlap):相邻分段之间重复的字数,用于保留上下文连贯性。
举个🌰:分段最大长度是 100 字,分段重叠长度是 10 个字。那么第一个分段是 1-100 字,第二个分段是 91-190。这样一方面可以防止关键概念断裂,另一方面重叠部分可以帮助算法理解前后段落的逻辑关系。
在设置分段时,一般来说小一些好,但太小了的话处理起来比较慢,而且会缺失上下文信息。
分段后点保存 ——> 然后就进入到分快、向量化这个处理过程了
向量化后数据被保存到向量数据库中。dify 为我们提供了向量数据库,可以直接在 docker 里查看。当然,dify 也可以对接外部的向量数据库。
接下来我们创建一个聊天助手应用,然后把刚才创建好的知识库添加进来。
通过提问,我们发现现在它是结合文档内容后回答的,大功告成!!!
以上就是本次分享的 RAG 理论与实践。如果有收获的话,不妨点一个免费的小赞鼓励一下。如果在理解和应用中遇到问题,也欢迎一起交流学习呀!!!