第 2 节 / 共 3 节

Docker 原理与 Dify 进阶(知识库 / RagFlow)

🎯 掌握 Docker 基本原理;Dify 接入本地知识库与外部 RagFlow 知识库。
📖 笔记

2.1 Docker 原理和基本使用

2.1 Docker的原理和基本使用

学习目标

  • 了解虚拟机和Docker的区别
  • 掌握Docker的原理
  • 掌握Docker的基本命令使用
  • 掌握Docker的镜像构建

一、环境配置的难题

软件开发过程中,环境配置的一致性是一个普遍存在的挑战。由于目标计算机的运行环境存在差异,开发者难以确保软件能在各种目标机器上正常运行。

成功运行软件需要满足两个关键条件:正确的操作系统设置,以及准确的库和组件安装。以 Python 应用为例,目标机器不仅需要安装 Python 引擎,还必须正确安装所有依赖包,并可能需要进行特定的环境变量配置。

当某些遗留模块与当前环境不兼容时,问题会变得尤为复杂。开发者常说的“在我的机器上可以运行”,其隐含意义是软件在其他环境中很可能无法正常工作。环境配置过程繁琐复杂,每次更换机器都需要重复进行,耗时费力。

很多人想到,能不能从根本上解决问题,软件可以带环境安装?也就是说,安装的时候,把原始环境一模一样地复制过来。

二、虚拟机

对于“它在我机器上能跑” 这个问题,解决思路就是把软件运行所需的操作系统片段、依赖库、配置文件全部打包成一个“独立盒子”(容器/镜像),这个盒子能在任何支持该技术的机器上“开箱即用”,彻底避免“在我这能跑”的尴尬。 最早的解决方案,就是虚拟机。

1 什么是虚拟机

虚拟机就是带环境安装的一种解决方案。它可以在一种操作系统里面运行另一种操作系统,比如在 Windows 系统里面运行 Linux 系统。应用程序对此毫无感知,因为虚拟机看上去跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要了就删掉,对其他部分毫无影响。

接下来以一个形象的例子来对比物理机和虚拟机的区别:

物理机:
* 一个机器里面一个操作系统 - 独立地基,独立花园

虚拟机:
* 一个机器里面多个操作系统 - 共享地基, 共享花园。 但是内部空间是互相隔离的

简单来讲,虚拟机通过把物理机的资源进行分割,安装多个操作系统,多个操作系统互相独立,并独享资源。

2 虚拟机案例

在Windows系统中,有一个比较出名的虚拟机软件:vmware,它的管理页面如下:

如上图,我们可以看到当前我们在一个windows 10系统中运行了一个vmware软件, 这个vmware软件中又运行着windows xp和windows 8.1两台虚拟机,这里有个几点需要注意:

  1. vmware运行所在的windows系统是物理机
  2. windows xp没有运行,在这种状态下,它只是一个“镜像文件”。这个镜像文件只有使用vmware运行的时候,才会转变成一个运行状态的“虚拟机”
  3. windows 8.1虚拟机处在运行状态下, 相当于是跑在windows 10中的一个特殊的软件,运行时,它会占用大量的资源(占用的数量和我们在vmware分配给它的资源量一致)。 而我们进入windows 8.1中使用它的时候, 使用它和使用物理机安装的windows 8.1几乎没有区别。

vmware属于个人玩家使用的虚拟化软件,且仅对windows环境友好。如果是在服务器进行虚拟化,一般会使用exsi等系统管理物理机,exsi不仅是一个虚拟机管理程序,它本身也是一个操作系统,可以节省资源,并对虚拟化支持更好。

3 虚拟机的缺点

虽然用户可以通过虚拟机还原软件的原始环境。但是,这个方案有几个缺点:

  1. 资源占用多: 虚拟机会独占一部分内存和硬盘空间。它运行的时候,其他程序就不能使用这些资源了。哪怕虚拟机里面的应用程序,真正使用的内存只有 1MB,虚拟机依然需要几百 MB 的内存才能运行。
  2. 冗余步骤多:虚拟机是完整的操作系统,一些系统级别的操作步骤,往往无法跳过,比如用户登录。
  3. 启动慢:启动操作系统需要多久,启动虚拟机就需要多久。可能要等几分钟,应用程序才能真正运行。

