【实践案例】使用Dify构建企业知识库

文章目录

  • 背景知识
    • 检索增强生成(RAG)
    • 向量检索
    • 关键词检索
    • 混合检索
    • 向量化和相似度计算实例说明
  • 实践案例
  • 创建知识库
  • Rerank 模型设置
  • 创建Dify工作流
  • 测试

背景知识

检索增强生成(RAG)

检索增强生成(Retrieval-Augmented Generation,简称RAG)是一种将信息检索与生成模型结合起来的技术。RAG通过在生成过程之前检索相关信息,以增强生成模型的能力,从而提高其在知识密集型任务中的表现。这个方法尤其适用于需要大量外部知识的任务,比如问答系统、对话生成等。

RAG的核心思想是通过结合信息检索模型(通常是基于搜索引擎或者专门的检索模型)与生成模型(通常是基于Transformer的生成模型),使得生成模型在生成答案时能够利用外部知识库或文档,增强其生成能力和准确性。简单来说,RAG模型通过以下两个步骤来工作:

  1. 检索(Retrieval):首先,模型从一个大规模的文档库或知识库中检索与当前输入(如问题、提示等)相关的文档或片段。这些片段通常是与问题相关的上下文信息。
  2. 生成(Generation):然后,基于检索到的文档和输入问题,生成模型将会结合这些检索到的上下文信息来生成回答或文本。这是一个类似于传统生成模型的过程,但它能够借助外部信息源,避免“凭空生成”答案。

通俗来说,RAG(检索增强生成)就是让 AI 在回答问题时,先通过搜索找到一些相关的内容,然后再把这些内容交给生成模型来给出答案,这样能确保答案更加准确和可靠。
【优势】实时知识更新:因为系统是在外部的知识库中实时检索信息,它的回答能紧跟时事,避免大模型“记忆过时”的问题。减少错误信息:大模型如果单独生成答案,有时会“编造”信息(这就是所谓的生成幻觉)。而通过检索,模型能够获得实际的、相关的知识,减少错误和不准确的内容。提高效率和准确性:通过让大模型依赖检索到的外部知识,它能够用更少的计算资源和更高的准确度,快速提供答案。

如果系统没有使用检索机制,生成模型可能会凭空生成一个错误的答案,比如“美国总统是某某人”,但实际上这个“某某人”可能是历史上的某个总统,而不是现任的拜登。使用检索后,它能确保答案是正确的并且基于最新的事实。
这种方式已经在很多实际应用中得到了使用,比如智能客服、AI搜索引擎等领域,能大大提升这些系统的智能水平和用户体验。

向量检索

RAG 检索环节中的主流方法是向量检索,即语义相关度匹配的方式。技术原理是通过将外部知识库的文档先拆分为语义完整的段落或句子,并将其转换(Embedding)为计算机能够理解的一串数字表达(多维向量),同时对用户问题进行同样的转换操作。

向量检索的核心在于将文本内容转换为“向量”(一串数字)。这些向量是通过 嵌入(Embedding) 技术获得的,通常利用深度学习模型(如BERT、Sentence-BERT等)将句子或段落转换为高维向量。这样做的目的是让计算机能够理解文本的 语义,而不是简单的词汇匹配。
• 向量化:将文本(如文档或问题)转换为向量,向量中每个数字代表文本中的某个语义特征。
• 相似度计算:系统通过计算不同向量之间的相似度(如余弦相似度)来评估问题和文档之间的相关性。这样,即便是表面上没有直接相同词汇的句子,系统也能基于语义相似度找到相关内容。
例如,问题“猫追逐老鼠”与“小猫捕猎老鼠”虽然表达的方式不同,但它们的语义相似度非常高,系统能够理解它们之间的关系,从而准确匹配到相关文档。

关键词检索

传统的关键词检索方法在精确匹配、少量字符匹配和低频词汇匹配方面非常擅长。它能够快速准确地找到特定的产品名、姓名、编号等内容,尤其适合用户输入少量字符时,能够高效返回相关结果。此外,对于低频词汇,关键词检索也能够通过词典或索引提供精准的匹配,因此在这些场景下具有明显优势。

混合检索

混合检索(Hybrid Retrieval)结合了传统的关键词检索和基于向量的语义检索的优点,弥补了它们各自的不足。传统的关键词检索擅长精准匹配,如产品名、人物姓名等,但在处理语义模糊或同义词时效果较差。而向量检索则通过计算文本之间的语义相似度,能够更好地处理语义相关的查询,特别是在应对同义词、拼写错误或不同语言时具有优势。
在混合检索中,系统会先建立关键词索引和向量索引,在用户查询时,分别利用这两种检索方式获取最相关的文档,再将结果进行结合,以提供更加准确和全面的检索结果。通过这种方式,混合检索能够实现精准的词汇匹配,同时又能利用语义检索捕获潜在的相关信息,提升整体的检索效果。

向量化和相似度计算实例说明

