RAG(检索增强生成)是一种在 AI 领域中用于处理知识库的方案。
大模型的训练数据有截止日期,当需要依靠不包含在大模型训练集中的数据时,RAG 是主要方法之一。
RAG 的应用可以抽象为以下 5 个过程:
基于 Coze 的知识库问答是典型的 RAG 方案,其重要一环是文档切片。但 RAG 方案存在一些缺点,如跨分片总结和推理能力弱、文档有序性被打破、表格解析失败等。
相关的海外官方文档:https://www.coze.com/docs/zh_cn/knowledge.html ,国内官方文档:https://www.coze.cn/docs/guides/use_knowledge 。
在实际操作中,如使用外贸大师产品的帮助文档创建知识库时,要注意文档的分片策略会严重影响查询结果。
私人知识库中内容一般有两种:日常从互联网收集的优质信息个人日常的思考以及分享如果我想基于这套知识库打造个人专属的ChatGPT该怎么做呢?这里面常见的会有两种技术方案1.训练专有大模型2.利用RAG(检索增强生成)技术初次听到这两个名词你可能有点懵,不要慌,接下来我会通俗易懂的语言让你了解他们的原理。[heading3]训练专有大模型[content]KimiChat和ChatGPT等AI聊天软件为什么能够精准的回答问题,因为他们使用了整个互联网的语料进行了训练,从而拥有了整个互联网的知识。看到这里你应该知道我想要讲什么了,对,既然能用整个互联网的知识训练出KimiChat和ChatGPT等大模型,那我能不能使用我的知识库来训练一个专有的大模型呢?当然可以!而且这样的效果是最好的。但是这并不是当下主流的方案,因为他有以下几个缺陷:高成本:训练和维护一个大型专有模型的成本非常高,需要大量的计算资源和专业知识。更新难度:如果需要更新模型的知识,需要重新训练或微调模型,这可能是一个复杂且耗时的过程下面让我们来看另一个方案:RAG(检索增强生成)
我们都知道大模型的训练数据是有截止日期的,那当我们需要依靠不包含在大模型训练集中的数据时,我们该怎么做呢?实现这一点的主要方法就是通过检索增强生成RAG(Retrieval Augmented Generation)。在这个过程中,首先检索外部数据,然后在生成步骤中将这些数据传递给LLM。我们可以将一个RAG的应用抽象为下图的5个过程:文档加载(Document Loading):从多种不同来源加载文档。LangChain提供了100多种不同的文档加载器,包括PDF在内的非结构化的数据、SQL在内的结构化的数据,以及Python、Java之类的代码等文本分割(Splitting):文本分割器把Documents切分为指定大小的块,我把它们称为“文档块”或者“文档片”存储(Storage):存储涉及到两个环节,分别是:将切分好的文档块进行嵌入(Embedding)转换成向量的形式将Embedding后的向量数据存储到向量数据库检索(Retrieval):一旦数据进入向量数据库,我们仍然需要将数据检索出来,我们会通过某种检索算法找到与输入问题相似的嵌入片Output(输出):把问题以及检索出来的嵌入片一起提交给LLM,LLM会通过问题和检索出来的提示一起来生成更加合理的答案[heading4]使用知识库[content]海外官方文档:https://www.coze.com/docs/zh_cn/knowledge.html国内官方文档:https://www.coze.cn/docs/guides/use_knowledge
这里我使用一款名为外贸大师产品的帮助文档进行演示。其帮助文档的地址为:[外贸大师使用秘籍·Yuque](https://www.yuque.com/charlotteyang/lbvyfu)为了简单,我选择其中一个文档来创建知识库:[购买后新人常见问题汇总·语雀](https://www.yuque.com/charlotteyang/lbvyfu/gvzs7qt313zg0svr)1.点击创建知识库1.从知识库中添加知识单元为了更好的检索效果,这个例子里使用Local doucuments的方式,并且上传的Markdown格式文档首先看下文档数据的格式:每个问题都是使用###作为开头(这是Markdown的语法)准备开始上传文件至此,一个完整的知识库就构建完成啦!接下来我们就可以去创建我们的产品资料问答机器人特别需要注意的是:文档的分片策略会严重影响查询的结果,这是当前RAG自身的方案原理导致的。基于Coze的知识库问答是典型的RAG方案,其重要一环就是文档切片(Segment)。然而,不管是单分片是800 token还是2000 token,都显著暴露了RAG方案的缺点:跨分片总结和推理能力弱。这是基于RAG方案自身原理导致的。文档有序性被打破。这是基于RAG方案自身原理导致的。表格解析失败。最后一点很诧异。虽然在业内把PDF解析为结构化文本,本就是一个难题。但是Coze对PDF的解析结果甚至不如直接用pypdf这个开源Python组件解析的效果好。说明Coze这个产品对细节的打磨还不够好。在这里我们不讨论如何组织文档形式,从而可以更好的分片。后面我会专门研究这块,并产出教程。