4 Linux 容器

由于虚拟机存在这些缺点,Linux 发展出了另一种虚拟化技术:Linux 容器(Linux Containers,缩写为 LXC)。

**Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。**或者说,在正常进程的外面套了一个“壳”。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。

由于容器是进程级别的,相比虚拟机有很多优势:

  1. 启动快:容器里面的应用,直接就是底层系统的一个进程,而不是虚拟机内部的进程。所以,启动容器相当于启动本机的一个进程,而不是启动一个操作系统,速度就快很多。
  2. 资源占用少:容器只占用需要的资源,不占用那些没有用到的资源;虚拟机由于是完整的操作系统,不可避免要占用所有资源。另外,多个容器可以共享资源,虚拟机都是独享资源。
  3. 体积小:容器只要包含用到的组件即可,而虚拟机是整个操作系统的打包,所以容器文件比虚拟机文件要小很多。

如下图,对比物理机的“独栋别墅”和虚拟机的“楼房”,docker更像是胶囊式公寓:

总之,容器有点像轻量级的虚拟机,能够提供虚拟化的环境,但是成本开销小得多。

5 拓展: 什么是虚拟化

在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如:服务器、网络、内存、存储等等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原来的组态更好的方式来应用这些资源,这些资源的核心虚拟部分是不受现有资源的架设方式,低于或者物理组态所限制,一般所指的虚拟化资源包括计算能力和资料存储。

在实际的生产过程中,虚拟化技术主要是用来解决高性能的物理硬件产能过剩和老的硬件产能过低的重用重组,透明化底层物理硬件,从而最大化的利用物理硬件,对资源充分利用。

虚拟化技术种类很多,例如:软件虚拟化、硬件虚拟化、内存虚拟化、网络虚拟化,桌面虚拟化、服务虚拟化、虚拟机等等。

虚拟化简单讲,就是把一台物理计算机虚拟成多台逻辑计算机,每个逻辑计算机里面可以运行不同的操作系统,相互不受影响,这样就可以充分利用硬件资源

三、Docker是什么

1 什么是Docker

我们前面提到了Linux容器这个概念:**Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。**它是目前最流行的 Linux 容器解决方案。

Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。

总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

Docker 是一个开源的商业产品,有两个版本:社区版(Community Edition,缩写为 CE)和企业版(Enterprise Edition,缩写为 EE)。企业版包含了一些收费服务,个人开发者一般用不到。下面的介绍都针对社区版。

2 Docker与虚拟机的对比

什么是虚拟机

虚拟机是一个计算机系统的仿真,简单来说,虚拟机可以实现在一台物理计算机上模拟多台计算机运行任务。操作系统和应用共享一台或多台主机(集群)的硬件资源,每台VM有自己的OS,硬件资源是虚拟化的。管理程序负责创建和运行VM,它连接了硬件资源和虚拟机,完成server的虚拟化。由于虚拟化技术和云服务的出现,IT部门通过部署VM可以可减少cost提高效率。VMs也消耗大量系统资源,每个VM不仅运行一个OS的完整copy并且需要所有硬件的虚拟化copy,这消耗大量RAM和CPU。相比单独计算机,VM是比较经济的,但对于一些应用VM是过度浪费的,需要容器。

什么是容器

容器是将操作系统虚拟化,这与VM虚拟化一个完整的计算机有所不同。容器是在操作系统之上,每个容器共享OS内核,执行文件和库等。共享的组件是只读的,通过共享OS资源能够减少复现OS的代码,意味着一台server仅安装一个OS可以运行多个任务。容器是非常轻量的,仅仅MB水平并且几秒即可启动。相比容器,VM需要几分钟启动,并且大小也大很多。与VM相比,容器仅需OS、支撑程序和库文件便可运行应用,这意味你可以在同一个server上相比VM运行2-3倍多的应用,并且,容器能帮助创建一个可移植的,一致的开发测试部署环境。

