DeepSeek + Dify = ? 本地知识库!
前言
近年来,大语言模型(LLM)在社会各界都很有热度,各路 AI 层出不穷,比如 OpenAI 的 ChatGPT、Google 的 Gemini、X 的 Grok 和 我们中国国产的 DeepSeek 等等。 其中,DeepSeek 作为开源的 LLM,在本地推理方面表现出色,而 Dify 作为一款低代码 AI 应用平台,为 LLM 的使用和管理提供了便捷的解决方案。 各界人士都希望将 DeepSeek 和 Dify 结合,为他们提供本地知识库的智能问答。本文将介绍如何将 DeepSeek 以及其他一些 LLM 都接入到 Dify,为各位搭建一个半离线甚至于可以说完全理想的本地知识库。
系统要求
在开始部署前,请确保设备满足以下条件:
- 操作系统:Windows 10/11(64位)或 macOS Monterey(12.0)或 Ubuntu 22.04 及以上
- 内存:最低 16GB(推荐 32GB 以上以提升响应速度)
- 显存:最低 8GB(推荐 16GB 以上以提升响应速度)
- 存储空间:至少 20GB 可用空间(模型文件通常占用 10-15GB)
- 网络:稳定互联网连接(下载模型需 5-30 分钟,具体取决于带宽)
部署流程
一、基础环境配置
1. 安装 DeepSeek 模型
Windows/MacOS 用户在本地运行 DeepSeek 可以参考这篇文章: 本地部署 DeepSeek 模型完全指南↗。
Linux 用户可以按照以下方法快速安装:
安装 Ollama
curl -fsSL https://ollama.com/install.sh | sh
下载 DeepSeek 模型
ollama pull deepseek-r1:8b
启动 Ollama 服务
ollama serve &
测试是否成功运行
curl http://localhost:11434/api/tags
如果返回类似于
{"models":[{"name":"deepseek-r1:8b"...
说明模型加载成功。
2. 下载其他所需模型
下载
bge-m3:latest
模型ollama pull bge-m3:latest
如果你想完全离线化的话,可以在 Hugging Face↗ 上下载以下模型
- Rerank 模型: BAAI/bge-reranker-v2-m3↗
- 语音转文本模型: FunAudioLLM/SenseVoiceSmall↗
- 文本转语音模型 fishaudio/fish-speech-1.5↗
然后找到 gguf
格式的模型,下载之后使用 ollama create
命令导入
例如:
ollama create BAAI/bge-reranker-v2-m3 -f path/to/model.gguf
如果没有的话,就需要下载
safetensors
文件然后再进行转换 可以使用下面的一个范例脚本进行转换from transformers import AutoModel import torch model = AutoModel.from_pretrained("fishaudio/fish-speech-1.5") model.save_pretrained("fish-speech-1.5-gguf", safe_serialization=True)
然后使用
llama.cpp
将其转换python convert.py --input fish-speech-1.5-gguf --output fish-speech-1.5.gguf
3. 安装 Docker
1. Linux
Linux 用户可以根据这篇文章安装 Docker: Docker 的安装与使用↗,并根据自身网络环境选择是否配置镜像加速器。
然后安装 Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
2. Windows/MacOS
Windows/MacOS 用户需要到 Docker官网↗ 安装 Docker Desktop 选择符合自己芯片的版本
Windows 用户直接根据指示安装即可,等待安装完成,然后点击 Close and restart 以重启计算机;
MacOS 用户:
打开下载的
Docker.dmg
,拖动 Docker 图标到/Applications
文件夹。打开 Docker Desktop,根据向导完成初始配置
允许 Docker 访问 macOS 文件系统(如有提示)
如果你使用 zsh 或者 bash,可以添加环境变量来使 Docker 命令自动补全
echo 'export PATH="/usr/local/bin:$PATH"' >> ~/.zshrc source ~/.zshrc
Windows 用户可以按 Win+R 键,输入 cmd 回车,打开命令控制行;MacOS 用户可以打开终端
输入以下命令验证是否安装成功
docker version
返回的信息类似这样
$ docker version
Client:
Version: 28.0.1
API version: 1.48
Go version: go1.23.6
Git commit: 068a01e
Built: Wed Feb 26 10:41:52 2025
OS/Arch: windows/amd64
Context: desktop-linux
Server: Docker Desktop 4.39.0 (184744)
Engine:
Version: 28.0.1
API version: 1.48 (minimum version 1.24)
Go version: go1.23.6
Git commit: bbd0a17
Built: Wed Feb 26 10:41:16 2025
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.7.25
GitCommit: bcc810d6b9066471b0b6fa75f557a15a1cbf31bb
runc:
Version: 1.2.4
GitCommit: v1.2.4-0-g6c52b3f
docker-init:
Version: 0.19.0
GitCommit: de40ad0
2.1 配置 Docker 加速器
在 Docker Desktop 上点击 “设置” → “Docker Engine” → 替换成下面的内容 → “Apple & restart”
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"registry-mirrors": [
"https://dockerhub.icu",
"https://docker.chenby.cn",
"https://docker.1panel.live",
"https://docker.awsl9527.cn",
"https://docker.anyhub.us.kg",
"https://dhub.kubesre.xyz",
"https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.c"
]
}
4. 安装 Git
1. Linux/MacOS
Linux 或 MacOS 用户可以使用以下命令来安装 Git
# MacOS
$ brew install git
# Ubuntu/Debian
$ apt install -y git
# RHEL/CentOS
$ yum install -y git
2. Windows
进入 git Download 页面↗ 然后点击页面上的 Download for Windows 进行下载,根据提示进行安装后,设置环境变量:右键“此电脑” → 属性 → 高级系统设置 → 环境变量 → Path → 编辑 → <你安装git的位置\bin>
安装好了之后,打开命令控制行/终端,输入 git --version
检测是否安装成功或者环境变量是否配置成功
大致输出:
$ git --version
git version 2.48.1.windows.1
5. 克隆 Dify 仓库代码并配置 Dify
1. 克隆 Dify 仓库代码
git clone https://github.com/langgenius/dify.git
cd dify/docker
# MacOS/Linux
cp .env.example .env
# Windows
copy .env.example .env
2. 修改 Dify 的配置文件
2.1 修改环境变量
修改 ./dify/docker/.env
文件
Linux 用 vim 打开,Windows/MacOS 直接使用对应的文本编辑器即可
添加/修改以下内容
OLLAMA_BASE_URL=http://host.docker.internal:11434
# 这里填写你数据库的容器名
DB_HOST=docker-db-1
# 最大上传文件大小
UPLOAD_FILE_SIZE_LIMIT=100
2.2 修改 nginx 配置文件
修改 ./dify/docker/nginx/nginx.conf.template
模板配置文件
Linux 用 vim 打开,Windows/MacOS 直接使用对应的文本编辑器即可
修改以下内容
client_max_body_size 100M;
配置好了之后就可以使用下面的命令启动 Dify 了
docker-compose up -d
然后就可以输入 http://localhost/↗ 或者是 http://<你当前的IP地址>
/ 来进入 Dify 中,随后初始化 Dify
二、配置 Dify
1. 设置管理员账户
填写相关信息,设置管理员账户
设置完成之后登录
2. 在 Dify 配置模型
登录后,点击 右上角的头像 → “设置” → “模型供应商”
1. 配置本地模型
“安装模型供应商” 里找到 “Ollama” 点击旁边的安装
1.1 添加对话模型---DeepSeek R1
按照顺序添加模型即可,主题模型上下文长度,可以通过 ollama show <模型名称>
查看
如果经常用大文本,就直接拉满就好
我这里因为 Docker 直接自动配置在环境变量了,所以我直接用 http://host.docker.internal
来替代了,MacOS/Linux 如果有没有配置环境变量的,可以使用 ip a
看看 Docker 的网卡的 IP
1.2 添加向量模型
注意选择 Text Embedding
1.3 其他模型
其他模型(如 Rerank 模型、语音转文本模型、文本转语音模型)请自行上网查询资料,这里不做多余的介绍
2. 配置网络模型
这里我们配置硅基流动作为第三方API服务商
“安装模型供应商” 里找到 “硅基流动” 点击旁边的安装
安装好了之后点击配置,然后把你硅基流动账号的API添加在里面
3. 系统模型配置
三、部署知识库
1. 创建知识库
2. 分段
Dify 的分段推荐使用父子分段模式
1. 通用分段
Dify 的通用分段是 Dify 在处理长文本时的核心机制,它的主要目的是 优化大模型在知识库的查询效果
主要有以下几个特点
- 自适应文本分割:默认使用
\n
作为分段标识 - 适配LLM的上下文窗口:最大分段长度为 4000 tokens,默认为 500 tokens
- 结合RAG技术来优化回答的准确性
- 自适应文本分割:默认使用
所以分段适用于内容简单、结构清晰的文档(如FAQ列表)
2. 父子分段
**父子分段 **是一种层级分段策略,它在知识库中通过 父段 和 子段 结构优化文本分割,使得 检索效果更精准,同时 保留更完整的上下文信息
父子分段 解决了上面 通用分段 的问题:直接将文本切割成 固定大小的片段(如 500、1000 个 Token),但这样容易导致 上下文丢失,尤其是当检索时返回的单个段落信息不足时更容易显露出这一点
父子分级的优化方式:
- 父分段: 存储 较大段 的完整上下文,例如 整个章节 或 完整的长段落(如 1000-2000 个 Token)
- 子分段:细分 小片段,例如 一句话/小段落(如 200-500 个 Token)
- 在 查询时,首先匹配子分段,然后通过子分段关联到父分段,确保答案完整
父子分段的特点:
- 提高检索准确性:子分段更小,提高了检索的召回率(更容易找到相关内容),但单个子分段可能不够完整,因此 同时返回父分段,补充上下文
- 优化 LLM 生成效果:由于 LLM 的 Token 限制(如 4096、8192 等),如果仅检索 完整章节(超长文本),可能超出 Token 限制,但仅检索 短小片段,上下文可能不完整,所以父子分段让 LLM 处理 较小的子分段,同时有父分段提供更完整的上下文
我们可以通过不断的调整参数,预览看一下实际效果
3. 索引模式
索引模式分为两种,一个是高质量索引,一个是经济索引
1. 高质量索引
高质量索引 是在 AI 知识库或检索系统中,通过优化数据结构和存储方式,使得查询更快、匹配更精准的技术。它在 向量数据库(Vector DB)、全文搜索、RAG 等场景 中尤为重要
- 适用场景:企业文档搜索、法律/医学等学术文档查询 等需要高精度的搜索的地方
- 实现方式:采用向量索引(Vector Indexing),结合父子分段,还结合了倒排索引和混合索引
我们这里可以简单配置一下:
- 索引方式选择高质量
- Embedding 模型选择我们上面创建的本地的
bge-m.:latest
模型 - 检索设置选择混合检索,并且选择上 Rerank 模型
- 最后别忘了保存并处理
2. 经济索引
经济索引(Efficient Indexing) 主要关注 存储效率、查询速度 和 计算资源优化,在 向量数据库(Vector DB)、全文搜索、数据库优化 等场景中,经济索引可以 减少存储占用、提高检索效率、降低计算开销。
- 适用场景:
- 轻量级服务器/边缘计算 等设备计算能力邮箱的场景
- 数据库查询优化
- 实现方式:采用向量量化、采用 HNSW 索引优化向量检索,无需消耗额外Token,但语义感知能力较弱
- 优化建议:可以通过调高
TopK
和Score 阈值
平衡召回率和准确率
四、部署应用
1. 创建应用
依次点击 “工作室” → “创建空白应用” → “聊天助手” → 为你的应用起一个名字(也可以修改logo和描述) → “创建”
2. 添加知识库
知识库一次可以选择多个,我们这次只选择三体
3. 召回设置
依次点击 “召回设置” → “选择相关的模型” → “Score 阈值” → “0.8”
4. 调试和预览
输入完 提示词(prompt) 之后,可以开始正式调试AI了
这里是我的提示词
你是一位专业的《三体》小说解读助手,熟悉刘慈欣创作的《三体》三部曲(《三体》《黑暗森林》《死神永生》),并具备深入的科学推理能力。你的目标是根据用户的问题,结合你的知识库,提供专业、准确的回答。
### 你的职责:
1. **基于知识库**:所有回答应以《三体》原著为基础,不臆测、不杜撰。
2. **解释科学概念**:对于书中的物理、宇宙学、数学等概念,提供准确的解释,并尽量通俗易懂。
3. **忠实还原角色**:如果用户提及某个角色(如罗辑、程心、叶文洁等),请根据书中设定描述其性格、经历及影响。
4. **分析故事情节**:如果用户询问某个情节或设定,请结合书中细节,给出合理解读,并可适当分析其深层含义。
5. **讨论哲学思考**:针对书中涉及的黑暗森林法则、技术爆炸、人类文明走向等深度主题,进行严谨讨论。
6. **尊重用户意图**:如果用户希望你以角色身份对话,可以模仿其语气回答,例如:“如果我是罗辑,我会说……”
7. **不回答无关问题**:如果用户提出与《三体》无关的问题,请友善地告知你的专长范围。
### 你的回答风格:
- **专业且有深度**,但不失通俗易懂。
- **客观严谨**,避免主观猜测或无依据的扩展。
- **可以引用原文**,以增强回答的权威性。
---
## 🌟 示例对话:
**用户**:罗辑为什么会成为执剑人?
**三体知识问答 Bot**:罗辑成为执剑人是由于……(基于《黑暗森林》的内容详细回答)
**用户**:黑暗森林法则是什么?它为什么重要?
**三体知识问答 Bot**:黑暗森林法则是……(结合书中案例,详细解析)
**用户**:程心为什么被批评?她真的做错了吗?
**三体知识问答 Bot**:程心在故事中做出的关键决策是……(公正分析,不带个人情绪)
**用户**:如果我是执剑人,应该怎么做?
**三体知识问答 Bot**:作为执剑人,你的选择至关重要……(分析可能的策略)
---
🎯 你已准备就绪,开始回答关于《三体》的问题吧!
输入聊天内容,点击发送
调试成功之后可以点击发布,这里有多种部署方式
返回到工作室之后可以发现有我们刚刚部署好的“我就是大刘”的聊天AI应用了