Dify知识库 本地部署DeepSeek 开启智能体和工作流
博主目前体验了各种RAG系统,以及影视系统、小说系统、音乐服务器、服务监控及自动化报警、自定义信息流、Ai智能体和工作流等各种服务,这些服务的搭建教程后续将会一一介绍。今天给大家介绍一下如何在DOCKER上部署人工智能应用Dify,结合上私有的知识库,调用远程大模型,轻松搭建属于自己的Ai智能体和工作流。
一、什么是Dify
Dify是一个开源的 LLM 应用开发平台。提供从 Agent 构建到 AI workflow 编排、RAG 检索、模型管理等能力,轻松构建和运营生成式 AI 原生应用。比 LangChain 更易用。
官网 https://dify.ai/zh
git https://github.com/langgenius/dify
Dify能够做什么
- 创业,快速的将你的 AI 应用创意变成现实,无论成功和失败都需要加速。在真实世界,已经有几十个团队通过 Dify 构建 MVP(最小可用产品)获得投资,或通过 POC(概念验证)赢得了客户的订单。
- 将 LLM 集成至已有业务,通过引入 LLM 增强现有应用的能力,接入 Dify 的 RESTful API 从而实现 Prompt 与业务代码的解耦,在 Dify 的管理界面是跟踪数据、成本和用量,持续改进应用效果。
- 作为企业级 LLM 基础设施,一些银行和大型互联网公司正在将 Dify 部署为企业内的 LLM 网关,加速 GenAI 技术在企业内的推广,并实现中心化的监管。
- 探索 LLM 的能力边界,即使你是一个技术爱好者,通过 Dify 也可以轻松的实践 Prompt 工程和 Agent 技术,在 GPTs 推出以前就已经有超过 60,000 开发者在 Dify 上创
用技术语言描述如下
- 特 定领域的聊天机器人和AI助理
- 不限长____度的创意文档生成
- 自由链接的知识库问答和搜索
- 低代码的构建面向半自助Agent
- 支持私有化部署
- 支持全球的大模型调用(deepseek、ollama、百度千帆、通义千问等等)
其他开源知识库
为了进行一个清晰的横向对比,我们将从多个维度对MaxKB、AnythingLLM、Dify、FastGPT和Ragflow这些工具或平台进行比较。以下是基于现有信息整理的一个对比表格:
特性/平台 | MaxKb | AnythingLLM | Dify | FastGPT | RagFlow | 其他 |
---|---|---|---|---|---|---|
主要用途 | 知识库管理与检索 | 大规模语言模型的应用开发 | AI应用快速开发与部署 | 快速构建和部署GPT模型 | 基于检索增强生成(RAG)的工作流 | Llamindex |
支持的模型 | 自定义 | 支持多种开源及私有LLMs | 主要支持轻量级本地运行的模型 | GPT系列模型 | 支持通过API集成的各种模型 | OpenWebUI |
硬件要求 | 适中,根据模型大小变化 | 高,特别是对于大型模型 | 较低,优化用于本地部署 | 根据模型大小变化,可能较高 | 中等到高,取决于使用的模型 | - |
用户友好度 | 提供图形界面(GUI),易于使用 | 对开发者友好,但需要一定的技术背景 | 提供CLI和API接口,相对易用 | 提供简化工具,适合快速原型设计 | 需要一定的配置和技术知识 | - |
集成能力 | 可以与其他系统集成 | 强大的集成能力,支持多环境 | 良好的集成能力 | 专注于GPT模型的快速集成 | 强调与外部数据源和模型的集成 | - |
扩展性 | 支持扩展,但有限 | 高度可扩展 | 具有一定的扩展性 | 适用于快速扩展的小型到中型项目 | 设计为高度可扩展 | - |
适用场景 | 知识管理、文档检索 | 复杂的语言处理任务,如对话系统 | 快速开发AI应用,适合初创公司和个人开发者 | 快速原型设计和小型项目的GPT模型部署 | 需要深度文本理解和检索的场景 | - |
社区和支持 | 社区较小,官方支持有限 | 活跃的开源社区 | 新兴平台,社区正在增长 | 相关资源丰富,尤其是关于GPT的内容 | 开源项目,有一定活跃度 | - |
博主会持续关注以上RAG系统的详细特性和应用场景可能需要更深入的研究来精确描述,因此鼓励读者进一步探索每个平台的独特优势和限制。
二、下载安装Dify
1、访问Dify的github站点:
GitHub - langgenius/dify: ,克隆Dify到本地并进入项目目录
git clone https://github.com/langgenius/dify.git
cd dify
cd docker
2、配置环境变量
linux
cp .env.example .env`
window
copy .env.example .env
3、docker compose 启动Dify容器
docker compose up -d
经过几分钟耐心等待 , 镜像下载完毕。
4、访问Dify控制台
第一次访问, 报错
分析本地已启动nginx,与dify使用的80端口冲突。
解决方案 关闭本机的nginx, 重启docker的dify服务
原以为ragflow的镜像很大, 今天dify再次刷新啦博主的认知。接下来要给dify瘦身, 太重啦。 关键是对于开发者来讲, 各种redis、nginx等都是已有的,重复部署。
再次浏览器中访问http://localhost/install,按照提示完成初始化配置。
完成后输入配置的帐户密码登录即可
三、使用Ollama安装文本嵌入模型
⚠️ 如何安装使用Ollama请查看文档:Ollama部署DeepSeek本地模型
-
什么是文本嵌入模型
文本嵌入是一种将文本转换成固定长度的数值向量的技术。这种表示方式有助于机器学习算法更好地理解和处理人类语言。文本嵌入的目标是将相似意义的词或句子映射到接近的空间位置上,以便于计算它们之间的相似度或其他关系。 -
文本嵌入模型的作用
- 语义搜索:通过比较查询与文档的嵌入向量,找到最相关的文档。
- 推荐系统:根据用户兴趣的嵌入向量推荐产品或内容。
- 情感分析:通过分析文本嵌入向量中的模式识别正面、负面或中立的情感倾向。
- 问答系统:帮助理解问题并从大量文本中找到最合适的答案。
- 文本分类:自动对文本进行分类,如新闻文章的主题分类等。
-
如何高效选择RAG的Embedding模型
打开Ollama官网:Ollama,点击上方的Models,选择Embedding
理论上下载量最高的是被大多数人认可的,这里我们将前三位的模型做一个简单的对比
模型名称性能特点(检索准确率等)训练速度推理速度最低内存需求推荐内存需求GPU支持其他要求(如存储空间)
- nomic-embed-text高精度检索,适合简短问题,
- mxbai-embed-large快速处理大规模数据
- snowflake-arctic-embed实用且平衡的选择
根据自己的硬件配置选择一个合适的模型,这里我选择mxbai-embed-large来做演示。
4、部署mxbai-embed-large本地模型
点击mxbai-embed-large,直接复制命令到终端执行,等待下载完成即可。
ollama pull mxbai-embed-large
四、搭建本地知识库
4.1 window系统Docker部署
- 在Dify中上传DeepSeek模型以及文本嵌入模型
在Dify控制台点击头像,在弹出菜单中选择设置
选择模型供应商,点击Ollama,其他deepseek,千问、硅基流动都点一遍
在弹出的页面中,模型类型选择LLM,模型名称输入deepseek-r1:7b(根据自己本地安装的模型名称填写,可通过ollama list命令查看安装的模型列表),基础URL填写本地Ollama Server的地址:如果使用 Docker 部署 Dify,请考虑使用本地网络 IP 地址,例如 http://host.docker.internal:11434 访问服务,对于本地源代码部署,请使用 http://localhost:11434,模型类型选择“对话”,最大token填写“4096”,其余按照下图配置并点击保存
点击保存后如下图所示,点击继续添加模型
模型类型选择“Text Embedding”,模型名称填写“nomic-embed-text”,基础URL与上一步添加deepseek模型的地址一样,然后点击保存即可。
- http://host.docker.internal:11434
[应用1]聊天应用
点击创建空白应用
选择聊天助手,输入应用名称,点击创建
测试一下添加的模型是否能正常运行
- 上传知识库
点击上方工具栏中的知识库,然后点击创建知识库
选择准备好的知识库文件,支持多种格式,点击下一步,我这里简单的写了一点测试文本
索引方式选择高质量,Embedding模型选择我们安装的mxbai-embed-large,其他的默认即可,点击保存
等待嵌入完成
-
为应用添加上下文
点击上方工具栏中的工作室,点击第二步创建的聊天应用,在上下文配置处点击添加按钮,选择上一步上传的知识库,点击添加即可
-
测试知识库
现在按照我们上传的知识库中的内容,向deepseek本地模型发起提问,可以看到模型已完成了对知识库的学习,并准确的回答出了问题。
4.2 群晖NAS部署
这里直接使用Dify官方仓库的docker-compose进行部署,我这里选择直接ssh到群晖NAS上clone代码库(也可以下载release包,直接上传到NAS的特定目录)
先安装Git
再「控制面板」中启用ssh功能
ssh登录到群晖NAS之后,在特定目录下执行如下命令(我是在/Volume2/docker):
git clone https://github.com/langgenius/dify.git
- 修改.env.example
进入到dify/docker目录下,将.env.example修改为.env(或者复制一份为.env)
因为群晖NAS的docker compose版本较低,需要修改一下docker-compse.yaml文件,把不支持的语法删掉
因为80和443端口被我的NAS占用了,所以需要修改.env文件中NGINX对外暴露的http和https端口,这里我设置的是33080和33443(没有需求的也可以不做修改)
同样还是因为docker compose版本较低,需要在dify/docker/volumes手动创建一些文件夹,如下所示:
db/data
redis/data
weaviate
app/storage
certbot/conf/live
certbot/www
- 在Container Manager中创建docker项目
打开Container Manager,选择「项目」,点击「新增」
在弹出的窗口中,有以下几点:
项目名称:dify(或者其他的,任意)
路径:选择Dify的docker目录
docker-compose.yaml:选择已有的
一直下一步,并点击完成
等待拉取镜像、构建项目
服务启动之后,可以看到若干运行着的容器
- 配置大模型API
群晖NAS不能直接运行大模型,而国内又访问不了openai,本机安装ollama也不太现实 ,这里我使用了百度千帆的大模型,有免费版本可以使用,有钱的话也可以开通收费api。下面介绍一下如何配置百度千帆大模型。
(1)进入百度千帆官网
(2)登录之后进入到控制台界面,选择「应用接入」,并创建一个应用,记录下API Key、Secret Key
(3)回到Dify首页,在**「设置」「模型供应商」中选择「文心一言」,输入上面的API Key和Secret Key**,并点击保存。
至此,大模型配置完毕,下面来创建一个智能体玩玩。
【应用2】智能体
接下来,我们首先来试试创建一个智能体,来获取当天「人工智能」相关的资讯。按照下图来创建一个智能体。
在智能体界面,有几个区域需要了解一下,如下图所示
其中:
- 提示词:用于定义智能体的角色,具备的能力等等
- 变量:提取用户输入的变量
- 上下文:可以挂在知识库
- 工具:智能体具备的这里,我这里的智能体具有获取当前时间、使用网页爬虫爬取信息、并进行搜索的能力 下面提问一下看看,用户提示词为:「使用使用各种工具获取一下当天的人工智能资讯,要求给出3条,用中文回答,并给出参考链接」
还可以查看智能体使用工具的中间结果
【应用3】工作流
接下来,介绍一下如何使用Dify搭建工作流,将繁琐的工作搭建成PipeLine,解放我们的双手。让我们来实现一个**「简单的网页爬虫,并自动总结」**的工作流。
同样的,创建一个「工作流」应用。
下面是一个简单的网页爬虫工作流,支持输入一个关键词,并通过网页爬虫爬取相应的信息,然后使用大模型进行总结。
也可以安装Jina,先在marketplace中搜索
打开jina
点击安装旁边的下载
点击右上角“插件”-》本地插件
等几分钟,看到插件列表中出现“jina”,
在工作流中使用jina,需要api, 按照官网步骤获取
输入测试网址,点击单步调试
可以看到新闻内容已爬取
接下来定义需要存储到知识库中,故增加一个代码执行+http节点, 而http请求,需要从知识库获取api
获取知识库api
获取目标存储到知识库的id
输入获取到的api key
配置http请求的body
- 请求地址 https://XXX/v1/datasets/XXX/document/create_by_text, 其中datasets后面的id是目标知识库的id
- api定义为POST
- body
使用的api是知识库:通过文本创建文档
curl --location --request POST 'http://localhost/v1/datasets/{dataset_id}/document/create-by-text' \
--header 'Authorization: Bearer {api_key}' \
--header 'Content-Type: application/json' \
--data-raw '{"name": "text","text": "text","indexing_technique": "high_quality","process_rule": {"mode": "automatic"}}'
配置代码执行节点
import re
def main(arg1):
# 去掉换行符和回车符
cleaned = arg1.replace('\n', '').replace('\r', '')
# 去掉 <think> 标签及其之间的内容
cleaned = re.sub(r'<think>.*?</think>', '', cleaned, flags=re.DOTALL)
return {
'result': cleaned
}
多次调试执行成功, 知识库新增一个
内容略微不满意, 不过仅供测试
下一篇 SQL查询智能体
五、结论
通过Dify与DeepSeek+mxbai-embed-large的有机组合,我们成功搭建了符合企业级需求的智能知识库系统。希望这篇指南能为您提供有价值的帮助,让您在探索人工智能技术的道路上更加顺利。
参考资料:
- Ollama官方文档: https://www.ollama.com/docs
- DeepSeek官网:DeepSeek
- Dify官网:https://dify.ai/zh
- Dify官方文档:欢迎使用 Dify