小结:

特性 虚拟机 容器
隔离级别 操作系统级 进程级
隔离策略 运行于Hypervisor上 直接运行在宿主机内核中
系统资源 5-15% 0-5%
启动速度 慢,分钟级 快,秒级
占用磁盘空间 非常大,GB-TB级 小,KB-MB甚至KB级
并发性 一台宿主机十几个,最多几十个 上百个,甚至上百上千个
高可用策略 备份、容灾、迁移 弹性、负载、动态

结论:
与传统的虚拟化相比,Docker优势体现在启动速度快,占用体积小。

四、Docker核心组件

1 Docker服务端和客户端

Docker 是一个客户端-服务端(C/S)架构程序,Docker客户端只需要向Docker服务端或者守护进程发出请求,服务端或者守护进程完成所有工作返回结果,Docker提供了一个命令行工具Docker以及一整套的Restful API,可以在同一台宿主机器上运行Docker守护进程或者客户端,也可以从本地的Docker客户端连接到运行在另一台宿主机上的远程Docker守护进程。

docker引擎是一个c/s结构的应用,主要组件见下图:

Docker使用C/S架构,Client 通过接口与Server进程通信实现容器的构建,运行和发布。client和server可以运行在同一台集群,也可以通过跨主机实现远程通信。

2 Docker镜像

Docker 镜像就是一个只读的模板。例如:一个镜像可以包含一个完整的操作系统环境,里面仅安装了 Apache 或用户需要的其它应用程序。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。

镜像就是一堆只读层的统一视角,也许这个定义有些难以理解,看看下面这张图:

右边我们看到了多个只读层,它们重叠在一起。除了最下面一层,其它层都会有一个指针指向下一层。这些层是Docker内部的实现细节,并且能够在docker宿主机的文件系统上访问到。统一文件系统技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统。

3 Docker容器

Docker 利用容器来运行应用。容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。

可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

创建Container首先要有Image,也就是说Container是通过image创建的。

Container是在原先的Image之上新加的一层,称作Container layer,这一层是可读可写的(Image是只读的)。

在面向对象的编程语言中,有类跟对象的概念。类是抽象的,对象是类的具体实现。Image跟Container可以类比面向对象中的类跟对象,Image就相当于抽象的类,Container就相当于具体实例化的对象。

Image跟Container的职责区别:Image负责APP的存储和分发,Container负责运行APP。

最终,我们总结一下镜像和容器的关系:
* 镜像:完整操作系统 + 需要运行的程序 所组成的一个文件
* 容器:运行起来的文件

五、Docker的基本使用

1 Docker的基本命令

1.1 Hello World案例

下面,我们通过最简单的 image 文件"hello world",感受一下 Docker。

首先,运行下面的命令,将 image 文件从仓库抓取到本地。

📖 笔记

2.2 Dify 接入知识库

2.2 RAG和知识库

学习目标

  • 了解全文检索的原理
  • 掌握RAG的原理
  • 掌握Dify知识库的创建
  • 掌握在Dify Agent中使用知识库
  • 掌握在Dify工作流中使用知识库

一、文本检索技术

在前面coze阶段我们了解了,知识库检索有全文检索、语义检索、混合检索三种方式:

  • 全文检索:基于关键词+倒排索引技术。
  • 语义检索:基于向量+相似度计算。
  • 混合检索:将全文检索和语义检索的结果进行汇总,再次排序,得到最终检索结果。

1 全文检索

全文检索是一种能够直接从海量的非结构化文本数据(如文章、报告、邮件等)中快速查找出包含特定词汇或短语的信息的技术。它的核心思想类似于书籍末尾的索引,通过预先建立“词汇-文档”的映射关系,实现高效的内容搜索。

