当前位置: 首页 > article >正文

【实践案例】使用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.kler.cn/a/525313.html

相关文章:

  • Spring Boot - 数据库集成05 - 集成MongoDB
  • concurrent.futures.Future对象详解:利用线程池与进程池实现异步操作
  • 程序地址空间
  • 【JavaWeb06】Tomcat基础入门:架构理解与基本配置指南
  • Python学习之旅:进阶阶段(五)数据结构-双端队列(collections.deque)
  • docker安装Redis:docker离线安装Redis、docker在线安装Redis、Redis镜像下载、Redis配置、Redis命令
  • 探索Linux中的进程控制:从启动到退出的背后原理
  • 使用 Iptables 实现网络安全策略:从入门到精通
  • Python 梯度下降法(一):Gradient Descent
  • 10.8 FileSystemWatcher(文件监视)组件
  • k均值聚类将数据分成多个簇
  • 高级编码参数
  • 【Attention】KV Cache
  • TypeScript 学习 -类型 - 10
  • 快速提升网站收录:内容创作的艺术
  • 工具的应用——安装copilot
  • 高速PCB设计指南3——PCB 传输线和受控阻抗
  • 供应链系统设计-供应链中台系统设计(十)- 清结算中心概念片篇
  • Python3 【内置函数】:使用示例参考手册
  • JVM--类加载器
  • 超越传统图结构:记忆模拟新突破
  • C语言从入门到进阶
  • 【deepseek】本地部署DeepSeek R1模型:使用Ollama打造个人AI助手
  • 并发编程 - 线程同步(二)
  • 【2024年华为OD机试】 (A卷,200分)- 服务中心选址(JavaScriptJava PythonC/C++)
  • Python异步编程核武器:asyncio.gather() 的终极使用手册