Dify
2025-07-24 22:45:22 0 举报
AI智能生成
知识库大纲
作者其他创作
大纲/内容
知识库
总
需求:好,我们这节课来讲一讲如何在dify中创建知识库,那么首先,为什么我们需要知识库呢?知识库有什么作用呢?好,咱们不妨来设想这样的一个场景。
场景:比如说现在假设咱企业内部想要去做一个智能客服,但是咱们大模型能知道咱们企业内部的商品信息吗?对于咱们企业内部的非公开信息,比如说产品的具体参数甚至是用户的联系方式与收货地址,这些大模型不知道,那应该怎么办呢?我们可不可以把这些信息全部准备好,然后做一个知识库挂载给它呢?就好比开卷考试,我们把书本给他准备好,考试碰到不会的题目直接翻书。
演示:那么现在咱们来感受一下有了知识库加持的智能体是什么样子的,比如说我问一下咱们公司大模型课程的相关内容,看看能不能回答出来
分
看完了这个效果好,如果说大家也想要用dify给智能体挂载一个知识库怎么办呢?到底要分几步走呢?来咱们一步一步来拆解,之后大家想挂载什么样的知识库都没有问题。
好的,首先,我们要来到知识库的页面,点击创建知识库,那么第一步呢就是去给我们的知识库取一个名字。
好的,现在其实我们的知识库已经创建了,但是里面没有内容啊,所以我们得干啥,对了,得往里面放咱们的东西,我们直接点击添加。那么这里实际上有三种方式去添加我们自己的内容,比如直接把咱本地的文件上传上来,还可以绑定你们自己的notion账号,把那里面的内容拿过来,还有通过授权,把这三个你们在这三个网站里面的内容拿过来。
好的,那么咱这就直接以本地文件给大家去做一个演示,其他方法的操作都是一样的哈,那么上传完文件之后我们就可以直接点击下一步了,好的,那么现在大家来到这个界面后会发现什么?这里有这么多的选择,比如分块,索引,这些大块里面还有好多可选的内容,那么不会选怎么办呢?别怕,首先咱先来了解一下,为什么创建一个知识库得有这么多个选择哈,然后咱再一起来一个一个进行配置。
其实我们创建一个知识库并且挂载给智能体这种技术叫什么呢?叫做RAG,检索增强式生成,名字比较拗口啊,没关系,听完原理后你就明白为什么叫这个名字了。
RAG的第一步是构建向量数据库,首先在我们的文档做成知识库之前我们得先干嘛呢?我们看到这里有一个分块,那么为什么要分块呢?因为咱们现在用的大模型他都是有一个上下文的窗口的,怎么理解呢?就好比咱一次可能只能吃下5个汉堡,再多就吃不下了,大模型一次也只能接受一定量的文本,再多就会被丢掉了,所以咱得先分段,然后一段一段的喂给大模型。
好的,那么现在分完段之后我们要干嘛呢?分完段之后咱就可以去构建一个向量数据库了,那么什么是向量数据库以及什么是向量和向量化呢?
首先我们由浅入深,来看一看什么是向量,那么向量就是一个由一串数字组成的整体,比如说这个整体里面有两个数字,所以他是二维向量,这个整体里面有5个数字,所以它是五维向量。
那么什么是向量化呢?其实就是把咱们的自然语言转化为向量,比如说这句话,向量化后就变成了一串数字了,那么这个过程是怎么实现的呢?对于小白来讲,咱只需要知道是通过一个向量模型(就是专门用来向量化的模型)通过这个模型来实现的就可以了。
那么可能有同学会有疑问,就是为什么我们需要去做向量化这一步呢?来,我们一起来看看,假如说现在有两句话,那么我们发现这两句话里面都出现了苹果对吧,但实际上这两个苹果表达的是同一个意思吗?第一个苹果指的应该是苹果手机,第二个苹果才是水果中的苹果吧。那么现在我们来看一看向量化是怎么去区分这两个概念的,首先,我们看到他们全都变成了四维向量,由四个数字组成,那么这四个数字其实每一个都能去表示一中含义,比如第一个数字咱让他来表示科技成分,那么我们的苹果手机本质上是一个科技产品,所以我们发现苹果和苹果手机再这个数字上的差异是非常明显的,那么假如第二个数字表示果实形态,那么同样,苹果手机实际上是没啥果实形态的对不,所以在这个维度上他们也会有很大的一个差别,那么实际上,我们光靠这两个维度的信息是不是就已经可以区分开我们的苹果和苹果手机了呢?
好,那是不是说明后面的这些维度就没有用了呢?肯定是有用的哈,具体什么用我们再来看一个例子,假如说现在有一个苹果还有一个石榴,而我现在向量的维度只有二维,第一个维度表示颜色,第二个维度表示大小,好的,那么光靠这两个维度我们可以很好地去区分我们的苹果和石榴吗?很难对吧,那么假如我再给这个向量添加几个维度呢?比如说添加一个维度表示果实形态,再加一个表示果实甜度,再加一个表示气候适应性,那么是不是我加入的维度越多,我们就可以越好地去区分不同的概念了呢?这就是咱为什么有些向量模型地向量维度能达到2048维。
那么在向量化之后我们就可以把他们全部存入我们的向量数据库了,好的,那么在我们有了向量数据库之后我们下一步是要干嘛呢?
现在我们就可以去问大模型咱们知识库里面的内容了,但是大家想一想,我们问的问题肯定是一句话对吧,比如大模型的课程有哪些阶段,但是咱们数据库里面的内容是啥?是向量啊,那这怎么检索啊是吧?所以说首先我们得把咱们地话也转化为什么呢?对的,也转化为向量,那么向量与向量之间又是如何去判断是否相似的呢?
比如同样是我们的这些水果还有苹果手机,那么假设他们全部都别转化为了三维向量,三维向量咱是可以直接在坐标图里面画出来的,所以大家可以直观的看到,苹果和苹果手机在图里面的这个距离是不是非常远,说明他们相似度低,有很大区别对吧,而我们的苹果和香蕉这些水果呢?他们的距离相对就会很接近,就说明他们的这个相似度就比较高。那么除了直接去计算向量之间的距离呢,还有一种方式叫做余弦距离,咱也只需要了解一下就行了。
好的,那么现在内容都检索出来之后呢?我们的大模型就会把检索出来的内容去做一个增强,就是把两块内容给整合起来,最后再根据整合后的内容去给我们生成回复,所以咱们看,这个技术的名字叫做检索增强式生成是不是很合理了。
好的,那么我们整个再来走一遍RAG这个流程,比如说现在我们问大模型,询问报价的话术有哪些。好的,那么首先咱们的话会被向量模型转化为啥?向量,好,向量化之后就可以去做检索了,那么假设咱们向量数据库里的内容是这些,他们表示的意思分别是这些,那么现在假设我从头到尾找出来了3个最相似的向量,那么现在假设这个向量的相似度是0.5,这个是0.6,这个是0.7.那么对于我们或者打磨来说,希望看到的检索出来的第一个内容是相似度为0.5的还是0.7的呢?我们肯定是希望第一个肯定得是最关的一个内容吧,但是他给我们的是按先后顺序给的,这怎么办呢?
这种情况咱也不是没有办法的,咱可以使用另一种大模型来帮我们,叫做rerank模型,也就是重排序模型,他会帮我们把检索出来的内容去做一个重新排序,排完后排在第一位的就是相似度为0.7的内容了,这里咱也来看一个小的示范。
那么在学习了rag的原理后咱们再来看这个配置是不是就像砍瓜切菜了,首先是做分块的配置,然后是干嘛?索引也就是向量化的配置,最后再是检索的配置。好,那么我们一个一个来看看。
好,首先我们看到是有两种分块方式选择对吧,大家知道分块就是为后续的索引和检索服务的,在通用分块方式里面,我们可以去填写分割符,选择分块的大小,那么我们看到这里有一个分段重叠度,还有说明,有一个范围,那么现在我们把它调成200然后直接看看效果:
索引这里我们只需要配置一下咱们的向量模型,如果说大家之前有配置了百炼的API的话就可以在这里看到千问的向量模型,如果说大家想用自己本地的向量模型怎么办呢?我们同样可以去ollama去进行本地的下载,好的,那么我们打开ollama官网,选择模型的类型:embedding,以bge这个模型为例,这个模型对中文的支持是比较好的,我们进入模型界面,然后可以看到这里有执行指令,我们只需要把这段指令复制到cmd里面,然后接入dify
接下来我们就要配置什么了?配置rerank模型,我们同样可以直接使用百炼的模型,那么假如我想要用我本地的模型呢?是不是也可以通过ollama去配置呢?关于这个问题,我们再来看看ollama这个插件的配置页面,我们发现这个插件只允许我们去接入大语言模型和向量模型对吧?没有rerank模型的选项,那么这个属于是官方没有适配哈,所以我们只能通过其他的方式去接入rerank模型,比如xinference,来,我们看到这个插件里不仅仅可以接入语言模型,向量模型,rerank模型,还能接入语音转文本的模型和文本转语音的模型,那么我们下节课会给大家讲解如何部署xinference以及接入本地rerank模型。
好的,那么通过这节课的学习,大家应该已经知道了什么是RAG以及RAG的实现流程,同样也知道如何使用dify去创建咱们自己的知识库,那么希望大家课后多去进行练习。
0 条评论
下一页