全文检索系统的工作流程可以概括为两个核心阶段:索引构建 和 查询检索:

索引构建:这是搜索前的准备工作,也是最关键的一步。系统会对待搜索的文档集合进行处理:
* 分词:首先,将连续的文本切分成有意义的词汇单元。这对于中文尤为关键,例如,将“全文检索技术很棒”切分为“全文”、“检索”、“技术”、“很棒”。
* 创建倒排索引:建立一个“倒排索引”。这就像一本书的索引表,记录每个词语出现在哪些文档中,以及出现的位置和频率。当用户搜索时,系统无需扫描所有文档,只需直接查找这个索引表,就能瞬间知道哪些文档包含关键词。

查询检索:当用户输入查询关键词时,系统执行以下操作:
* 查询处理:对查询词进行同样的分词处理。
* 索引查找:在倒排索引中查找这些分词后的词汇,找到包含它们的文档集合。
* 相关性排序:最后,系统使用相关性排序算法(如 BM25)对结果进行评分排序,将最符合用户需求的文档排在前面

2 RAG

RAG(检索增强生成,Retrieval-Augmented Generation)增强检索知识库是一种结合信息检索与生成式人工智能的技术框架,旨在通过动态调用外部知识库提升大语言模型(LLM)回答的准确性、相关性和时效性。其核心在于将传统检索系统与生成模型结合,解决大模型自身训练数据局限性、知识过时及“幻觉”(虚构信息)等问题。

  1. 检索 根据用户问题,从预构建的知识库(如向量数据库)中检索相关文档或信息片段。知识库通常通过离线处理将文本转换为向量表示并建立索引,支持快速相似度匹配。例如,汽车客服系统可能存储车型参数手册作为知识库,检索时匹配用户问题中的关键词或语义。
  2. 增强 将检索到的信息整合为上下文,与原始问题一同输入生成模型。这一步骤通过补充外部知识,扩展模型的“记忆”范围,使其能基于最新或专有数据生成回答。例如,医疗诊断场景中,RAG可调用最新医学论文数据辅助生成诊断建议。
  3. 生成 大语言模型结合上下文与问题生成最终回答。通过引入检索到的信息,模型输出的准确性显著提升,同时减少虚构内容。例如,企业客服系统利用内部文档生成合规性解答,避免泄露敏感数据。

3 混合检索

混合检索就是同时执行全文检索和向量检索,或 Rerank 模型,从查询结果中选择匹配用户问题的最佳结果。 混合的策略一般分两种:

  • 权重:用户自己通过数值设定关键词和语义的比重,在进行一次排序
  • rerank:通过rerank模型,把两种检索方法检索到的结果进行混合,再进行一次排序。

如下图:

二、知识库创建

1 选择数据源

点击dify 最上方 知识库,点击创建知识库

进入知识库创建页面,选择数据源,选择导入已有文本。目前文本支持多种数据类型TXT、 MARKDOWN、 MDX、 PDF、 HTML、 XLSX、 XLS、 DOCX、 CSV、 MD、 HTM

选择好本地文档后,点击下一步。

2 分段模式

知识库支持两种分段模式:通用模式与父子模式。如果你是首次创建知识库,建议选择父子模式。

2.1 通用模式

系统按照用户自定义的规则将内容拆分为独立的分段。当用户输入问题后,系统自动分析问题中的关键词,并计算关键词与知识库中各内容分段的相关度。根据相关度排序,选取最相关的内容分段并发送给 LLM,辅助其处理与更有效地回答。

在该模式下,你需要根据不同的文档格式或场景要求,参考以下设置项,手动设置文本的分段规则。

  • 分段标识符,默认值为 \n,即按照文章段落进行分块。
  • 分段最大长度,指定分段内的文本字符数最大上限,超出该长度时将强制分段。默认值为 500 Tokens,分段长度的最大上限为 4000 Tokens;
  • 分段重叠长度,指的是在对数据进行分段时,段与段之间存在一定的重叠部分。这种重叠可以帮助提高信息的保留和分析的准确性,提升召回效果。建议设置为分段长度 Tokens 数的 10-25%;

