有手就会之使用Dify构建RAG聊天应用(基于私有知识库和搜索引擎)

本文主要是介绍有手就会之使用Dify构建RAG聊天应用(基于私有知识库和搜索引擎),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

之前我的文章里写的是通过langchain来构建RAG应用,对于很多人来说。langchain作为一个框架上手难度大,代码不够直观。但是通过dify你将学会可视化搭建工作流。

什么是dify?

Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者可以快速搭建生产级的生成式 AI 应用。即使你是非技术人员,也能参与到 AI 应用的定义和数据运营过程中。

通俗点说,通过手机点击创建ai应用,而不用写代码了。

官网链接

阅读本文之前,假设读者已经了解llm、prompt、chatglm、git、github、docker、rag流程、向量数据(embedding)的相关知识,假如没有,可以先学习这些知识。

怎么使用dify?
安装dify
git clone https://github.com/langgenius/dify.git
cd dify/docker
cp .env.example .env
docker compose up -d  
检查

输入docker ps,出现以下服务就是正常的
在这里插入图片描述
安装好之后,打开localhost:80(如果你安装在服务器或者wsl中),需要将localhost转换为对应的ip。

第一次登陆需要设置管理员账户

在这里插入图片描述

假设你已经完成了管理员的创建
创建一个llm应用

创建应用
在这里插入图片描述
在这里插入图片描述
添加llm model
在这里插入图片描述
这里我使用chat glm的在线model,读者可以根据自己的喜好添加model。
输入完secret key选择相应的model之后就可以使用了。

在这里插入图片描述
这样你就完成了dify的第一个应用!!!

是不是很简单!!!

进阶

接下来我们将使用dify搭建一个RAG聊天应用

再次创建应用

这一次我们选择工作流编排的方式创建聊天机器人
在这里插入图片描述
进去之后我们会看到一个开始模块,然后会在左下角看见几个icon,点击
在这里插入图片描述
创建完知识检索的块,之后上传你的pdf文件,然后向量化,检索的话可以使用多种方式,嫌麻烦可以默认。

在这里插入图片描述

在这里插入图片描述
这里相当于之前使用langchain的时候进行的文档加载与向量化,具体可以看下我这篇文章,langchain入门系列之六 使用langchain构建PDF解析助手

具体作用相当于这一块的代码

# 解析pdf并保存到本地向量数据库中
def save_pdf(file_path, file_name):loader = PyPDFLoader(file_path)# 分割text_spliter = RecursiveCharacterTextSplitter(chunk_size=200,chunk_overlap=5,  # 每个块之间的重叠长度length_function=len,)pages = loader.load_and_split(text_spliter)persist_path = persist_directory + file_name# 持久化到本地Chroma.from_documents(documents=pages,embedding=embedding,persist_directory=persist_path)# 加载向量索引
def load_index(file_name):persist_path = persist_directory + file_nameprint(persist_path)index = Chroma(persist_directory=persist_path, embedding_function=embedding)return index

在这里面需要注意的是查询变量,我们用的sys.query,这是最开始的输出。
在这里插入图片描述
根据文章内容测试一下,发现有内容返回,那就没问题。

创建条件流

在这里插入图片描述
json解析
在这里插入图片描述
条件分支
在这里插入图片描述

在这里插入图片描述
QA
在这里插入图片描述
QA 答案
在这里插入图片描述
duckduckgo搜索
在这里插入图片描述
搜索答案提取

在这里插入图片描述
搜索答案回复
在这里插入图片描述

小试牛刀

在这里插入图片描述
当我输入拿破仑意识到了什么时?llm根据书中内容,回复了答案。

注意的事

配置duckduckgo貌似需要科学上网,否则会超时,这里可以替换成bing。

这篇关于有手就会之使用Dify构建RAG聊天应用(基于私有知识库和搜索引擎)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1131715

相关文章

springboot security快速使用示例详解

《springbootsecurity快速使用示例详解》:本文主要介绍springbootsecurity快速使用示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录创www.chinasem.cn建spring boot项目生成脚手架配置依赖接口示例代码项目结构启用s

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

java中使用POI生成Excel并导出过程

《java中使用POI生成Excel并导出过程》:本文主要介绍java中使用POI生成Excel并导出过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求说明及实现方式需求完成通用代码版本1版本2结果展示type参数为atype参数为b总结注:本文章中代码均为

一文详解如何从零构建Spring Boot Starter并实现整合

《一文详解如何从零构建SpringBootStarter并实现整合》SpringBoot是一个开源的Java基础框架,用于创建独立、生产级的基于Spring框架的应用程序,:本文主要介绍如何从... 目录一、Spring Boot Starter的核心价值二、Starter项目创建全流程2.1 项目初始化(

Spring Boot3虚拟线程的使用步骤详解

《SpringBoot3虚拟线程的使用步骤详解》虚拟线程是Java19中引入的一个新特性,旨在通过简化线程管理来提升应用程序的并发性能,:本文主要介绍SpringBoot3虚拟线程的使用步骤,... 目录问题根源分析解决方案验证验证实验实验1:未启用keep-alive实验2:启用keep-alive扩展建

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

使用Java实现通用树形结构构建工具类

《使用Java实现通用树形结构构建工具类》这篇文章主要为大家详细介绍了如何使用Java实现通用树形结构构建工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录完整代码一、设计思想与核心功能二、核心实现原理1. 数据结构准备阶段2. 循环依赖检测算法3. 树形结构构建4. 搜索子

GORM中Model和Table的区别及使用

《GORM中Model和Table的区别及使用》Model和Table是两种与数据库表交互的核心方法,但它们的用途和行为存在著差异,本文主要介绍了GORM中Model和Table的区别及使用,具有一... 目录1. Model 的作用与特点1.1 核心用途1.2 行为特点1.3 示例China编程代码2. Tab

SpringBoot使用OkHttp完成高效网络请求详解

《SpringBoot使用OkHttp完成高效网络请求详解》OkHttp是一个高效的HTTP客户端,支持同步和异步请求,且具备自动处理cookie、缓存和连接池等高级功能,下面我们来看看SpringB... 目录一、OkHttp 简介二、在 Spring Boot 中集成 OkHttp三、封装 OkHttp