假设有一个文档库,里面有三篇文章,用户问:“猫为什么喜欢捕鼠?”系统要根据这个问题找到最相关的文档并给出回答。
向量化是将文本转换成数字形式,使计算机可以理解。我们会将每篇文章以及用户的问题转换为一组数字,称为向量。每个向量表示文本的语义特征,越相似的文本,它们的向量也越接近。
假设我们将以下三个句子向量化后得到的数字(向量)如下:
• 问题:“猫为什么喜欢捕鼠?” 向量为:[0.2, 0.8, 0.3]
• 文章1:“猫天生喜欢捕捉小动物” 向量为:[0.1, 0.9, 0.2]
• 文章2:“狗喜欢在公园里跑步” 向量为:[0.7, 0.1, 0.5]
• 文章3:“老鼠是猫的天然猎物” 向量为:[0.2, 0.7, 0.3]
这些向量的数字表示了每篇文章或问题在某些“语义维度”上的特征(三维向量)。可以想象这些数字反映了每篇文章在某些主题上的权重(比如捕鼠、动物等)。

接下来,系统需要判断“猫为什么喜欢捕鼠”这个问题与这些文章的相关性。为了判断,系统计算向量之间的相似度。一种常用的相似度计算方法是余弦相似度,它可以测量两个向量之间的角度,角度越小,相似度越高。

在自然语言处理(NLP)中,文本的“几维表示方式”指的是将文本转换为向量时,向量的维度数,也就是这些数字表示的“空间”有多少个维度。通常,文本向量的维度数越高,模型就能在更大的空间中表达更多的语义特征。例如,BERT模型生成的每个句子的嵌入向量通常是 768维,这是BERT-base模型的标准输出。对于BERT-large模型,这个维度可能是 1024维。

在上面示例中向量是 3维向量,每个向量包含3个数字,代表了文本在3个语义维度上的表达。在实际的复杂模型中,向量的维度通常会更高,能够更细致地捕捉文本的语义。

实践案例

本地知识库准备
在网上随机找了一个商场的介绍,并将其中的品牌名称替换为了“大禹商城”,这个是我虚构的品牌,如果没有预先索引,那么大模型是无法回答或者会回答一个错误的结果。

创建知识库

在这里插入图片描述
在这里插入图片描述

Rerank 模型设置

Rerank 模型用于增强检索能力,改善 LLM 的搜索结果。
在这里插入图片描述
Dify 目前已支持 Cohere Rerank 模型,进入“模型供应商-> Cohere”页面填入 Rerank 模型的 API 秘钥:
登录:https://cohere.com/rerank,在页内注册并申请 Rerank 模型的使用资格,获取 API 秘钥。

进入“知识库->创建知识库->检索设置”页面并在添加 Rerank 设置。除了在创建知识库可以设置 Rerank ,你也可以在已创建的知识库设置内更改 Rerank 配置,在应用编排的知识库召回模式设置中更改 Rerank 配置。
在这里插入图片描述
TopK: 用于设置 Rerank 后返回相关文档的数量。
Score 阈值: 用于设置 Rerank 后返回相关文档的最低分值。设置 Rerank 模型后,TopK 和 Score 阈值设置仅在 Rerank 步骤生效。

创建Dify工作流

创建Dify工作流,并在【知识检索】节点关联本次新加的知识库,这里直接应用的模板应用【问题分类 + 知识库 + 聊天机器人】
在这里插入图片描述

测试

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/894085.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Maui学习笔记- SQLite简单使用案例02添加详情页

我们继续上一个案例,实现一个可以修改当前用户信息功能。 当用户点击某个信息时,跳转到信息详情页,然后可以点击编辑按钮导航到编辑页面。 创建项目 我们首先在ViewModels目录下创建UserDetailViewModel。 实现从详情信息页面导航到编辑页面…

算法基础学习——快排与归并(附带java模版)

快速排序和归并排序是两种速度较快的排序方式,是最应该掌握的两种排序算法, (一)快速排序(不稳定的) 基本思想:分治 平均时间复杂度:O(nlogn) / 最慢O(n^2) / 最快O(n) 步骤&…

数据结构的队列

一.队列 1.队列(Queue)的概念就是先进先出。 2.队列的用法,红色框和绿色框为两组,offer为插入元素,poll为删除元素,peek为查看元素红色的也是一样的。 3.LinkedList实现了Deque的接口,Deque又…

1. Java-MarkDown文件创建-工具类