文本预处理规则, 过滤知识库内部分无意义的内容。提供以下选项:
* 替换连续的空格、换行符和制表符
* 删除所有 URL 和电子邮件地址

配置完成后,点击“预览区块”即可查看分段后的效果。你可以直观的看到每个区块的字符数。如果重新修改了分段规则,需要重新点击按钮以查看新的内容分段。

2.2 父子模式

与通用模式相比,父子模式采用双层分段结构来平衡检索的精确度和上下文信息,让精准匹配与全面的上下文信息二者兼得。

其中,父区块保持较大的文本单位(如段落),提供丰富的上下文信息;子区块则是较小的文本单位(如句子),用于精确检索。系统首先通过子区块进行精确检索以确保相关性,然后获取对应的父区块来补充上下文信息,从而在生成响应时既保证准确性又能提供完整的背景信息。你可以通过设置分隔符和最大长度来自定义父子区块的分段方式。

如下图,我们将一个文本分为多个父块,一个父块再进一步分为多个子块。

例如在 AI 智能客服场景下,用户输入的问题将定位至解决方案文档内某个具体的句子,随后将该句子所在的段落或章节,联同发送至 LLM,补全该问题的完整背景信息,给出更加精准的回答。

  • 子分段匹配查询:
  • 将文档拆分为较小、集中的信息单元(例如一句话),更加精准的匹配用户所输入的问题。
  • 子分段能快速提供与用户需求最相关的初步结果。
  • 父分段提供上下文:
  • 将包含匹配子分段的更大部分(如段落、章节甚至整个文档)视作父分段并提供给大语言模型(LLM)。
  • 父分段能为 LLM 提供完整的背景信息,避免遗漏重要细节,帮助 LLM 输出更贴合知识库内容的回答。

3 索引方法

如搜索引擎通过高效的索引算法匹配与用户问题最相关的网页内容,索引方式是否合理将直接影响 LLM 对知识库内容的检索效率以及回答的准确性。Dify提供“**高质量”**与”经济“ 两种索引方法。

3.1 经济模式

在经济模式下,每个区块内使用 10 个关键词进行检索,降低了准确度但无需产生费用。对于检索到的区块,仅提供倒排索引方式选择最相关的区块。

3.2 高质量索引

在高质量模式下,使用 Embedding 嵌入模型将已分段的文本块转换为数字向量,帮助更加有效地压缩与存储大量文本信息;使得用户问题与文本之间的匹配能够更加精准。

将内容块向量化并录入至数据库后,需要通过有效的检索方式调取与用户问题相匹配的内容块。高质量模式提供向量检索、全文检索和混合检索三种检索设置。

4 检索方法

知识库在接收到用户查询问题后,按照预设的检索方式在已有的文档内查找相关内容,提取出高度相关的信息片段供语言模型生成高质量答案。这将决定 LLM 所能获取的背景信息,从而影响生成结果的准确性和可信度。

常见的检索方式包括基于向量相似度的语义检索,以及基于关键词的精准匹配:前者将文本内容块和问题查询转化为向量,通过计算向量相似度匹配更深层次的语义关联;后者通过倒排索引,即搜索引擎常用的检索方法,匹配问题与关键内容。

4.1 经济索引

在经济索引方式下,仅提供倒排索引方式。这是一种用于快速检索文档中关键词的索引结构,常用于在线搜索引擎。倒排索引仅支持 TopK 设置项。用于筛选与用户问题相似度最高的文本片段。系统同时会根据选用模型上下文窗口大小动态调整片段数量。系统默认值为 3 。数值越高,预期被召回的文本分段数量越多。

4.2 高质量索引

在高质量索引方式下,Dify 提供向量检索、全文检索与混合检索设置:

4.2.1 向量检索

向量化用户输入的问题并生成查询文本的数学向量,比较查询向量与知识库内对应的文本向量间的距离,寻找相邻的分段内容。

