Featured image of post DeepSeek+Dify=?本地数据库!

DeepSeek+Dify=?本地数据库!

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 用户可以按照以下方法快速安装:

  1. 安装 Ollama

    1
    
    curl -fsSL https://ollama.com/install.sh | sh
    
  2. 下载 DeepSeek 模型

    1
    
    ollama pull deepseek-r1:8b
    
  3. 启动 Ollama 服务

    1
    
    ollama serve &
    
  4. 测试是否成功运行

    1
    
    curl http://localhost:11434/api/tags
    

    如果返回类似于

    1
    
    {"models":[{"name":"deepseek-r1:8b"...
    

    说明模型加载成功。

2. 下载其他所需模型

  1. 下载 bge-m3:latest 模型

    1
    
    ollama pull bge-m3:latest
    

如果你想完全离线化的话,可以在 Hugging Face 上下载以下模型

  1. Rerank 模型: BAAI/bge-reranker-v2-m3
  2. 语音转文本模型: FunAudioLLM/SenseVoiceSmall
  3. 文本转语音模型 fishaudio/fish-speech-1.5

然后找到 gguf 格式的模型,下载之后使用 ollama create 命令导入

例如:

1
ollama create BAAI/bge-reranker-v2-m3 -f path/to/model.gguf
  • 如果没有的话,就需要下载 safetensors 文件然后再进行转换 可以使用下面的一个范例脚本进行转换

    1
    2
    3
    4
    5
    
    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 将其转换

    1
    
    python convert.py --input fish-speech-1.5-gguf --output fish-speech-1.5.gguf
    

3. 安装 Docker

1. Linux

​ Linux 用户可以根据这篇文章安装 Docker: Docker 的安装与使用,并根据自身网络环境选择是否配置镜像加速器。

​ 然后安装 Docker Compose

1
2
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 用户:

    1. 打开下载的 Docker.dmg,拖动 Docker 图标到 /Applications 文件夹。

    2. 打开 Docker Desktop,根据向导完成初始配置

    3. 允许 Docker 访问 macOS 文件系统(如有提示)

    4. 如果你使用 zsh 或者 bash,可以添加环境变量来使 Docker 命令自动补全

      1
      2
      
      echo 'export PATH="/usr/local/bin:$PATH"' >> ~/.zshrc
      source ~/.zshrc
      

​ Windows 用户可以按 Win+R 键,输入 cmd 回车,打开命令控制行;MacOS 用户可以打开终端

​ 输入以下命令验证是否安装成功

1
docker version

返回的信息类似这样

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
$ 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”

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
{
  "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

1
2
3
4
5
6
7
8
# 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 检测是否安装成功或者环境变量是否配置成功

大致输出:

1
2
$ git --version
git version 2.48.1.windows.1

5. 克隆 Dify 仓库代码并配置 Dify

1. 克隆 Dify 仓库代码
1
2
3
4
5
6
7
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 直接使用对应的文本编辑器即可

​ 添加/修改以下内容

1
2
3
4
5
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 直接使用对应的文本编辑器即可

​ 修改以下内容

1
client_max_body_size 100M;

​ 配置好了之后就可以使用下面的命令启动 Dify 了

1
docker-compose up -d

启动Dify

​ 然后就可以输入 http://localhost/ 或者是 http://<你当前的IP地址>/ 来进入 Dify 中,随后初始化 Dify

初始化Dify


二、配置 Dify

1. 设置管理员账户

​ 填写相关信息,设置管理员账户

设置管理员账户

​ 设置完成之后登录

登录界面

2. 在 Dify 配置模型

​ 登录后,点击 右上角的头像 → “设置” → “模型供应商”

Step 1Step 2

1. 配置本地模型

​ “安装模型供应商” 里找到 “Ollama” 点击旁边的安装

安装Ollama

1.1 添加对话模型—DeepSeek R1

​ 按照顺序添加模型即可,主题模型上下文长度,可以通过 ollama show <模型名称> 查看

​ 如果经常用大文本,就直接拉满就好

​ 我这里因为 Docker 直接自动配置在环境变量了,所以我直接用 http://host.docker.internal 来替代了,MacOS/Linux 如果有没有配置环境变量的,可以使用 ip a 看看 Docker 的网卡的 IP

DeepSeek-R1配置

1.2 添加向量模型

​ 注意选择 Text Embedding

bge-m3配置

1.3 其他模型

​ 其他模型(如 Rerank 模型、语音转文本模型、文本转语音模型)请自行上网查询资料,这里不做多余的介绍

2. 配置网络模型

​ 这里我们配置硅基流动作为第三方API服务商

​ “安装模型供应商” 里找到 “硅基流动” 点击旁边的安装

安装硅基流动

​ 安装好了之后点击配置,然后把你硅基流动账号的API添加在里面

设置硅基流动API

3. 系统模型配置

系统模型设置


三、部署知识库

1. 创建知识库

Step 1Step 215

2. 分段

Dify 的分段推荐使用父子分段模式

1. 通用分段
  • Dify 的通用分段是 Dify 在处理长文本时的核心机制,它的主要目的是 优化大模型在知识库的查询效果

  • 主要有以下几个特点

    1. 自适应文本分割:默认使用 \n 作为分段标识
    2. 适配LLM的上下文窗口:最大分段长度为 4000 tokens,默认为 500 tokens
    3. 结合RAG技术来优化回答的准确性
  • 所以分段适用于内容简单结构清晰的文档(如FAQ列表)

Show Universal Chunking

2. 父子分段

​ **父子分段 **是一种层级分段策略,它在知识库中通过 父段子段 结构优化文本分割,使得 检索效果更精准,同时 保留更完整的上下文信息

​ 父子分段 解决了上面 通用分段 的问题:直接将文本切割成 固定大小的片段(如 500、1000 个 Token),但这样容易导致 上下文丢失,尤其是当检索时返回的单个段落信息不足时更容易显露出这一点

​ 父子分级的优化方式:

  • 父分段: 存储 较大段 的完整上下文,例如 整个章节 或 完整的长段落(如 1000-2000 个 Token)
  • 子分段:细分 小片段,例如 一句话/小段落(如 200-500 个 Token)
  • 在 查询时,首先匹配子分段,然后通过子分段关联到父分段,确保答案完整

​ 父子分段的特点:

  1. 提高检索准确性:子分段更小,提高了检索的召回率(更容易找到相关内容),但单个子分段可能不够完整,因此 同时返回父分段,补充上下文
  2. 优化 LLM 生成效果:由于 LLM 的 Token 限制(如 4096、8192 等),如果仅检索 完整章节(超长文本),可能超出 Token 限制,但仅检索 短小片段,上下文可能不完整,所以父子分段让 LLM 处理 较小的子分段,同时有父分段提供更完整的上下文

官方示意图

​ 我们可以通过不断的调整参数,预览看一下实际效果

Priview

3. 索引模式

​ 索引模式分为两种,一个是高质量索引,一个是经济索引

1. 高质量索引

​ 高质量索引 是在 AI 知识库或检索系统中,通过优化数据结构和存储方式,使得查询更快、匹配更精准的技术。它在 向量数据库(Vector DB)、全文搜索、RAG 等场景 中尤为重要

  • 适用场景:企业文档搜索、法律/医学等学术文档查询 等需要高精度的搜索的地方
  • 实现方式:采用向量索引(Vector Indexing),结合父子分段,还结合了倒排索引和混合索引

​ 我们这里可以简单配置一下:

  1. 索引方式选择高质量
  2. Embedding 模型选择我们上面创建的本地的 bge-m.:latest 模型
  3. 检索设置选择混合检索,并且选择上 Rerank 模型
  4. 最后别忘了保存并处理

18

2. 经济索引

​ 经济索引(Efficient Indexing) 主要关注 存储效率、查询速度 和 计算资源优化,在 向量数据库(Vector DB)、全文搜索、数据库优化 等场景中,经济索引可以 减少存储占用、提高检索效率、降低计算开销。

  • 适用场景:
    1. 轻量级服务器/边缘计算 等设备计算能力邮箱的场景
    2. 数据库查询优化
  • 实现方式:采用向量量化、采用 HNSW 索引优化向量检索,无需消耗额外Token,但语义感知能力较弱
  • 优化建议:可以通过调高 TopKScore 阈值 平衡召回率和准确率

四、部署应用

1. 创建应用

​ 依次点击 “工作室” → “创建空白应用” → “聊天助手” → 为你的应用起一个名字(也可以修改logo和描述) → “创建”

Step 1Step 2

2. 添加知识库

​ 知识库一次可以选择多个,我们这次只选择三体

选择知识库

3. 召回设置

​ 依次点击 “召回设置” → “选择相关的模型” → “Score 阈值” → “0.8”

Step 1Step 2

4. 调试和预览

​ 输入完 提示词(prompt) 之后,可以开始正式调试AI了

​ 这里是我的提示词

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
你是一位专业的《三体》小说解读助手,熟悉刘慈欣创作的《三体》三部曲(《三体》《黑暗森林》《死神永生》),并具备深入的科学推理能力。你的目标是根据用户的问题,结合你的知识库,提供专业、准确的回答。

### 你的职责:
1. **基于知识库**:所有回答应以《三体》原著为基础,不臆测、不杜撰。
2. **解释科学概念**:对于书中的物理、宇宙学、数学等概念,提供准确的解释,并尽量通俗易懂。
3. **忠实还原角色**:如果用户提及某个角色(如罗辑、程心、叶文洁等),请根据书中设定描述其性格、经历及影响。
4. **分析故事情节**:如果用户询问某个情节或设定,请结合书中细节,给出合理解读,并可适当分析其深层含义。
5. **讨论哲学思考**:针对书中涉及的黑暗森林法则、技术爆炸、人类文明走向等深度主题,进行严谨讨论。
6. **尊重用户意图**:如果用户希望你以角色身份对话,可以模仿其语气回答,例如:“如果我是罗辑,我会说……”
7. **不回答无关问题**:如果用户提出与《三体》无关的问题,请友善地告知你的专长范围。

### 你的回答风格:
- **专业且有深度**,但不失通俗易懂。
- **客观严谨**,避免主观猜测或无依据的扩展。
- **可以引用原文**,以增强回答的权威性。

---

## 🌟 示例对话:
**用户**:罗辑为什么会成为执剑人?  
**三体知识问答 Bot**:罗辑成为执剑人是由于……(基于《黑暗森林》的内容详细回答)  

**用户**:黑暗森林法则是什么?它为什么重要?  
**三体知识问答 Bot**:黑暗森林法则是……(结合书中案例,详细解析)

**用户**:程心为什么被批评?她真的做错了吗?  
**三体知识问答 Bot**:程心在故事中做出的关键决策是……(公正分析,不带个人情绪)

**用户**:如果我是执剑人,应该怎么做?  
**三体知识问答 Bot**:作为执剑人,你的选择至关重要……(分析可能的策略)

---

🎯 你已准备就绪,开始回答关于《三体》的问题吧!

​ 输入聊天内容,点击发送

展示

​ 调试成功之后可以点击发布,这里有多种部署方式

应用部署

​ 返回到工作室之后可以发现有我们刚刚部署好的“我就是大刘”的聊天AI应用了

26

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计
备案图标 辽公网安备21010602001101 辽ICP备2024027190号-1