跳到主要内容

【中级】部署 Dify 本地知识库

更新日志​

版本日期变更描述
1.0.02026-03-04初始版本,包含在 AI 算力本 MTT AIBOOK(型号 A141)上安装和配置构建本地知识库环境依赖,以及配置本地知识库的完整指南
1.0.12026-08-10更新对 vLLM 环境部署的相关描述。

1. 项目简介​

本教程旨在指导开发者在 AI 算力本 MTT AIBOOK 上基于 Dify 和本地大模型搭建自己的本地个人知识库。您可以基于本项目的内容,学会把自己的个人资料、过往输出文章、日记等所有个人信息上传到本地知识库,打造自己的私人助理。

本项目将按照以下主线展开:

  • 安装 docker
  • 安装 docker-compose
  • 部署 Ollama
  • 部署 vLLM
  • 部署 Dify
  • 创建 Dify 应用
  • 创建 Dify 知识库
  • 将本地模型接入 Dify 工作流

并最终结合最佳实践,带您快速上手完成本地个人知识库的搭建。

docker 简介: Docker 为 Dify 提供了一键式的容器化部署方案。它将 Dify 及其所需的数据库、中间件等组件完整打包,确保应用在不同服务器上都能实现"开箱即用"的一致性体验。

Ollama 简介: Ollama 是一个用于在本地设备上运行大语言模型的工具,可以一键下载并运行如 Llama、Qwen、Mistral 等模型。它让本地部署 AI 变得非常简单,适合个人开发者或企业在本地环境运行 AI。值得注意的是,当前在 MTT AIBOOK 上,Ollama 暂未支持 GPU 加速,只能使用 CPU 推理。本文档将基于 Ollama 运行文本向量化模型。

vLLM 简介: vLLM 是一个高性能的大模型推理框架,专门用于部署和服务大语言模型。它通过 PagedAttention 等优化技术显著提升推理吞吐量和显存利用率,当前在 MTT AIBOOK 已支持基于 vLLM 对推理过程进行 GPU 加速。本文档将基于 vLLM 运行大语言模型。

Dify 简介: Dify 是一个开源的 AI 应用开发平台,可以通过可视化方式快速构建 AI 助手、RAG 知识库、AI 工作流等应用。它支持接入多种大模型,并提供完整的应用管理和数据管理能力。

难度:中级,适合有编程基础的开发者体验

2. 前置条件​

在开始本教程之前,请确保您已满足以下所有条件:

  • 硬件要求:
    • AI 算力本 MTT AIBOOK,型号 A141
    • 网络连接(用于拉取 docker 镜像、下载模型及依赖包)
    • 充足的存储空间
  • 软件要求:
    • MTT AIBOOK 操作系统 AIOS(1.3.3-B17)及以上版本(文档基于 1.3.3-B17 版本系统操作,并非强制性要求必须 1.3.3-B17 及以上版本)
    • 已安装 docker-compose(可通过本教程中的步骤进行安装)
    • 已安装 Ollama(可通过本教程中的步骤进行安装)

3. 环境部署​

本章节将详细描述如何创建工作目录、安装 docker、安装 docker-compose、通过 Ollama 拉取向量模型并推理、通过 vLLM 基于 GPU 加速推理大模型、部署 Dify、创建 Dify 应用、创建 Dify 知识库并最终将本地模型接入 Dify 工作流。

3.1 创建工作目录​

创建一个专门用于本地知识库搭建的工作目录,有助于您更好地管理相关文件和资源。

执行以下命令即可完成工作目录的创建:

mkdir ~/local-know-base && cd ~/local-know-base

3.2 安装 docker​

若您的设备已安装过 docker,可跳过此步骤。

执行以下命令即可完成 docker 的安装:

sudo apt update
sudo apt-get install \
docker.io=24.0.7-0ubuntu2~22.04.1 \
containerd=1.7.2-0ubuntu1~22.04.1
注意

执行完以下命令后,需要重启设备生效:

sudo usermod -aG docker $USER

以上操作全部执行完毕后,可以执行以下命令验证 docker 是否成功安装:

docker --version

14_dify_overview1

3.3 安装 docker-compose​

docker-compose 是一个用于定义和运行多容器 Docker 应用程序的工具,它可以帮助我们更方便地管理 Dify 的容器化部署。

sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.6/docker-compose-linux-aarch64" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

3.4 安装 Ollama​

sudo apt install curl
curl -fsSL https://ollama.com/install.sh | OLLAMA_VERSION=0.15.1 sh

安装完成后,打开终端,输入以下命令确认版本:

ollama --version

如果输出为 ollama version is 0.15.1,说明安装成功。

3.5 拉取向量模型 nomic-embed-text​

向量模型 nomic-embed-text 用于将文档内容转换为向量表示,以便进行语义搜索和相似度计算。拉取该模型是构建本地知识库的必要步骤。

ollama pull nomic-embed-text

3.6 部署 vLLM​

本文档将基于 vLLM 进行本地大模型的推理,因此需要安装部署 vLLM 及其相关依赖的环境,在确认 MTT AIBOOK 的系统版本后,根据以下链接的网页跳转到对应系统版本的安装部署指导文档,部署正确的 vLLM 及其环境依赖:

https://docs.mthreads.com/vllm-musa-m1000/vllm-musa-m1000-doc-online/AIBook/

根据文档指引部署成功后,即可进行下一步。

备注

注意:AIOS 1.5.0 及以上版本,相关的 vLLM 及 vLLM 依赖环境将由系统自动更新,而无需用户手动更新。

3.7 部署 Dify​

首先,克隆 Dify 官方开源仓库到工作目录:

cd ~/local-know-base
git clone https://github.com/langgenius/dify.git

Dify 使用 .env 文件管理配置。我们通过复制示例文件来创建它:

cd ~/local-know-base/dify/docker
cp .env.example .env

由于我们只是将 Dify 运行在本地,因此无需修改 .env 文件的任何内容。

随后,我们使用 docker-compose 在后台启动 .env 文件中记录的所有相关服务(包括数据库、向量数据库、API 和 Web 前端):

docker-compose up -d

注:此步骤会从 Docker Hub 拉取多个镜像,耗时取决于网络带宽。

14_dify_img23

镜像拉取结束后,打开浏览器,输入网址:http://localhost

即可进入本地部署的 Dify 界面,首次进入页面,系统会提示您设置管理员邮箱、用户名和密码。

14_dify_img27

注册成功后,登录管理员账户,进入 Dify 主界面,如下所示:

14_dify_img28

3.8 使 Ollama 服务能够接受来自 Dify 的连接请求​

由于 Ollama 默认只监听 127.0.0.1,如果不配置 Ollama 服务使其能够接受来自外部网络的连接请求,可能会导致 Dify 无法正常向 Ollama 发起请求。

打开终端后,执行:

sudo mkdir -p /etc/systemd/system/ollama.service.d && \
echo '[Service] Environment="OLLAMA_HOST=0.0.0.0"' | sudo tee /etc/systemd/system/ollama.service.d/override.conf
sudo systemctl daemon-reload
sudo systemctl restart ollama

即可使得 Ollama 能够正常处理来自 Dify 的请求。

3.9 下载 Qwen-8B 并启动 vLLM 服务​

若您已经下载好 Qwen-8B 模型,则跳过该步骤。

打开终端后,执行:

# 若 lfs 未下载,则执行以下命令下载 lfs
git lfs install
git clone https://www.modelscope.cn/Qwen/Qwen3-8B.git

14_dify_img29

由于模型较大,需要一定等待时间。

模型下载完成后,我们在与模型存放文件夹内创建一个 vLLM 框架启动脚本。

14_dify_img30

修改其文件名为:run_vllm.sh

脚本文件内容如下:

run_vllm.sh:

#!/bin/bash
python -m vLLM.entrypoints.openai.api_server \
--model ***/path/to***/Qwen3-8B \
--served-model-name qwen3-8b \
--host 0.0.0.0 \
--port 8000 \
--gpu-memory-utilization 0.9 \
--trust-remote-code
注意

***/path/to*** 需要更改为 Qwen3-8B 模型实际存放路径,此处由于我们将 run_vllm.sh 脚本与 Qwen3-8B 模型存放在同一文件夹内,因此 ***/path/to*** 可以替换为 .。

14_dify_img31

run_vllm.sh 脚本创建成功后,我们在脚本存放目录下单击右键,打开终端

14_dify_img32

随后执行命令(请确保每次执行 run_vllm.sh 脚本时,都处于 localknowbase 的虚拟环境中):

conda activate localknowbase
bash run_vllm.sh

启动 vLLM 框架。

3.10 Dify 接入文本向量化模型​

在 Dify 中配置文本向量化模型(Embedding Model)是实现 RAG(检索增强生成)功能的关键步骤。通过将文档内容转换为向量表示,系统能够进行语义搜索和相似度计算,从而实现基于知识库的精准问答。

Dify 支持通过 Ollama 接入本地部署的向量模型。由于我们在 3.4 节已经通过 Ollama 拉取了 nomic-embed-text 模型,现在只需在 Dify 中完成配置即可。

以下是 Dify 接入 Ollama 文本向量化模型的详细步骤:

首先,确保 Ollama 服务已正确配置为接受外部连接。在 3.8 节中,我们已经完成了 Ollama 服务的配置,使其能够监听 0.0.0.0 地址。您可以通过以下命令验证 Ollama 服务状态:

sudo systemctl status ollama

如果服务正常运行,您应该看到 active (running) 状态。

接下来,在 Dify 中配置 Embedding 模型:

  1. 登录 Dify 后,点击右上角个人头像,选择 "设置" 进入设置页面
  2. 在左侧菜单中选择 "模型供应商",进入模型配置页面
  3. 在搜索框中输入 "ollama",找到 Ollama 插件并点击安装。如果之前配置 LLM 时已经安装过 Ollama 插件,则可以跳过此步骤
  4. 安装完成后,点击 "添加模型" 按钮,在弹出的对话框中进行如下配置:
    • 模型类型:选择 Text Embedding(文本嵌入)
    • 模型名称:输入 nomic-embed-text
    • 基础 URL:输入 http://172.17.0.1:11434
  5. 点击 "保存" 完成配置

配置参数说明:

  • 模型类型:Text Embedding 表示这是一个文本向量化模型,用于将文本转换为向量表示
  • 模型名称:nomic-embed-text 是 Ollama 提供的高性能向量模型,支持多语言文本嵌入
  • 基础 URL:172.17.0.1 是 Docker 默认的网关地址,Dify 容器通过此地址访问宿主机上的 Ollama 服务。11434 是 Ollama 的默认端口

验证配置是否成功:

配置完成后,您可以在模型供应商页面看到已添加的 nomic-embed-text 模型。模型名称旁会显示 Text Embedding 标签,表示这是一个文本向量化模型。

此时,您已经成功完成了 Dify 接入本地文本向量化模型的配置。接下来,在创建知识库时,Dify 将自动使用此模型对上传的文档进行向量化处理,为后续的语义检索和问答提供基础支持。

技术原理说明:

文本向量化(Text Embedding)是将文本转换为高维数值向量的过程。nomic-embed-text 模型基于 Transformer 架构,能够将输入文本编码为固定长度的稠密向量。这些向量捕获了文本的语义信息,使得语义相似的文本在向量空间中距离较近。

在 RAG 流程中,当用户上传文档时:

  1. 文档被切分为适当大小的文本块
  2. 每个文本块通过 Embedding 模型转换为向量
  3. 向量被存储到向量数据库(Weaviate)中
  4. 用户提问时,问题也被转换为向量
  5. 系统在向量数据库中检索最相似的文本块
  6. 检索结果作为上下文提供给 LLM 生成回答

这种架构确保了知识库问答的准确性和相关性,同时所有数据处理都在本地完成,充分保护用户隐私。

4. 最佳实践​

经过之前的努力,您已经成功在 MTT AIBOOK 上部署了 Dify,并为我们基于 Dify 搭建本地个人知识库做好的充分准备。此时我们可以发挥 MTT AIBOOK 本地算力的强大能力,基于 Dify 与本地模型搭建个人本地知识库。由于模型均运行于本机,因此能够最大程度保证隐私,所有数据不上云。

4.1 访问 Dify 主页面​

打开浏览器,输入 http://localhost,即进入 Dify 主页面。

14_dify_step2

4.2 使 Dify 接入本地模型​

4.2.1 使 Dify 接入本地大语言模型(LLM)​

首次进入主界面时,需要先点击右上角的个人头像,展开菜单后,点击 "设置"。

14_dify_step3

进入设置界面后,点击 "模型供应商",即可进入模型配置页面。

14_dify_img4

随后点击搜索框,输入 vllm,点击安装。

14_dify_img5

vLLM 安装成功后,单击 "添加模型",即可将刚刚您启动的 vLLM 服务添加入 Dify 的模型供应商中。

14_dify_img6

根据下图输入对应信息:

14_dify_img7

项目值说明
模型名称qwen3-8b与 run_vllm.sh 脚本中的 served-model-name 参数保持一致,不要有空格或大小写错误
API endpoint URLhttp://172.17.0.1:8000/v1Dify 容器通过 Docker 的虚拟网关 (172.17.0.1),找到宿主机上 8000 端口的程序,并按照 OpenAI 标准的 /v1 格式与它进行对话

成功配置后,即可在模型配置页面显示我们已经配置的 qwen3-8b 模型。

14_dify_img8

4.2.2 使 Dify 接入本地文本向量化模型(Embedding)​

首次进入主界面时,需要先点击右上角的个人头像,展开菜单后,点击 "设置"。

14_dify_step3

进入设置界面后,点击 "模型供应商",即可进入模型配置页面。

14_dify_img4

随后点击搜索框,输入 ollama,点击安装。

14_dify_img9

Ollama 插件安装成功后,单击 "添加模型",即可将在后台运行的本地 Ollama 服务添加入 Dify 的模型供应商中。

14_dify_img10

项目值说明
模型名称nomic-embed-text不要有空格或大小写错误
API endpoint URLhttp://172.17.0.1:11434注意对 Ollama 设置的端口号是否为 11434,默认为该值

成功配置后,即可在模型配置页面显示我们已经配置的 nomic-embed-text 模型。

14_dify_img11

4.3 创建知识库​

  1. 在 Dify 主界面,点击上方的 "知识库",点击 "创建知识库"

    14_dify_img13

  2. 导入已有文本,上传资料,点击 "下一步"

    14_dify_img14

  3. 随后,配置索引方式(推荐高质量)、检索设置参数后,点击 "保存并处理"

    14_dify_img15

  4. 知识库创建完毕,等待向量化模型针对传入的文件进行文本向量化处理

    14_dify_img16

  5. 等待向量化处理完成后,我们可以正常使用该知识库

    14_dify_img17

4.4 创建个人知识库应用​

  1. 点击主页面的 "从应用模板创建",进入模板应用创建流程

    14_dify_img18

  2. 点击 "知识库 + 聊天机器人",即可创建本地个人知识库应用

    14_dify_img19 14_dify_img20

  3. 创建成功后,将自动进入应用工作流编排页面,选中 LLM 节点与参数提取器节点,将这两个节点的默认选中模型分别由 gpt3.5-turbo 与 gpt-4o 更换为本地模型 qwen3-8b

    14_dify_img21

  4. 点击模型后,选中我们配置好的 qwen3-8b 模型,即可完成这两个节点由默认的云端模型切换为本地模型 qwen3-8b

    14_dify_img22

  5. 点击知识检索节点,随后点击 "+" 添加知识库

    14_dify_img24 14_dify_img25

4.5 使用个人知识库应用​

点击 "预览",即可在右侧聊天框输入你的问题。

14_dify_img26

当用户在聊天框输入问题时,系统会瞬间启动以下流程:

  1. 查询向量化 (Query Embedding):系统首先截获用户的提问,并将其发送给同一个 Embedding 模型,把这句简短的提问也转化为一个高维向量
  2. 相似度检索 (Vector Search):系统拿着这个代表"问题"的向量,去向量数据库(Weaviate)的高维空间中进行近似最近邻搜索(ANN)。通过计算余弦相似度(Cosine Similarity),数据库会光速返回与问题语义最接近的几个文本块(即 Top-K 召回)
  3. 上下文组装 (Prompt Assembling):检索到相关文本块后,Dify 会在后台将这些文本块与用户原本的问题拼接在一起,构建成一个结构化的提示词(Prompt)。类似于拼成这样:"请根据以下参考资料回答问题。资料:[召回的文本块 1]、[召回的文本块 2]。问题:[摩尔线程发布的产品是什么?]"
  4. 大模型生成 (LLM Generation):最后,这个包含了丰富背景知识的"超级提示词"会被发送给您的主语言模型(例如本地部署的 qwen3-8b)。模型根据被"增强"的上下文,生成最终的专业、准确且附带引用来源的回答

5. 附录​

5.1 常见问题​

问题描述可能原因解决方案
docker-compose 安装失败网络问题或下载链接错误1. 检查网络连接
2. 确认下载链接是否正确
3. 尝试使用其他版本的 docker-compose
向量模型拉取失败网络问题或模型不存在1. 检查网络连接
2. 确认模型名称是否正确
3. 尝试使用其他向量模型
docker-compose.yml 文件配置错误语法错误或参数配置不当1. 检查 docker-compose.yml 文件的语法是否正确(尤其注意缩进,与 python 类似,需要使用空格进行缩进)
2. 确认参数配置是否符合要求
3. 参考官方文档进行配置
Ollama 服务无法连接Ollama 未启动或配置不正确,未监听 0.0.0.0 地址1. 检查 Ollama 服务状态:sudo systemctl status ollama
2. 确认已按照 3.8 节配置 OLLAMA_HOST 环境变量
3. 重启 Ollama 服务:sudo systemctl restart ollama
vLLM 启动失败或报错模型路径错误、GPU 内存不足或 conda 环境未激活1. 检查模型路径是否正确
2. 降低 gpu-memory-utilization 参数值(如改为 0.7)
3. 确认已激活 localknowbase 环境:conda activate localknowbase
Dify 无法访问本地模型Docker 容器无法访问宿主机服务,或端口配置错误1. 确认使用 172.17.0.1 作为宿主机地址
2. 检查 Ollama 和 vLLM 服务端口是否正确
3. 检查防火墙设置是否允许容器访问宿主机
知识库文档处理失败文档格式不支持、文件过大或 Embedding 模型配置错误1. 确认文档格式为 PDF、TXT、DOCX 等支持的格式
2. 尝试减小文件大小或分批上传
3. 检查 Embedding 模型配置是否正确
知识库问答效果不佳检索参数设置不当、文档切分策略不合适或模型能力不足1. 调整检索设置中的 Top-K 值和相似度阈值
2. 尝试不同的索引方式(高质量/经济)
3. 考虑使用更大的语言模型提升理解能力
Dify 页面加载缓慢或卡顿系统资源不足,特别是内存或 CPU 占用过高1. 关闭不必要的应用程序释放资源
2. 检查 Docker 容器资源使用情况:docker stats
3. 考虑重启 Dify 服务:docker-compose restart

5.2 相关资源​