Rerank 模型: 默认关闭。开启后将使用第三方 Rerank 模型再一次重排序由向量检索召回的内容分段,以优化排序结果。帮助 LLM 获取更加精确的内容,辅助其提升输出的质量。开启该选项前,需前往“设置” → “模型供应商”,提前配置 Rerank 模型的 API 秘钥。

TopK: 用于筛选与用户问题相似度最高的文本片段。系统同时会根据选用模型上下文窗口大小动态调整片段数量。默认值为 3,数值越高,预期被召回的文本分段数量越多。

Score 阈值: 用于设置文本片段筛选的相似度阈值,只召回超过设置分数的文本片段,默认值为 0.5。数值越高说明对于文本与问题要求的相似度越高,预期被召回的文本数量也越少。

TopK 和 Score 设置仅在 Rerank 步骤生效,因此需要添加并开启 Rerank 模型才能应用两者中的设置参数。


4.2.2 全文检索

关键词检索,即索引文档中的所有词汇。用户输入问题后,通过明文关键词匹配知识库内对应的文本片段,返回符合关键词的文本片段;类似搜索引擎中的明文检索。

参数设置与向量检索一致。

4.2.3 混合检索

同时执行全文检索和向量检索,或 Rerank 模型,从查询结果中选择匹配用户问题的最佳结果。

在混合检索设置内可以选择启用 “权重设置” 或 “Rerank 模型”。

5 知识库

5.1 知识库效果

当画面出现嵌入完成,表示文档向量化完成。

5.2 分段效果

5.3 召回测试

Dify 知识库内提供了文本召回测试的功能,用于模拟用户输入关键词后调用知识库内容区块。召回的区块将按照分数高低进行排序并发送至 LLM。一般而言,问题与内容块的匹配度越高,LLM 所输出的答案也就更加贴近源文档,文本“训练效果”越好。

三、AI Agent知识库

点击创建空白页面、选择Agent ,给这个Agent 应用一个名字

进入AI Agent画面,再上下文添加已创建好的知识库。

多模型调试

添加完成知识库我们就可以针对这个知识库进行聊天和对话了。

四、知识库工作流

1 创建工作流

点击创建空白页面、选择chatflow ,给这个chatflow 应用一个名字

2 添加知识库

进入工作流创造面板中,我们可以在大语言模型中间节点中添加“知识检索”

打开知识检索,我们点击知识库添加引用的知识库

3 添加LLM节点

添加完成知识库,我们对接llm大语言模型

上下文 我们选择 知识检索 result

系统提示词这里我们输入如下提示词

📖 笔记

2.3 Dify 接入外部知识库 RagFlow

2.3 Dify接入外部知识库

学习目标

  • 了解RAGFlow的定位和优势
  • 掌握RAGFlow的安装方法
  • 掌握RAGFlow知识库创建
  • 掌握dify接入RAGFlow的方法

一、RAGFlow简介

1 Dify知识库的不足

Dify中的RAG一直被诟病,它的知识库设置不够丰富和灵活,对于不同形式的文档上传,尤其是pdf扫描版,上传识别效果不好,知识库根本回答不了PDF内的内容。为了解决这这些Dify提供了外部知识库API,这样就可以连接到 Dify 之外的知识库并从中检索知识。

接下来给大家重点介绍Dify连接RAGFlow外部知识库的内容

2 什么是RAGFlow

RAGFlow是一款基于深度文档理解构建的开源 RAG引擎。 深度文档理解是RAGFlow对文档解析的一个解决方案,它包含两个组成部分:视觉处理和解析器。其中视觉处理是通过OCR,布局识别,表结构识别来完成图像,PDF,表格的识别的。针对PDF、DOCX、EXCEL和PPT四种文档格式,都有相应的解析器。

能够从各类复杂格式的非结构化数据中提取信息,文本切片过程可视化,还支持手动调整。支持丰富的文件类型,包括 Word 文档、PPT、excel 表格、txt 文件、图片、PDF、影印件、复印件、结构化数据、网页等。

还集成了各种嵌入模型,rerank模型,提供易用的 API,可以轻松集成到各类企业系统。

官网地址:

📎 资料

Dify 思维导图

🧠 dify.xmind · 大纲
dify
定义
dify主要用来进行本地的大模型应用开发的平台
dify和coze的区别[重点]
1.dify可以直接在本地进行部署,coze只能基于sass云平台
2.dify可以实现数据的私有化更安全,coze中所有的数据都在云端不安全
3.dify中接入一百多个第三方的大模型,而coze只能使用少部分的模型
4.dify的插件更加丰富,coze的插件不好用
5.dify适合有一定技术基础的人员来进行使用,coze使用小白进行工作流开发
环境的搭建
1.本地Ubantu的环境
2.阿里云的环境搭建(推荐)
脚本一定要保存好
3.dify完成工作流的入门
微调
定义
在已经训练好的模型的基础上,进行特定领域的训练(数据集),使其在专业领域变的更强大
微调的步骤[重点]
1.选择训练的模型
2.准备数据集
3.调整模型结构
模型的层数
激活函数
4.设置训练参数
学习率
增量lora
全量
5.训练模型
6.评估
语料的数据集
基于bert
{"query":"值","label":"值".....}
基于大模型
{"messages":['角色':'值','content':'值'......]}
RAG检索[重点]
全文检索
构建索引
分词
创建倒排索引
查询检索
将查询语句分词
根据分词去进行索引目录中找到对应的文档
将更接近用户问题答案的文档往前进行排序BM25
语义检索
向量+相似度匹配
混合检索
将全文检索和语义检索的结果进行综合一块,进行重排
权重
关键词+语义的比重
rerank模型
将用户的问题和文档组成(query,dcoument)对,重生生成一个0-1之间绝对相关值,然后降序排序
检索流程
数据生成
1.从pdf、docx、txt文本中提取数据
2.需要切片(分段、分块)
通用分段
父子分段
3.通过embedding模型转成向量
4.存入向量数据库Milvus
检索增强
1.用户问题
2.将问题转换成向量(向量模型需要跟生成向量的模型保持一致)
3.使用混合检索方式进行检索
1.拿到全文和语义检索的结果(数量,质量不高)
2.重排(精排)
权重:关键词+语义
rerank模型
4.将用户的问题和检索的结果发送给模型进行润色(增强)
5.将结果响应给用户
dify的分块[重点]
通用分块
分割符
长度
上下重叠长度
父子分块
父块
父块主要用于上下文匹配
分割符
长度
子块
子块主要用于检索
分隔符
长度
dify引用知识库
工作流中引用知识库
对话流中引用知识库
agent中引用知识库
将对话流和agent部署到页面
ragflow
专注于知识库检索的工具
为什么不用dify?
1.dify解析文档的能力有限,尤其是长文本
2.dify的检索不灵活,不精准
与dify的区别
1.dify是本地开发AI应用的平台,ragflow是专门做知识库检索的工具
2.dify负责工作流排版与调度,ragflow主要负责检索
分块的方式[重点]
General 通用
Q&A xls、csv 用于问答
manual 用于结构的文档解析
table 表格
papper 论文
book 书 pdf
laws 法律
检索方式
权重: 关键字+语义
rerank
dify中外挂ragflow[重点]
1.在ragflow中创建key和api url
2.在dify中找到知识库-->连接外部知识库
3.配置url(http://ip:8880/api/v1/dify)、key和外部知识库的id
4.召回测试
实操
1.使用面试宝典搭建ragflow的知识库
2.使用对话流结合面试宝典做了面试题生成助手
3.将面试题生成助手版本升级到可以进行回答,并进行打分
变量声明
变量的赋值
代码节点
判断节点
4.阿里云安装了mysql
5.在dify中安装并使用mysql的插件,实现mysql数据的查询