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

本地部署 AI 智能体,Dify 搭建保姆级教程(下):知识库 RAG + API 调用,我捏了一个红楼解读大师

话接上篇:
本地部署 AI 智能体,Dify 搭建保姆级教程(上):工作流 + Agent,把 AI 接入个人微信

相信大家已经在本地搭建好 Dify 了。

今日分享,继续介绍 Dify 的另外两项重要功能:

  • 知识库 & RAG
  • API 调用

1. 知识库构建

在控制台上方的知识库 Tab 中,点击创建知识库:

1.1 基于本地文件

第一步:选择一个数据源

知识库支持 3 种数据源,我们先选择导入本地文件进行演示。这里把《红楼梦》上传,看看大模型能不能帮我读懂它~

第二步:文本分段和清洗

构建索引需要调用 embedding 模型,在哪设置?上一篇我们介绍模型供应商这里:

简单介绍下:Q&A 分段模式的功能,与普通的「Q to P」(问题匹配文本段落)匹配模式不同,在文档经过分段后,经过总结为每一个分段生成 Q&A 匹配对,当用户提问时,系统会找出与之最相似的问题,然后返回对应的分段作为答案。

Q&A 分段唯一的缺点是:需要调用大模型进行总结,因此需要消耗大量 Token,且耗时较长,如果你已经实现 Token 自由了,强烈建议加上此功能。

在检索设置这里,Dify 提供了 3 种检索方案:

  • 向量检索,通过生成查询嵌入并查询与其向量表示最相似的文本分段。
  • 全文检索,索引文档中的所有词汇,从而允许用户查询任意词汇,并返回包含这些词汇的文本片段。
  • 混合检索,同时执行全文检索和向量检索,从两类查询结果中选择匹配用户问题的最佳结果,建议优先选择该方案

最终,使用Q&A 分段,生成的数据库结果如下:

1.2 基于网页内容

如果要爬取网页内容来构建数据库,数据源选择 同步自 Web 站点

这里需要用到firecrawl这个爬虫插件,得先去注册一个账号,拿到 API key。

然后在官网测试一下,比如我让它爬取之前搭建的知识库,爬取成功:

firecrawl会自动将网页内容转换成 markdown 格式的结构化数据,非常适合大模型食用。

回到 Dify 知识库构建页面,我们以爬取 dify 中文文档为例:

后续进行文本分段和清洗的设置,和 1.1 一致。

2. 创建聊天小助手

下面我们以加载 红楼梦 的知识库为例,构建一个知识检索增强(RAG)的大模型。

回到控制台首页,创建一个名为红楼大师聊天小助手

PS:尝试过创建Agent,不过加载知识库后,对提示词遵循的不太理想,暂未找到原因。

首先,编写如下角色提示词:

# 角色
你是一位资深的红楼梦解读大师,能够根据用户提出的问题,首先从知识库【红楼梦】中精准检索相关答案,并以此为基础为用户提供准确、清晰且完整的回答。## 技能
1. 当用户提出问题后,首先在知识库【红楼梦】中进行检索。
2. 严格依据检索到的内容进行回答。
3. 直接回答问题答案,并给出具体解释。## 限制:
- 所有回答必须完全基于知识库【红楼梦】的内容,不得自行编造。

然后,在上下文标签中把刚构建好的知识库加载进来:

在右侧的预览与调试区域,分别用两个模型测试一下:

贾雨村和贾宝玉什么关系

继续追问它:

可以看到,聊天助手的回答,精准引用了知识库中的内容,

1.3 API 调用

调试没问题后,我们在右上角的发布中,找到 访问API

进来后,这里有两个东西比较关键:

  • URL:your_ip:port/v1,这个url所有智能体共享;
  • API key:自动生成。

Dify 的 API 是如何区分不同智能体的?

答:API 密钥,调用时根据API 密钥路由到不同的智能体。

接下来我们以 Python 为例,编写一段代码来测试一下:

import requestsurl = 'http://129.150.39.xxx/v1/chat-messages'
api_key = ''  headers = {'Authorization': f'Bearer {api_key}','Content-Type': 'application/json',
}data = {"inputs": {},"query": "dify有几种部署方式","response_mode": "blocking","conversation_id": "","user": "1",# "files": [#     {#         "type": "image",#         "transfer_method": "remote_url",#         "url": "https://cloud.dify.ai/logo/logo-site.png"#     }# ]
}response = requests.post(url, headers=headers, json=data)
print(response.json())

返回结果如下:

{'event': 'message', 'task_id': '3528c65b-51ef-4b94-8f91-5d036cecb5e1', 'id': '4cfb8ce0-59be-413c-8d9f-ca003c48d972', 'message_id': '4cfb8ce0-59be-413c-8d9f-ca003c48d972', 'conversation_id': '6c21ccc9-9536-45bb-820a-aa669df0a637', 'mode': 'chat', 'answer': '宝玉认为老爷给他娶了林妹妹过来,实际上娶的是薛宝钗。(在知识库中只提到了宝玉认为老爷给他娶了林妹妹过来,未提及实际娶的情况,但根据《红楼梦》原著,宝玉最终娶的是薛宝钗) ', 'metadata': {'retriever_resources': [{'position': 1, 'dataset_id': 'af549aae-8511-477f-9a52-f1e38495c527', 'dataset_name': '红楼梦', 'document_id': '9e16083e-8f48-40bd-a592-2f08a539571a', 'document_name': '红楼梦', 'data_source_type': 'upload_file', 'segment_id': '7f834c40-5c84-4a72-bbae-ef36c78801ba', 'retriever_from': 'api', 'score': 0.9517872934, 'content': 'question:宝玉后来怎么样了? \nanswer:睡沉了,可见比先好些了。'}, 'usage': {'prompt_tokens': 466, 'prompt_unit_price': '0.0', 'prompt_price_unit': '0.0', 'prompt_price': '0.0', 'completion_tokens': 54, 'completion_unit_price': '0.0', 'completion_price_unit': '0.0', 'completion_price': '0.0', 'total_tokens': 520, 'total_price': '0.0', 'currency': 'USD', 'latency': 4.892606373003218}}, 'created_at': 1724139354}

我们可以看到,接口返回结果中:包含了最终的大模型回答,以及知识库检索的结果。

如果你是本地部署的 Dify,完全没有 API 调用的限制,相比 Coze 的 100 次免费额度,真香!

和 FastGPT 相比呢?

  • Dify 的接口不兼容 OpenAI 格式,需要自己进行开发,但是返回了知识库信息,因此可操作空间更大;
  • FastGPT 的接口兼容 OpenAI 格式,因此可以无缝链接到任何使用 OpenAI 的应用中。

写在最后

本文通过 红楼解读大师 的案例,带大家动手捏了一个基于知识检索增强(RAG)的智能体~

由于 Dify 本地部署,完全无需担心你的数据安全问题,尽情打造更有创意的 RAG 应用吧。

如果本文对你有帮助,不妨点个免费的赞收藏备用。

相关文章:

本地部署 AI 智能体,Dify 搭建保姆级教程(下):知识库 RAG + API 调用,我捏了一个红楼解读大师

话接上篇: 本地部署 AI 智能体,Dify 搭建保姆级教程(上):工作流 Agent,把 AI 接入个人微信 相信大家已经在本地搭建好 Dify 了。 今日分享,继续介绍 Dify 的另外两项重要功能: 知…...

HarmonyOS应用开发者高级认证,Next版本发布后最新题库 - 答案纯享版

这篇文章是高级题库答案纯享版,只有需要选择的选项。如果需要查看所有选项,可以点击下方链接跳转。以考代学,还是推荐点击下方链接,查看完整的题库,边看边学习鸿蒙应用开发。此题库已更新完毕,笔者将不继续…...

基于PHP的文件包含介绍

引言:在实际开发过程中,经常会遇到部分模块功能需要重复使用的情况,比如数据库的增删改查,文件包含通过将需要重复使用的功能模块代码引入其他文件的内容,实现重用代码、分离配置等。然而,如果文件包含操作…...

K7系列FPGA多重启动(Multiboot)

Xilinx 家的 FPGA 支持多重启动功能(Multiboot),即可以从多个 bin 文件中进行选择性加载,从而实现对系统的动态更新,或系统功能的动态调整。 这一过程可以通过嵌入在 bit 文件里的 IPROG 命令实现上电后的自动加载。而…...

关于武汉芯景科技有限公司的RS232通信接口芯片XJ3243EEUI开发指南(兼容MAX3243EEUI)

一、芯片引脚介绍 1.芯片引脚 2.引脚描述 二、典型应用电路 三、功能描述 1.Transmitter 通过T1,T2可以将TTL电平转换为RS232电平 2.Receiver 通过R1,R2可以将RS232电平转换为TTL电平 3.工作模式控制 4.INVALID引脚...

TreeSize Free:你的免费磁盘空间管理专家

TreeSize Free是一款专为Windows用户设计的磁盘空间分析工具。它能够帮助用户快速识别并管理那些占用大量空间的文件夹和文件。 功能亮点 快速扫描:TreeSize Free能够迅速扫描整个磁盘卷,展示所有文件夹及其子文件夹的大小,甚至可以细化到单…...

python办公自动化:初识`python-docx`

1.1 什么是python-docx python-docx是一个用于在Python中创建和操作Word文档的库。它提供了一组简洁的API,让开发者可以轻松地生成、修改、和读取Microsoft Word (.docx)文件,而不需要安装Microsoft Office。这使得python-docx成为办公自动化、报告生成…...

LeetCode 算法:划分字母区间 c++

原题链接🔗:划分字母区间难度:中等⭐️⭐️ 题目 给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。 注意,划分结果需要满足:将所有划分结果按顺序连接&#…...

PMP备考指南:策略、时间安排与心得分享

准备和时间安排,我是工作的时间把它顺便考了,大约花了一个月左右时间备考,前面的时间都在筹办婚礼,根本没时间,最后一个月都差点想放弃了,但想想还是冲一把就没有选择延考。 干货见下: ▌&…...

CentOS上通过frp实现HTTPS访问内网

要在CentOS上通过frp实现HTTPS访问内网,你需要按照以下步骤操作: 在外网服务器上安装frps(frp服务端)。 在外网服务器上配置frps,编辑配置文件frps.ini。 在frps服务器上启动frps服务。 在内网服务器上安装frpc&…...

短视频SDK解决方案,高效集成,助力商业变现

美摄科技,作为业界领先的多媒体技术服务商,其全面升级的短视频SDK解决方案,旨在为开发者与内容创作者提供一站式、高效能的创作工具,让每一个灵感都能瞬间转化为触动人心的视频作品。 【一站式解决方案,重塑短视频创作…...

C++系列-继承方式

继承方式 继承的语法继承方式:继承方式的特点继承方式的举例 继承可以减少重复的代码。继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易。基类父类,派生类子类,派生类是在继承了基类的部分成员基础…...

web前端之选项卡的实现、动态添加类名、动态移除类名、动态添加样式、激活、间距、tabBar

MENU 原生(一)原生(二)vue(一) 原生(一) 效果图 html 代码 <div class"card"><div class"tab_bar"><div class"item" onclick"handleTabBar(this)">tabBar1</div><div class"item" onclick&qu…...

sql 优化,提高查询速度

文章目录 一、前言二、建议2.1 使用索引2.2 避免使用select *2.3. 使用表连接代替子查询2.4. 优化WHERE子句&#xff0c;减少返回结果集的大小2.5 用union all代替union2.6 使用合适的聚合策略2.7 避免在WHERE子句中使用函数2.8 使用EXPLAIN分析查询2.9 小表驱动大表2.10 使用窗…...

springboot后端开发-自定义参数校验器

背景 在使用springboot进行后端开发的时候&#xff0c;经常会遇到数据校验的问题&#xff0c; 有时候可能默认的校验器不足以满足自己的需求&#xff0c; 这个时候就需要开发一个自己的校验器 在 Spring Boot 中自定义参数校验器通常涉及以下几个步骤&#xff1a; 1. 定义注解…...

springboot社区帮扶对象管理系统论文源码调试讲解

第2章 开发环境与技术 社区帮扶对象管理系统的编码实现需要搭建一定的环境和使用相应的技术&#xff0c;接下来的内容就是对社区帮扶对象管理系统用到的技术和工具进行介绍。 2.1 MYSQL数据库 本课题所开发的应用程序在数据操作方面是不可预知的&#xff0c;是经常变动的&…...

EmguCV学习笔记 VB.Net 6.2 轮廓处理

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…...

【Python的魅力】:利用Pygame实现游戏坦克大战——含完整源码

文章目录 一、游戏运行效果二、代码实现2.1 项目搭建2.2 加载我方坦克2.3 加载敌方坦克2.4 添加爆炸效果2.5 坦克大战之音效处理 三、完整代码 一、游戏运行效果 二、代码实现 坦克大战游戏 2.1 项目搭建 本游戏主要分为两个对象&#xff0c;分别是我方坦克和敌方坦克。用户可…...

【机器学习】经典CNN架构

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 经典CNN架构1. 引言2. LeNet3. AlexNet4. VGGNet5. GoogLeNet(Inception)6. Res…...

图像数据处理21

五、边缘检测 5.2基于二阶导数的边缘检测 一阶导数&#xff08;如Sobel、Prewitt算子&#xff09;能够捕捉到灰度值的快速变化&#xff0c;但有时会因检测到过多的边缘点而导致边缘线过粗。为了更加精确地定位边缘位置&#xff0c;可以利用二阶导数的零交叉点。零交叉点是是函…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

Java详解LeetCode 热题 100(26):LeetCode 142. 环形链表 II(Linked List Cycle II)详解

文章目录 1. 题目描述1.1 链表节点定义 2. 理解题目2.1 问题可视化2.2 核心挑战 3. 解法一&#xff1a;HashSet 标记访问法3.1 算法思路3.2 Java代码实现3.3 详细执行过程演示3.4 执行结果示例3.5 复杂度分析3.6 优缺点分析 4. 解法二&#xff1a;Floyd 快慢指针法&#xff08;…...

密码学基础——SM4算法

博客主页&#xff1a;christine-rr-CSDN博客 ​​​​专栏主页&#xff1a;密码学 &#x1f4cc; 【今日更新】&#x1f4cc; 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 ​编辑…...

手动给中文分词和 直接用神经网络RNN做有什么区别

手动分词和基于神经网络&#xff08;如 RNN&#xff09;的自动分词在原理、实现方式和效果上有显著差异&#xff0c;以下是核心对比&#xff1a; 1. 实现原理对比 对比维度手动分词&#xff08;规则 / 词典驱动&#xff09;神经网络 RNN 分词&#xff08;数据驱动&#xff09…...

Linux信号保存与处理机制详解

Linux信号的保存与处理涉及多个关键机制&#xff0c;以下是详细的总结&#xff1a; 1. 信号的保存 进程描述符&#xff08;task_struct&#xff09;&#xff1a;每个进程的PCB中包含信号相关信息。 pending信号集&#xff1a;记录已到达但未处理的信号&#xff08;未决信号&a…...

uni-app学习笔记二十七--设置底部菜单TabBar的样式

官方文档地址&#xff1a;uni.setTabBarItem(OBJECT) | uni-app官网 uni.setTabBarItem(OBJECT) 动态设置 tabBar 某一项的内容&#xff0c;通常写在项目的App.vue的onLaunch方法中&#xff0c;用于项目启动时立即执行 重要参数&#xff1a; indexnumber是tabBar 的哪一项&…...

生成对抗网络(GAN)损失函数解读

GAN损失函数的形式&#xff1a; 以下是对每个部分的解读&#xff1a; 1. ⁡, ​ &#xff1a;这个部分表示生成器&#xff08;Generator&#xff09;G的目标是最小化损失函数。 &#xff1a;判别器&#xff08;Discriminator&#xff09;D的目标是最大化损失函数。 GAN的训…...