Java-MarkDown文件创建-工具类 1. 思路 根据markdown语法,拼装markdown文本内容 2. 工具类 import java.util.Arrays; import java.util.List;/*** Markdown生成工具类* Author: 20004855* Date: 2021/1/15 16:00*/ public class MarkdownGenerator {private Str…

Go学习:格式化输入输出

目录 1. 输出 2. 输入 1. 输出 常用格式: 格式说明%d整型格式%s字符串格式%c字符格式%f浮点数格式%T操作变量所属类型%v自动匹配格式输出 简单示例代码: package mainimport "fmt"func main() {a : 10b : "abc"c : ad : 3.14/…

回顾:Maven的环境搭建

1、下载apache-maven-3.6.0 **网址:**http://maven.apache.org 然后解压到指定的文件夹(记住文件路径) 2、配置Maven环境 复制bin文件夹 的路径D:\JavaTool\apache-maven-3.6.0\bin 环境配置成功 3、检查是否配置成功 winR 输入cmd 命令行输入mvn -v…

【以音频软件FFmpeg为例】通过Python脚本将软件路径添加到Windows系统环境变量中的实现与原理分析

在Windows系统中,你可以通过修改环境变量 PATH 来使得 ffmpeg.exe 可在任意路径下直接使用。要通过Python修改环境变量并立即生效,如图: 你可以使用以下代码: import os import winreg as reg# ffmpeg.exe的路径 ffmpeg_path …

解决报错“The layer xxx has never been called and thus has no defined input shape”

解决报错“The layer xxx has never been called and thus has no defined input shape”(这里写自定义目录标题) 报错显示 最近在跑yolo的代码时遇到这样一个错误,显示“the layer {self.name} has never been called”.这个程序闲置了很久,每次一遇到…

UE(UltraEdit) 配置简易C/C++编译运行环境

该类型其他帖子 EmEditor 配置简易C/C 编译运行环境_emeditor 代码运行-CSDN博客 RJ TextEd 配置简易C/C 编译运行环境-CSDN博客 这种配置适合ACM竞赛,即要求不使用现代IDE,又想用一个比较好用、至少支持代码高亮的编辑器。 前提条件 1.Mingw GCC 已…

【Unity】 HTFramework框架(五十九)快速开发编辑器工具(Assembly Viewer + ILSpy)

更新日期:2025年1月23日。 Github源码:[点我获取源码] Gitee源码:[点我获取源码] 索引 开发编辑器工具MouseRayTarget焦点视角Collider线框Assembly Viewer搜索程序集ILSpy反编译程序集搜索GizmosElement类找到Gizmos菜单找到Gizmos窗口分析A…

多模态论文笔记——TECO

大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细解读多模态论文TECO(Temporally Consistent Transformer),即时间一致变换器,是一种用于视频生成的创新模型&…

C语言编译过程全面解析

今天是2025年1月26日,农历腊月二十七,一个距离新春佳节仅一步之遥的日子。城市的喧嚣中,年味已悄然弥漫——能在这个时候坚持上班的人,真可称为“牛人”了吧,哈哈。。。。 此刻,我在重新审视那些曾被遗忘的…

乐优商城项目总结

文章目录 项目简介微服务集群1.enreka注册中心2. zuul网关3. 公共工具类4. 商品微服务5. 文件上传微服务6. 搜索微服务7. 页面静态化微服务8. 用户微服务9. 短信微服务10. 认证微服务11. 购物车微服务12. 订单微服务项目最大的收获项目遇到的问题 项目简介 乐优商城是一个全品…

Yolo11 + OCR 营业执照识别+信息抽取(预期后续改用其他ocr更简单,推理预计使用onnxruntim加速,分c++和python两种方式部署)

目录 一 数据集制作 1 labelimg的安装与使用 2 标注方式 3 数据集制作 二 模型训练 三 使用Yolo11 + OCR 实现“营业执照”信息解析完整方案 1 cutLinesforcode.py 2 getBusinessLicenseContentPart.py 3 getPartWords.py 4 pdfTojpg.py 5 main.py 本项目可用于毕业…

18.Word:数据库培训课程❗【34】

目录 题目 NO1.2.3.4 NO5设置文档内容的格式与样式 NO6 NO7 NO8.9 NO10.11标签邮件合并 题目 NO1.2.3.4 FnF12:打开"Word素材.docx”文件,将其另存为"Word.docx”在考生文件夹下之后到任务9的所有操作均基于此文件:"Word.docx”…

SSM开发(七) MyBatis解决实体类(model)的字段名和数据库表的列名不一致方法总结(四种方法)

目录 方法一: 使用@Results和@Result注解(注解方式) 方法二:修改 SQL 查询语句中的别名(注解方式) 方法三: 全局配置别名或结果映射(resultMap,XML配置方式) 方法四:使用@Column注解 在MyBatis中,如果你希望使用注解的方式来操作数据库,但又遇到实体类中的…

AboutDialog组件的功能和用法

文章目录 1 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了AlertDialog Widget相关的内容,本章回中将介绍AboutDialog Widget.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 我们在这里说的AboutDialog是一种弹出式窗口,和上一章回中介绍的Al…

设计模式的艺术-策略模式

行为型模式的名称、定义、学习难度和使用频率如下表所示: 1.如何理解策略模式 在策略模式中,可以定义一些独立的类来封装不同的算法,每个类封装一种具体的算法。在这里,每个封装算法的类都可以称之为一种策略(Strategy…

软件架构的演变:从大型机和整体式应用到分布式计算

注:本文为 “软件架构演变” 相关文章合辑。 英文引文机翻,未校。 Evolution of Software Architecture: From Mainframes and Monoliths to Distributed Computing Liv Wong Technical Writer August 06, 2024 Software architecture—the blueprint…

SET alter system reload

目录标题 alter system 只是 写 auto 文件SET & alter system1. **会话级别参数(Session-level parameters)**2. **系统级别参数(System-level parameters)**3. **某些特定的超级用户参数**4. **修改时生效的参数**总结&#…