资讯详情

资讯详情

本地知识库实战:Ollama + DeepSeek-R1 + Dify 部署与调优

简介这份文档面向希望本地搭建个人知识库的开发者与AI爱好者围绕ollama、deepseek、docker与Dify四类工具的协同使用展开帮助读者理解从模型部署到知识库问答的完整链路适合具备基础命令行操作能力、想低成本落地私有知识检索系统的中级学习者。资源包共1个doc文件约5.19MB以图文步骤形式记录环境变量配置、模型拉取、容器启动与知识库创建等关键环节便于对照操作与复盘。目前已有3396人学习下载说明该部署路线在社区中具有较高关注度。文档内容覆盖ollama安装与版本校验、deepseek-r1模型下载与运行、docker-desktop部署Dify项目、分词方式配置及聊天应用接入ollama接口等要点并提示命令行需保持运行、模型参数可按需调整等细节可作为搭建个人知识库时的操作参考与排错线索。1. 本地知识库这套组合拳为什么我选 Ollama DeepSeek Dify 而不是直接上云上周有个做运维的朋友问我公司内部一堆 PDF 手册和故障记录想搞个能问答的知识库但数据不能出内网。我第一反应就是这套组合Ollama 跑本地模型、DeepSeek-R1 做推理、Docker 起 Dify 做知识库管理和对话界面。整套东西全在自己机器上断网也能用模型文件落在本地硬盘知识库向量存在 Docker 卷里没有任何数据往外走。这套方案适合谁手上有 Windows 10/11 机器、内存 16G 起步、愿意花半小时折腾环境的人。新手照着步骤能跑通熟手可以跳过基础部分直接看参数调优和避坑。它解决的核心问题是把「模型推理」和「知识库检索」拆成两个独立服务Ollama 负责前者Dify 负责后者中间用 HTTP 接口对接谁挂了都不影响另一个。下面按我实际部署的顺序拆每一步都标清楚参数和容易翻车的地方。2. 先把 Ollama 和 DeepSeek-R1 跑起来安装、环境变量与模型拉取2.1 Ollama 安装与版本验证Windows 下直接去 Ollama 官网下安装包双击走完 Install 流程就行。装完别急着拉模型先验证一下。按WinR输入cmd打开命令行执行ollama --version正常会回一行版本号比如ollama version is 0.x.x。如果提示「不是内部或外部命令」说明安装时没把路径写进系统 PATH要么重装要么手动把C:\Users\你的用户名\AppData\Local\Programs\Ollama加进环境变量。这一步看着简单但我见过不少人卡在这以为装失败了其实是命令行没刷新环境变量关掉重开一个 cmd 窗口就好。2.2 环境变量模型存放路径必须提前改这是整套部署里最容易被忽略、后面最难受的一步。Ollama 默认把模型存在 C 盘用户目录下DeepSeek-R1 就算只拉 1.5B 版本也要占一两个 G7B 以上直接十几个 GC 盘空间紧张的人拉到一半就报磁盘不足。所以装完第一件事就是改存储路径。右键「此电脑」→ 属性 → 高级系统设置 → 环境变量在「系统变量」里新建一条变量名变量值说明OLLAMA_MODELSD:\ollama\models换成你自己硬盘上空间充足的目录OLLAMA_HOST0.0.0.0:11434让 Docker 容器能访问到宿主机服务OLLAMA_MODELS决定模型文件落哪OLLAMA_HOST决定监听地址。第二个变量是给后面 Dify 对接埋的伏笔——Docker 容器里的 Dify 要访问宿主机的 Ollama如果 Ollama 只监听127.0.0.1容器里是够不着的。设成0.0.0.0表示监听所有网卡容器通过host.docker.internal就能连上。改完环境变量一定要重启命令行窗口不然新变量不生效。2.3 拉取 DeepSeek-R1 模型并保持服务运行环境变量配好后在命令行里执行ollama run deepseek-r1:1.5b这条命令做两件事先检查本地有没有这个模型没有就从官方源拉取拉完直接进入交互式对话。1.5B 版本下载量大概 1G 出头网速正常几分钟就完事如果你机器显存够想上 7B 或 14B把标签换成deepseek-r1:7b即可但下载时间会成倍增加我见过拉 14B 拉了两个多小时的。拉完之后命令行会变成提示符直接输入问题就能对话。这里有个关键认知这个命令行窗口不能关。Ollama 的模型服务是挂在这个进程上的窗口一关11434端口就没了后面 Dify 对接会直接报连接失败。如果你不小心关了重新执行ollama run deepseek-r1:1.5b就行模型已经在本地了秒进不用重新下载。提示想确认服务是否在跑另开一个命令行执行ollama list能看到模型列表就说明本地有货再执行curl http://127.0.0.1:11434/api/tags能返回 JSON说明服务端口正常。3. Docker 拉起 Dify源码、compose 文件与容器编排3.1 获取 Dify 源码与目录结构确认Dify 是开源项目从它的 GitHub 仓库把源码下下来解压后能看到docker目录里面放着docker-compose.yaml和.env.example。有 git 的话直接克隆更省事git clone https://github.com/langgenius/dify.git cd dify/docker进到docker目录后先别急着 up把.env.example复制一份改名成.envcopy .env.example .env这个.env是 compose 编排的配置文件里面定义了数据库密码、端口映射、镜像版本等。不改也能跑但默认端口是 80如果你本机 80 端口被别的服务占了比如 IIS 或某些开发工具启动会报端口冲突。稳妥做法是打开.env把EXPOSE_NGINX_PORT改成8080之类没被占用的端口。3.2 docker-compose up 启动与镜像拉取在docker目录的地址栏输入cmd回车直接在当前路径打开命令行执行docker-compose up -d-d是后台运行不加的话日志会刷满整个窗口。第一次执行会拉一堆镜像——PostgreSQL、Redis、Weaviate、Nginx、API 服务、Web 前端加起来好几个 G时间取决于网速十几分钟到半小时都正常。拉完后 Docker Desktop 的 Containers 列表里会出现一组dify-开头的容器状态变成 running 就说明起来了。这里有个版本号对不上的问题很多人会慌compose 文件里写的镜像 tag 和你本地拉下来的 digest 可能不完全一致只要容器状态是 running、日志没报错就不用管。真正要盯的是dify-api和dify-web这两个容器它们挂了整个界面就打不开。启动失败最常见的原因是内存不够——Dify 全家桶跑起来至少吃 4G 内存8G 的机器建议先把其他大程序关掉。3.3 首次登录与管理员账号初始化容器全部 running 后浏览器打开http://127.0.0.1如果你改了端口就是http://127.0.0.1:8080。第一次访问会跳转到初始化页面要求设置管理员邮箱和密码设完就能进主界面。这个账号信息存在 PostgreSQL 容器里只要不删数据卷下次启动直接登录不用重设。进主界面后先别急着建知识库去「设置 → 模型供应商」确认一下 Ollama 能不能连上连不上后面全白搭。这一步的验证方法在下一章展开。4. 知识库与对话应用分词、向量化与 Ollama 接口对接4.1 创建知识库与分段策略选择主界面左侧点「知识库」→「创建知识库」把你的 PDF、Word、Markdown 拖进去。Dify 会给一套默认的分段配置核心参数是分段长度和重叠长度。默认分段大概 500 字符、重叠 50 字符对结构清晰的手册够用如果你的文档是那种大段连续文字、没有小标题的建议把分段调小到 300 左右、重叠调到 80避免一个语义块被硬切断导致检索时答非所问。保存后 Dify 开始解析和向量化这个过程吃 CPU文档多的话等几分钟到十几分钟。解析完成后点「前往文档」能看到每个分段被切成了什么样以及对应的向量是否生成成功。如果某个文档一直卡在「处理中」多半是文件格式有问题或者编码不对换一份重新上传试试。4.2 在 Dify 中接入 Ollama 模型供应商回到「设置 → 模型供应商」往下拉找到 Ollama点「添加模型」。这里要填一个 Base URL填的是从 Docker 容器视角看宿主机的地址http://host.docker.internal:11434为什么不是127.0.0.1:11434因为 Dify 跑在容器里容器里的127.0.0.1指的是容器自己不是你的 Windows 宿主机。host.docker.internal是 Docker Desktop 提供的特殊域名专门用来从容器访问宿主机。这也是前面为什么要把OLLAMA_HOST设成0.0.0.0——如果 Ollama 只监听回环地址容器通过这个域名过来也会被拒。填完 URL 后模型名称填deepseek-r1:1.5b和你ollama list里看到的名字一字不差。保存成功后供应商列表里会出现 Ollama 卡片点进去能看到模型已就绪。如果报连接失败按这个顺序排查Ollama 命令行窗口是不是关了 →OLLAMA_HOST环境变量设了没 → 改完环境变量重启过 Ollama 没。4.3 创建聊天应用并挂载知识库左侧「工作室」→「创建空白应用」→ 选「聊天助手」起个名字点创建。进到编排界面右上角模型下拉框里选刚才接入的deepseek-r1:1.5b。然后找到「上下文」旁边的加号把之前建好的知识库挂上去。挂载后可以调两个关键参数召回分段数和评分阈值。召回数默认 4意思是每次提问从知识库里捞最相关的 4 段塞给模型文档量大、问题跨度广的话可以调到 6 到 8但太多会挤占模型上下文窗口。评分阈值控制相关性门槛调高只召回高匹配段落、回答更精准但可能漏调低召回范围大但容易带进无关内容。我一般先默认跑几轮看回答质量再微调。测试时先问一个知识库里明确有的问题比如某份手册里的操作步骤看回答是否引用了对应段落。Dify 会在回答下方标注引用来源点开能核对原文。如果模型答得泛泛而谈、没引用知识库说明召回没生效检查知识库是否真的挂上了、文档是否解析完成。5. 避坑清单五个我实际踩过的坑坑一Dify 报「模型连接失败」但 Ollama 明明在跑。现象是添加模型供应商时一直转圈然后报错。原因九成是 Base URL 填了127.0.0.1容器里访问不到宿主机。解决改成http://host.docker.internal:11434同时确认OLLAMA_HOST0.0.0.0:11434已设且 Ollama 重启过。坑二模型拉到一半报磁盘空间不足。现象是ollama run下载进度条走到一半中断。原因是默认模型路径在 C 盘空间不够。解决提前设OLLAMA_MODELS指向大容量盘已经下了一半的删掉重拉Ollama 不支持断点续传到新路径。坑三docker-compose up卡在拉镜像或者容器起来又退出。现象是某个容器状态反复 restarting。先看日志docker logs dify-api常见是内存不足被 OOM kill或者 80 端口被占。解决关掉占端口的服务或改.env里的EXPOSE_NGINX_PORT内存不够就加内存或减少同时运行的其他容器。坑四知识库文档解析一直「处理中」。现象是上传后状态不动。原因是文件编码或格式不被解析器支持比如扫描版 PDF 没有文字层。解决换可复制文字的 PDF或者先用 OCR 转一遍Word 文档另存为 docx 而非 doc。坑五对话回答不引用知识库像在瞎编。现象是问手册里的内容模型给的是通用回答。原因是知识库没挂到应用上或者召回阈值太高一段都没捞到。解决检查编排界面「上下文」是否已添加知识库把评分阈值调低到 0.3 左右再试同时确认文档解析完成且分段内容可读。6. 调优与验证让 1.5B 模型在知识库场景下真正可用1.5B 的 DeepSeek-R1 胜在轻量、启动快但推理能力和 7B 以上有明显差距直接裸聊容易答得浅。我的做法是在 Dify 的「提示词」编排里加一段系统指令强制模型优先基于上下文回答、找不到就说找不到而不是自由发挥。具体在聊天助手编排页的「指令」框里写你是一个基于内部文档的问答助手。回答时优先使用提供的上下文内容 如果上下文中没有相关信息直接说明「文档中未找到相关内容」不要编造。 回答尽量简洁涉及步骤时按顺序列出。这段指令配合知识库召回能把 1.5B 的「乱答」概率压下去不少。另一个技巧是调低模型的 temperature在模型参数里设到 0.3 以下输出更稳定、更贴文档代价是灵活性下降看你场景取舍。验证知识库是否真的生效我习惯用三个层次的问题测第一层问文档里明确写了的操作步骤看是否准确引用第二层问需要跨两个段落综合的问题看召回是否覆盖到第三层问文档里根本没有的内容看模型是否老实说「未找到」。三层都过了这套知识库才算能用。还有个容易被忽略的点Ollama 那个命令行窗口长期开着机器休眠或重启后服务就断了Dify 那边不会主动提示只会在你提问时报错。我的习惯是每次开机先跑一遍ollama list确认服务活着再去开 Dify。从那以后我每次部署完这套东西都会把「Ollama 服务自检」写进日常检查清单省得半夜被叫起来排查「知识库怎么不回答了」。希望帮到你。本文还有配套的精品资源点击获取
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →