在当今人工智能飞速发展的时代,大语言模型(LLMs)已经成为众多领域的核心技术驱动力。无论是在智能客服、智能写作,还是在数据分析、决策支持等方面,大语言模型都展现出了强大的能力和潜力。然而,随着数据安全和隐私保护意识的不断提高,越来越多的企业和开发者开始寻求本地化部署大语言模型的解决方案,以确保数据的安全性和可控性。
搭建本地化知识库并实现接口调用,对于企业和开发者来说具有至关重要的意义。在实际应用场景中,企业内部往往拥有大量的业务数据、文档资料等,这些数据蕴含着丰富的知识和信息。通过搭建本地化知识库,企业可以将这些数据进行有效的整合和管理,利用大语言模型的强大能力,实现对知识的快速检索、智能问答和深度分析。这不仅可以提高企业内部的工作效率,还可以为企业的决策提供更加准确和有力的支持。
在众多的技术方案中,Dify + Ollama + DeepSeek 技术栈脱颖而出,成为了搭建本地化知识库和实现接口调用的理想选择。Dify 是一个开源的 LLM 应用开发平台,它提供了丰富的功能和工具,使得开发者可以轻松地构建和部署基于大语言模型的应用程序。Ollama 则是一个简化 LLM 本地部署的工具,它可以让用户在个人计算机或服务器上轻松运行多种开源语言大模型,无需依赖云端服务,也无需复杂的配置。DeepSeek 作为国产大模型的佼佼者,具有千亿参数规模,在中文基准测试中得分高达 91.5%,推理效率比传统架构提升了 5 倍,而且 API 调用成本低至 0.5 元 / 百万 tokens (各家云平台的 DeepSeek 调用要低于官方价格建议采用这种方式:薅!)。这三者的结合,为我们提供了一个高效、安全、低成本的本地化知识库搭建和接口调用解决方案。接下来我会将详细介绍如何在 Windows 和 Linux 两种环境下部署这一套技术栈,并实现知识库的训练和调用以及接口调用。
Dify 是一个开源的 LLM 应用开发平台 ,它融合了后端即服务(Backend as Service)和 LLMOps 的理念,旨在帮助开发者,甚至是非技术人员,能够快速搭建和部署生成式 AI 应用程序。Dify 具有以下显著特点和功能:
在搭建知识库和实现接口调用中,Dify 起着关键的作用。它提供了统一的接口和管理平台,使得用户可以方便地将不同的模型和知识库进行集成,实现高效的知识检索和应用开发。通过 Dify,我们可以快速搭建一个功能强大的知识库应用,并且能够轻松地实现接口调用,将知识库的能力集成到其他系统中。
Ollama 是一个开源的本地化工具,专门用于简化大型语言模型的本地运行和部署。它的出现,使得用户可以在个人计算机或服务器上轻松运行多种开源语言大模型,无需依赖云端服务,也无需进行复杂的配置。Ollama 具有以下优势:
在我们的技术栈中,Ollama 主要负责在本地运行 DeepSeek 模型,并为 Dify 提供模型服务。通过 Ollama,Dify 可以方便地调用本地的 DeepSeek 模型,实现知识库的训练和调用。同时,Ollama 的本地运行特性,也保证了我们的数据安全和隐私,避免了数据在传输和存储过程中的风险。
DeepSeek 是国产大模型中的佼佼者,具有千亿参数规模,在自然语言处理任务中展现出了卓越的性能。它具有以下突出优势:
在本地知识库训练和调用中,DeepSeek 作为核心模型,为整个系统提供了强大的语言理解和生成能力。它能够对知识库中的数据进行深入分析和理解,当用户提出问题时,能够快速准确地从知识库中检索相关信息,并生成高质量的回答。其高推理效率和低成本的特点,使得我们可以在本地环境中高效地运行知识库系统,为用户提供优质的服务。
在 Windows 系统下进行部署,首先需要确保系统满足一定的要求。对于 CPU,建议使用英特尔酷睿 i5 及以上或 AMD Ryzen 5 及以上的处理器,以保证有足够的计算能力来运行模型和相关服务。内存方面,至少需要 16GB,若要运行参数规模较大的 DeepSeek 模型,如 32b 版本,则最好拥有 32GB 及以上的内存,避免在运行过程中出现内存不足的情况。硬盘空间也需要预留足够,至少 50GB 用于安装各种软件和存储模型文件,如果要存储多个不同版本的 DeepSeek 模型,建议预留 100GB 以上的空间。
接下来,需要下载一些必要的软件。Docker Desktop 是用于容器化部署 Dify 的工具,可从Docker 官网下载 Windows 版本的安装程序 。Ollama 可从其官方网站下载对应 Windows 系统的安装包。Git 是用于下载 Dify 项目代码的工具,可从Git 官网下载安装程序。在安装这些软件时,要注意安装路径的选择,尽量选择磁盘空间充足且路径简洁的位置,避免因路径过长或包含特殊字符导致安装失败或后续运行出现问题。同时,在安装 Docker Desktop 时,需要确保系统开启了虚拟化技术,如 Hyper - V,可在 BIOS 中进行相关设置。如果安装过程中提示需要安装其他依赖项,务必按照提示进行安装,以确保软件能够正常运行。
C:\Users\Administrator>ollama --version
ollama version is 0.5.7
C:\Users\Administrator>ollama run deepseek-r1:8b
C:\Users\Administrator>ollama list #查看是否安装成功
NAME ID SIZE MODIFIED
bge-m3:latest 790764642607 1.2 GB 3 days ago
mxbai-embed-large:latest 468836162de7 669 MB 3 days ago
deepseek-r1:8b 28f8fd6cdc67 4.9 GB 4 days ago #安装成功
qwen2.5:latest 845dbda0ea48 4.7 GB 4 days ago
llama3.2:3b a80c4f17acd5 2.0 GB 5 days ago
nomic-embed-text:latest 0a109f422b47 274 MB 5 days ago
# 因为没有联网,此步骤只为验证模型已成功运行
C:\Users\Administrator>ollama run deepseek-r1:8b
>>> 你是什么模型
<think>
我是DeepSeek-R1,一个由深度求索公司开发的智能助手,我会尽我所能为您提供帮助。
</think>
我是DeepSeek-R1,一个由深度求索公司开发的智能助手,我会尽我所能为您提供帮助。
>>>
tip:建议修改 ollama 的默认端口访问,确保安全,在系统环境变量中,增加OLLAMA_HOST=0.0.0.0:11435,0.0.0.0 建议替换成你的私有 ip,进一步确保安全。
# 进入dify下的docker目录,执行如下操作
PS C:\WINDOWS\system32> cp .env.example .env
version: '3'
services:
api:
image: langgenius/dify-api:0.15.3
# 添加镜像源地址
build:
context:.
dockerfile: Dockerfile
args:
- REGISTRY_MIRROR=https://registry.docker-cn.com
修改完成后,重新运行 “docker compose up -d” 命令即可。在启动过程中,如果出现错误提示,需要仔细查看错误信息,根据具体情况进行解决。例如,如果提示某个端口被占用,可以修改 “docker-compose.yml” 文件中相应服务的端口配置,避免端口冲突。
或者,执行如下方式安装 docker-compose 和运行 dify:
PS C:\WINDOWS\system32> Start-BitsTransfer -Source "https://github.com/docker/compose/releases/download/v2.32.4/docker-compose-windows-x86_64.exe" -Destination $Env:ProgramFiles\Docker\docker-compose.exe
PS C:\WINDOWS\system32> docker-compose --version
Docker Compose version v2.31.0-desktop.2
PS C:\WINDOWS\system32> docker compose up -d
# 启用自定义模型
CUSTOM_MODEL_ENABLED=true
# 指定Ollama的API地址(根据部署环境调整IP)
OLLAMA_API_BASE_URL=your ip:11435
添加完成后,保存文件。这里的 “OLLAMA_API_BASE_URL” 配置项指定了 Ollama 的 API 地址,Dify 通过这个地址与 Ollama 进行通信,从而调用 DeepSeek 模型。
2. 登录 Dify 平台并配置模型:打开浏览器,访问 Dify 的本地地址,通常是 “http://127.0.0.1:80”(如果在 “docker-compose.yml” 文件中修改了端口配置,需要使用修改后的端口) ,进入 Dify 的登录页面。输入之前设置的管理员账号和密码,登录 Dify 平台。登录成功后,在 Dify 的界面中找到 “设置” 选项,进入设置页面,选择 “模型供应商”。在模型供应商列表中,找到 “Ollama”,点击 “添加模型”。在弹出的添加模型对话框中,填写模型名称(例如 “deepseek-r1:8b”,与之前在 Ollama 中运行的模型名称一致)、基础 URL(http://your ip:11435)、模型类型等信息,其他选项保持默认设置,然后点击 “保存” 按钮。这样,就成功将 DeepSeek 模型接入到了 Dify 平台中,后续就可以在 Dify 中使用 DeepSeek 模型进行知识库的训练和调用了,操作方法如下:
在 Linux 系统下进行部署,需要确保系统满足一定的硬件和软件要求。对于 CPU,建议使用具有多核的高性能处理器,如英特尔至强系列或 AMD 霄龙系列,以提供足够的计算能力来运行模型和相关服务。内存方面,至少需要 16GB,若要运行参数规模较大的 DeepSeek 模型,如 32b 版本,则最好拥有 32GB 及以上的内存,以避免在运行过程中出现内存不足的情况。硬盘空间也需要预留足够,至少 50GB 用于安装各种软件和存储模型文件,如果要存储多个不同版本的 DeepSeek 模型,建议预留 100GB 以上的空间。同时,确保系统的内核版本符合要求,例如对于 Ubuntu 系统,建议使用 20.04 及以上版本,对于 CentOS 系统,建议使用 7.9 及以上版本。
在软件安装方面,首先需要安装 Docker,它是用于容器化部署 Dify 的工具。可以通过官方提供的安装脚本来进行安装,在终端中运行以下命令:
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
安装完成后,需要将当前用户添加到 docker 组,以便无需使用 sudo 即可运行 docker 命令,运行以下命令:
sudo usermod -aG docker $USER
然后重新登录系统,使更改生效。
接下来安装 Ollama,它是用于本地运行 DeepSeek 模型的工具。在终端中运行以下命令进行安装:
curl -fsSL https://ollama.com/install.sh | sh
安装完成后,可以通过运行 “ollama --version” 命令来验证是否安装成功。
还需要安装 Git,用于下载 Dify 项目代码。在 Ubuntu 系统中,可以使用以下命令进行安装:
sudo apt update
sudo apt install git
在 CentOS 系统中,可以使用以下命令进行安装:
sudo yum install git
curl -fsSL https://ollama.com/install.sh | sh
这个命令会从 Ollama 官方网站下载安装脚本,并自动执行安装过程。在安装过程中,脚本会自动检测系统环境,下载并安装 Ollama 的相关组件和依赖项。
2. 添加用户权限:安装完成后,为了确保当前用户能够正常使用 Ollama,需要将用户添加到 Ollama 的运行组中。运行以下命令:
usermod -aG ollama $USER
这将把当前用户添加到 ollama 组中,使得用户可以在不使用 sudo 权限的情况下运行 Ollama 命令。添加完成后,需要重新登录系统,使权限更改生效。
3. 启动服务:在终端中输入 “ollama serve” 命令,启动 Ollama 服务。启动过程中,Ollama 会自动创建一个公钥和私钥,并监听本地的 11434 端口,等待接收模型运行和交互的请求,同样建议修改默认端口,在环境变量中添加OLLAMA_HOST=0.0.0.0:11435。
4. 验证安装:在终端中输入 “ollama --version” 命令,如果安装成功,会显示 Ollama 的版本信息,例如 “ollama version 0.5.11” ,这表明 Ollama 已经正确安装在系统中,可以正常使用。也可以通过访问 “http://localhost:11435” ,如果看到提示 “Ollama is running”,同样说明安装成功。
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
apt-get install docker-compose
这个命令会从 Docker 官方网站下载安装脚本,并自动执行安装过程。安装脚本会自动检测系统环境,下载并安装 Docker 的相关组件和依赖项。
2. 将当前用户加入 docker 组:安装完成后,为了让当前用户能够直接运行 Docker 命令,而无需每次都使用 sudo 权限,需要将用户添加到 docker 组中。运行以下命令:
usermod -aG docker $USER
这将把当前用户添加到 docker 组中,使得用户可以在不使用 sudo 权限的情况下运行 Docker 命令。添加完成后,需要重新登录系统,使权限更改生效。
3. 可能遇到的问题及解决方法:在安装 Docker 过程中,可能会遇到一些问题。例如,在某些系统中,可能会提示缺少一些依赖包。此时,需要根据提示信息,使用系统的包管理工具(如 apt-get 或 yum)来安装缺少的依赖包。另外,如果在安装过程中出现网络连接问题,导致无法下载所需组件,可以检查网络连接是否正常,尝试更换网络环境或使用代理服务器进行下载。在安装完成后,如果运行 Docker 命令时出现权限问题,如提示 “permission denied”,可以检查用户是否已经成功添加到 docker 组中,或者尝试重新登录系统。
git clone https://github.com/langgenius/dify.git /data
这个命令会从 Dify 的 GitHub 仓库下载最新的源代码到指定目录。克隆过程的速度取决于网络状况,可能需要一些时间,请耐心等待。
2. 进入 Docker 目录:克隆完成后,进入 Dify 项目的 docker 目录,运行以下命令:
cd /data/dify/docker
这个目录中包含了用于部署 Dify 的 Docker 相关配置文件。
3. 复制环境配置文件:在 docker 目录中,找到 “.env.example” 文件,将其复制并重命名为 “.env” ,运行以下命令:
cp.env.example .env
这个文件是 Dify 的环境配置文件,通过修改其中的参数,可以配置 Dify 的运行环境。
4. 启动 Dify 服务:在终端中运行 “docker compose up -d” 命令,启动 Dify 服务。这个命令会根据 “docker-compose.yml” 文件中的配置,下载所需的 Docker 镜像,并启动 Dify 服务。由于镜像文件较大,下载过程可能需要一些时间,并且下载源服务器在国外,网络状况可能会影响下载速度。如果下载速度过慢,可以考虑使用国内的镜像源,在 “docker-compose.yml” 文件中添加镜像源地址,例如:
version: '3'
services:
api:
image: langgenius/dify-api:0.15.3
# 添加镜像源地址
build:
context:.
dockerfile: Dockerfile
args:
- REGISTRY_MIRROR=https://registry.docker-cn.com
修改完成后,重新运行 “docker compose up -d” 命令即可。在启动过程中,如果出现错误提示,需要仔细查看错误信息,根据具体情况进行解决。例如,如果提示某个端口被占用,可以修改 “docker-compose.yml” 文件中相应服务的端口配置,避免端口冲突。
# 启用自定义模型
CUSTOM_MODEL_ENABLED=true
# 指定Ollama的API地址(根据部署环境调整IP)
OLLAMA_API_BASE_URL=localhost:11435
添加完成后,保存文件。这里的 “OLLAMA_API_BASE_URL” 配置项指定了 Ollama 的 API 地址,Dify 通过这个地址与 Ollama 进行通信,从而调用 DeepSeek 模型。
2. 登录 Dify 平台并配置模型:打开浏览器,访问 Dify 的本地地址,通常是 “http://your ip:80”(如果在 “docker-compose.yml” 文件中修改了端口配置,需要使用修改后的端口) ,进入 Dify 的登录页面。输入之前设置的管理员账号和密码,登录 Dify 平台。登录成功后,在 Dify 的界面中找到 “设置” 选项,进入设置页面,选择 “模型供应商”。在模型供应商列表中,找到 “Ollama”,点击 “添加模型”。在弹出的添加模型对话框中,填写模型名称(例如 “deepseek-r1:8b”,与之前在 Ollama 中运行的模型名称一致)、基础 URL(http://your ip:11435)、模型类型等信息,其他选项保持默认设置,然后点击 “保存” 按钮。这样,就成功将 DeepSeek 模型接入到了 Dify 平台中,后续就可以在 Dify 中使用 DeepSeek 模型进行知识库的训练和调用了。
启动 docker 时如果遇到如下报错:
ERROR: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
可修改 docker 镜像源
vim /etc/docker/daemon.json
添加如下内容
{
"registry-mirrors": [
"https://2a6bf1988cb6428c877f723ec7530dbc.mirror.swr.myhuaweicloud.com",
"https://docker.m.daocloud.io",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com",
"https://your_preferred_mirror",
"https://dockerhub.icu",
"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.cc"
]
}
# 重启docker环境
systemctl daemon-reload
systemctl restart docker
Embedding 模型在知识库训练中扮演着极为关键的角色。在自然语言处理领域,文本数据本质上是离散的、非结构化的信息,计算机难以直接对其进行处理和理解。而 Embedding 模型的作用就是将这些文本数据转换为数值向量,也就是将文本嵌入到一个低维的向量空间中。通过这种转换,语义相似的文本在向量空间中的距离会比较接近,这样计算机就能够通过计算向量之间的相似度来衡量文本之间的语义关系。
在实际应用中,比如在知识库的检索场景下,当用户输入一个问题时,Embedding 模型会将问题和知识库中的文本都转换为向量,然后通过计算向量之间的相似度,就可以快速找到与问题语义最相关的文本段落,从而为后续的回答提供准确的信息支持。这大大提高了知识库检索的效率和准确性,使得我们能够从海量的文本数据中快速获取有价值的信息。(后期详细讲 embedding 原理和模型应用)
在 Ollama 中添加 Embedding 模型,以添加 bge - m3 模型为例,操作步骤如下:打开命令行终端,在 Windows 系统下,通过开始菜单搜索 “命令提示符” 并打开;在 Linux 系统下,直接打开终端应用。在终端中输入以下命令来下载 bge - m3 模型:ollama pull bge-m3 。Ollama 会自动从指定的仓库中下载 bge - m3 模型文件到本地,并将其添加到模型列表中。下载完成后,可以通过输入 “ollama list” 命令来查看已下载的模型列表,确认 bge - m3 模型是否已成功添加。如果在下载过程中遇到网络问题,导致下载速度过慢或失败,可以检查网络连接是否正常,尝试更换网络环境,或者使用代理服务器进行下载。同时,确保 Ollama 的版本是最新的,以避免因版本问题导致的兼容性问题。
C:\Users\Administrator>ollama pull bge-m3
pulling manifest
pulling daec91ffb5dd... 100% ▕████████████████▏ 1.2 GB
pulling a406579cd136... 100% ▕████████████████▏ 1.1 KB
pulling 0c4c9c2a325f... 100% ▕████████████████▏ 337 B
verifying sha256 digest
writing manifest
success
C:\Users\Administrator>ollama list
NAME ID SIZE MODIFIED
bge-m3:latest 790764642607 1.2 GB 4 seconds ago
mxbai-embed-large:latest 468836162de7 669 MB 3 days ago
deepseek-r1:8b 28f8fd6cdc67 4.9 GB 4 days ago
qwen2.5:latest 845dbda0ea48 4.7 GB 4 days ago
llama3.2:3b a80c4f17acd5 2.0 GB 5 days ago
nomic-embed-text:latest 0a109f422b47 274 MB 5 days ago
dify 上添加 text embedding 模型:
在 Dify 平台中创建本地知识库,具体操作步骤如下:登录 Dify 平台后,在平台的主界面中找到并点击 “知识库” 选项卡,进入知识库管理页面。在知识库管理页面中,点击 “创建知识库” 按钮,会弹出创建知识库的对话框,知识库内容后期将单独出内容讲解实现原理和注意事项,此处只讲基本使用方法。
创建知识库有两种方式,第一种是先创建一个空的知识库,然后再上传文件。在对话框中输入知识库的名称,名称应简洁明了且能够准确反映知识库的内容,例如 “公司产品知识库”“技术文档知识库” 等,名称长度一般限制在 1 到 40 个字符之间。还可以根据需要输入知识库的描述信息,对知识库的内容、用途等进行简要说明,方便后续管理和使用。输入完成后,点击 “创建” 按钮,即可创建一个空的知识库。
第二种方式是直接上传文件来创建默认知识库。在创建知识库的对话框中,点击 “上传文件” 按钮,选择本地已经准备好的文本文件,Dify 支持多种文件格式,如 TXT、PDF、HTML、XLSX、XLS、DOCX、CSV 等 。选择好文件后,系统会自动根据文件内容创建一个默认知识库,并以文件名为知识库名称,同时可以对知识库名称和描述进行修改。
在创建知识库时,还需要设置一些关键参数。在 “索引技术” 选项中,选择合适的索引方式,常见的索引方式有语义搜索(semantic_search)等,不同的索引方式会影响知识库的检索效率和准确性。对于文本较长的文档,可以选择 “父子分段” 方式,并设置合适的子分段长度,例如 1000 个字符左右,这样可以将长文档分割成多个小段,提高检索的精度。同时,还可以选择是否启用重排序(reranking_enable)功能,如果启用,需要选择相应的重排序模型(reranking_model)。在 “嵌入模型” 选项中,选择之前在 Ollama 中下载的 Embedding 模型,如 bge-m3,以确保文本能够正确地转换为向量进行存储和检索。
在创建过程中,可能会遇到一些问题。如果上传的文件格式不支持,系统会提示错误信息,此时需要将文件转换为支持的格式后再进行上传。如果创建的知识库名称已存在,会提示 “数据集名称重复” 错误,需要重新输入一个唯一的名称。另外,如果在设置参数时选择了不支持的选项,也会导致创建失败,需要仔细检查参数设置,确保其符合要求。
在 Dify 平台中,我们可以通过创建应用来实现与本地知识库的交互和接口调用。以创建一个聊天助手应用为例,详细步骤如下:
创建 api 密钥:
最新技术分享会在公众号:朗清水 第一时间发布。
以上内容,在于告知基于 dify 做一套知识库训练的基本流程,后续会专门针对企业化知识库内容做拆分讲解。