多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

Ollama+DeepSeek+Docker+Dify:本地个人知识库搭建全攻略

Ollama+DeepSeek+Docker+Dify:本地个人知识库搭建全攻略 简介面向个人知识库搭建者的完整部署教程整合 ollama、deepseek、docker 与 Dify 四款工具覆盖从本地模型下载、环境配置到知识库构建与问答应用接入的全链路。资源共 1 个 doc 文档包体约 5.19MB内容从 ollama 官网下载安装、环境变量设置、deepseek-r1:1.5b 模型拉取讲起再到使用 docker-desktop 部署 Dify 项目、创建知识库并配置分词方式、接入 Ollama 接口逐步给出命令与界面操作关键点便于对照实施。已有 3386 人学习下载教程还特别提示了模型下载耗时较长、ollama 命令行需保持运行、Dify 启动过程漫长等常见问题并给出对应处理思路能帮助初学者避开部署中的典型坑点。按文档操作即可在本地环境完成个人知识库的搭建实现基于 deepseek 的语义检索与自定义问答是一份实操性很强的入门参考资料。1. 用 ollama deepseek Docker Dify 搭个人知识库为什么要自己折腾这一套手头攒了新项目的操作手册、产品文档、行业研报真要找某个细节时却想不起在哪一篇。把文档直接丢给 deepseek 问它要么答得泛要么一本正经地编。本地搭一套 ollama deepseek Docker Dify 的知识库就是为了让大模型只回答「你自己文档里有的内容」并且指出依据来自哪一段。这不算演示玩具而是能把个人资料变成可检索问答系统的一套组合适合想把项目文档、教学资料、实验记录整理成可对话知识库的工程师、老师和研究型学生。你不需要会写 AI 代码但要能接受跟命令行、容器、端口这类东西打交道。折腾一次之后换模型、加文档基本都是重复劳动。2. 本地模型层ollama 安装与 deepseek-r1:1.5b 部署2.1 先把四个工具的分工盘清楚很多人第一次看到「ollama deepseek Docker Dify」这串名字就懵了其实四个工具各管一段拼起来就是一条完整链路。工具职责在你机器上的形态ollama负责把大模型跑起来对外提供 API一个后台进程 命令行工具deepseek-r1真正干活的推理模型以 ollama 的「模型包」形式存在ollama 管理的一个模型文件Docker / docker desktop提供容器环境把 Dify 需要的数据库、中间件、服务打包运行一个常驻的桌面应用Dify界面层负责知识库管理、对话应用编排、调用 ollama 接口跑在 Docker 里的一组 Web 服务这条链路的数据流向是你在 Dify 网页传文档 → Dify 把文档切块并做向量化存入知识库 → 你在聊天界面提问 → Dify 先从知识库检索相关片段 → 连同问题一起发给 ollama 里的 deepseek-r1 → 模型基于片段作答。理解了这个顺序后面每一步操作你都知道自己在配哪个环节。2.2 Windows 10/11 下安装 ollama安装与版本验证打开 ollama 官网主页很简洁只有一个明显的下载按钮。选 Windows 版本下载拿到的是 .exe 安装包双击后一路 Next 就行。需要说明的是这个安装程序装的是「ollama 本体 常驻服务」不是某个模型模型是后面单独拉的。安装完成后按下Win R输入 cmd 打开命令行执行ollama --version如果输出类似ollama version is 0.x.x这样的信息说明安装成功。这里有个容易被忽略的细节提示如果你在安装 ollama 之前那个 cmd 窗口已经开着新装的命令可能不被识别关掉重开一个就好。我遇到过好几次「明明装了却提示不是内部或外部命令」基本都是窗口没重开。安装完成后系统托盘会多一个 ollama 图标那个进程是常驻的后面 Dify 调用模型靠的就是它。2.3 拉取 deepseek-r1 模型为什么先选 1.5B 而不是更大打开 ollama 官网顶部导航找到 models在搜索框里输入 deepseek-r1进入模型主页能看到按参数量分了好几个档位1.5B、7B、8B、14B、32B、70B。新手第一步容易犯的错是「直接选最大」然后发现下载几个小时后电脑卡死。我的建议是第一次用 1.5B。原因很实际1.5B 量化后的模型文件大概 1GB 上下普通机械硬盘也能在十几分钟到半小时内下完内存 8GB 的轻薄本也能跑回答速度基本是打字机级别的流畅。而 7B 模型文件 4-5GB14B 超过 9GB没有独立显卡或者显存不足的情况下CPU 硬跑会慢到让你怀疑人生。选择deepseek-r1:1.5b这个标签复制页面上的命令回到命令行执行ollama run deepseek-r1:1.5b这条命令做了两件事先检查本地有没有这个模型没有就自动下载下载完成后直接进入对话模式可以当场在命令行里问它问题。下载过程中能看到百分比进度条。如果网络状况不理想进度条可能卡住不动这种情况先Ctrl C中断不要反复重跑后面第 3 章会讲更省事的方式。下载完可以先退出对话输入/bye回到命令行执行ollama list这个命令列出本地已安装的所有模型看到deepseek-r1:1.5b这一行说明模型已经就位。后面 Dify 配置模型时填的模型名必须跟这里显示的标签一模一样这点在第 5 章避坑里还会再强调。3. 模型目录与环境变量把 1.5B 模型装到你想要的盘3.1 模型默认存 C 盘用 OLLAMA_MODELS 改目录ollama 装完后模型默认存在用户目录下Windows 上是C:\Users\你的用户名\.ollama\models。如果 C 盘本来就紧张下几个模型就容易飘红。更麻烦的是如果某天想换大模型下载到一半发现 C 盘满了进度条卡在 99% 一直不动这种玄学问题最耗时间。正确做法是在下载大模型之前就把模型目录改掉。右键「此电脑」→「属性」→「高级系统设置」→「环境变量」在用户变量里新建两个参数OLLAMA_MODELS D:\ollama\models OLLAMA_HOST 0.0.0.0:11434第一个变量指定模型存到哪个目录目录不存在 ollama 会自动创建不用手动建第二个变量让 ollama 监听所有网卡而不是默认的 127.0.0.1这一步很关键因为 Dify 跑在容器里要通过网络访问宿主机上的 ollama如果 ollama 只听本机回环地址容器里就永远连不上。提示改完环境变量后需要退出 ollama托盘图标右键退出再重新启动setx只对新打开的进程生效正在运行的 ollama 不会自动读取新值。我一般用命令行方式验证是否生效ollama serve这个命令是前台启动方式启动日志里会打印「Listening on 0.0.0.0:11434」,看到这行就知道环境变量生效了。确认后关掉这个窗口用系统托盘里的 ollama 继续常驻即可。3.2 命令行常驻与模型切换的边界很多第一次碰 ollama 的人会困惑为什么部署完不能关掉那个命令行窗口原因在于ollama run是一个前台进程模型被加载到内存之后这个进程一旦退出模型的常驻状态就释放了。Dify 那边正在发请求时如果这边把窗口关了Dify 会立刻报连接错误。实际上有两种运行方式ollama run deepseek-r1:1.5b下载模型并进入交互对话适合测试模型本身效果。关掉对话后模型进程释放。ollama serve只启动 API 服务不进入对话界面适合 Dify 这类外部程序调用。日常使用场景下保持系统托盘的 ollama 常驻是最省心的如果哪天发现 Dify 连不上模型先检查托盘里 ollama 图标还在不在、右键看有没有退出。重新拉起也很简单再执行一次ollama run deepseek-r1:1.5b就行因为模型文件已经下载好了这次不会重新下载等几秒就能进入对话说明模型已经加载。还有一个常被问到的点如果同时装了 1.5B 和 14B 两个模型会不会内存爆炸ollama 的机制是默认按需加载同一时刻只有一个模型驻留内存切换模型时旧模型会被卸载腾出内存。不需要的模型用ollama rm 模型名删掉即可释放磁盘。3.3 ollama 下载太慢用离线包走模型导入这条路网络状况不好的时候ollama run下载模型能卡到你怀疑人生进度条几分钟不动是常事。社区里有个常见做法是从第三方模型站下载 deepseek-r1 的 GGUF 量化文件再通过本地导入的方式装进 ollama绕开官方源的下载瓶颈。步骤如下先从可正常访问的模型托管站拿到deepseek-r1-1.5b的 GGUF 文件推荐 Q4_K_M 这个量化等级体积和效果比较平衡放到你想存模型的目录比如D:\ollama\import\。然后在该目录新建一个文本文件命名为Modelfile内容写FROM ./deepseek-r1-1.5b.Q4_K_M.gguf这样写的意思是告诉 ollama这个模型的推理权重来自哪个文件。保存后在命令行切到该目录执行ollama create deepseek-r1:1.5b -f Modelfile这个命令会把 GGUF 文件转换成 ollama 自己的模型包格式转换完成后同样通过ollama list能看到deepseek-r1:1.5b。整个过程不依赖官方下载源速度瓶颈只在你自己下载 GGUF 文件这一环。需要注意导入模型的名称不能随意起Dify 那边接入时填的模型名会精确匹配这个标签建议保持跟官方一致的命名避免后面配置时多一层心智负担。4. 容器层docker desktop 装好 Dify 的前置条件与启动4.1 为什么非要 docker desktop 来跑 DifyDify 不是一个小程序它拆成了 API 服务、Worker 异步任务、Web 前端、PostgreSQL 数据库、Redis 缓存、向量数据库、沙箱环境等一堆组件。如果手动一个个装光是版本兼容问题就够喝一壶。它官方直接给了 docker 编排文件你用 docker desktop 全部拉起来就行这也是「为什么整个部署过程离不开 Docker」。docker desktop 在 Windows 上的安装本身不复杂去官网下 Windows 版本安装包双击安装即可。安装过程中会提示是否启用 WSL2 后端建议勾选启用。这里有个前提电脑需要开启 CPU 虚拟化BIOS 里叫 Intel VT-x 或 AMD SVM如果没有开启docker desktop 启动时会直接报错提示类似 virtualization support not detected。这个报错不是 docker 的问题第一步先去 BIOS 把虚拟化打开。安装完成后桌面会出现 docker desktop 图标启动后等待右下角鲸鱼图标变成绿色就说明 Docker 引擎已经在 WSL2 里跑起来了。第一次启动可能卡在 WSL2 内核更新按提示下载更新包安装即可不需要额外配置。4.2 获取 Dify 项目clone 与解压的差别Dify 的源码在 GitHub 上仓库名langgenius/dify。获取方式有两种本地装了 git 就直接用命令行 clone不想装 git 可以下载 zip 压缩包解压。两者结果一样区别只在于 clone 以后想更新版本可以git pullzip 解压的后续更新要重新下载。git clone https://github.com/langgenius/dify.gitclone 耗时取决于网络项目体积较大等它跑完。完成后进入项目目录cd dify/docker这个docker子目录里放着编排文件和环境变量模板Dify 真正跑起来靠的就是这个目录。进入后可以做两件事一是确认目录里有没有.env文件没有的话把.env.example复制一份改成.env保持默认配置即可二是准备执行启动命令。4.3 docker compose 启动与第一次运行慢在哪在dify/docker目录下先确认当前目录是对的pwd然后执行启动命令。新版本 docker desktop 内置了 compose 插件推荐用带空格的docker compose写法docker compose up -d-d参数表示后台运行执行后不会再刷日志而是直接回到命令行提示符。首次运行会花很长时间因为 Docker 要按编排文件逐个拉取镜像PostgreSQL、Redis、向量数据库、Nginx、Dify 的 API 和 Web 镜像等总下载量有好几个 GB具体时长完全取决于网速。等待过程中不要反复执行启动命令可以用下面两条命令看进度docker psdocker compose logs -f api第一条列出所有运行中的容器观察 Dify 相关容器是否都处于 Up 状态第二条持续刷 API 服务的日志如果看到类似数据库连接成功、服务启动完成的字样基本就绪。有个细节状态栏里UP 5 minutes不代表服务已经可用要等到 API 服务的日志不再新增报错才算真正起来。全部容器起来了浏览器访问http://127.0.0.1/就能看到 Dify 的页面首次访问会引导你设置管理员账号和密码之后就进入主界面。5. 避坑与排查知识库创建、ollama 接口对接的六个常见问题5.1 知识库创建文件上传、分段与索引参数Dify 主界面左侧导航点「知识库」创建知识库后进入上传页支持 PDF、Word、Markdown、TXT 这些常见格式。文件上传后进入「分段设置」这一步这是知识库质量的关键参数位。Dify 默认选择自动分段也可以切到自定义模式手动控制参数默认值我的建议分段长度500 tokens技术文档设 300-400问答型文档设 200-300分段重叠50 tokens保持默认或设成分段长度的 10%检索模式向量检索文档量小就保持默认分段长度决定了每块文本有多长。设得太大每段内容太多检索命中一段后塞给模型的信息过载回答会变啰嗦设得太小上下文割裂一个完整的技术方案被切成好几段回答时容易漏信息。我的习惯是按内容类型区分操作手册类文档用 500因为步骤本身是完整的产品 FAQ 类用 200因为问题答案都比较短。保存后 Dify 开始解析文件并做向量化这个过程的时间取决于文档大小和电脑性能。解析完成后点进知识库能看到已经切分好的分段列表和对应的向量化状态。5.2 接入模型供应商host.docker.internal 这个地址的来由知识库建好了接下来要把 deepseek 模型接到 Dify 上。在 Dify 右上角头像进「设置」找到「模型供应商」往下翻找到 Ollama 入口点击「添加模型」这时会弹出一个配置框配置项填写内容模型名称deepseek-r1:1.5b必须与 ollama list 输出一致Base URLhttp://host.docker.internal:11434模型类型对话型 LLM很多人在这一步会填http://127.0.0.1:11434然后怎么试都连不上。原因在于 Dify 跑在 Docker 容器里容器内的 127.0.0.1 指向的是容器自己不是你的宿主机。host.docker.internal是 docker desktop 提供给容器访问宿主机的一个特殊域名帮你绕开了这个问题。填完后点击保存Dify 会发起一次凭证验证验证通过后模型列表里就会出现deepseek-r1:1.5b。如果这一步就报错直接看下面 5.3 的排查路径。5.3 避坑容器连不上 ollama 的端口现象Dify 模型供应商界面添加 Ollama 模型后测试弹窗提示an error occurred during credentials validation或者聊天时提示连接超时。原因常见的分三种。第一种是 ollama 只监听了 127.0.0.1容器网络里根本访问不到第二种是 Windows 防火墙拦截了 ollama 进程的外部访问第三种是改了环境变量后 ollama 没有重启新配置没生效。解决先在宿主机命令行确认 ollama 服务在监听所有网卡ollama serve看到日志里出现[GIN] listening on [::]:11434或者类似监听地址说明正常。如果监听在 127.0.0.1说明第 3 章讲的OLLAMA_HOST环境变量没生效重新设置后必须完全退出 ollama 再启动。其次检查 Windows 防火墙在「允许应用通过防火墙」里找到 ollama勾选专用网络Docker 的网络走的是专用网络这个范畴。还有一个思路是直接改 Dify 的配置把 Base URL 从host.docker.internal换成你 Windows 机器的局域网 IP这样绕开域名解析缺点是局域网 IP 变了就要改配置。5.4 避坑模型名必须一字不差否则 404现象模型供应商验证过了聊天界面也选到了模型名称但发消息后立刻报错日志里写model not found。原因Dify 配置的模型名跟 ollama 里实际的标签不一致。常见的情况是只写了deepseek-r1漏了:1.5b或者大小写不一致。ollama 的模型标签是大小写敏感的。解决在宿主机执行ollama list把输出里第二列的名字完整复制不要手打。复制到 Dify 配置框后重新保存。另外还要注意一个问题Dify 页面填模型名时不会做自动纠正所以复制粘贴是最保险的做法。改完后回到聊天界面在模型下拉框里重新选一次尽量确保选中的是刚配置的那一项。5.5 避坑知识库答非所问、上下文没生效现象知识库建好了聊天界面模型也能正常回复但是问文档里明确写过的问题模型答得含糊要么自己发挥甚至直接说「我的知识库中没有相关信息」。原因同一批人最容易犯的错是只配好了模型没把知识库挂到应用上。在 Dify 里创建聊天应用后需要主动在「上下文」区域添加知识库这个步骤不是自动的。模型默认只会用对话历史回答你不在上下文里挂上知识库它就拿不到你的文档内容。解决进入对话应用编辑页找到「上下文」一栏点击添加按钮选择你刚建好的知识库保存后再测试。此时问题会先经过知识库检索再拼进提示词回答下方会出现引用的分段来源。测试时可以故意问一个只有你文档里才有的细节比如某份合同里的具体金额、某篇文档里的一段代码逻辑如果回答能命中并显示引用说明链路通了。如果回答仍然不对回到知识库分段设置里把分段长度调小一档重新建立索引再试。6. 验证与进阶跑通之后把知识库做得更像样6.1 一整套可复现的验证路径部署完成后我每次都会用同一套流程验证整条链路而不是随便聊两句就收工。先用一个只有文档里才有的问题测试检索是否正确再换一种说法问同一个问题确认模型不是靠记忆在回答最后把文档里容易混淆的两个概念放在同一个问题里问看模型能否准确区分并引用不同来源。这三个问题都过了这个知识库才算真正可以用。验证过程中如果发现回答引用的分段不对说明知识库分段或是检索参数还有问题。Dify 的调试里可以直接看命中了哪些分段在哪一段被用作上下文这条信息对定位问题非常有用比反复改提示词效率高得多。6.2 进阶换大脑、多知识库、发布应用第一次跑通建议用 1.5B但用几天你就会发现它的上限明显。机器配置允许的话换成deepseek-r1:7b或14b回答质量会有等级上的提升——Dify 里不用改任何东西把模型供应商里新增一个模型标签然后在聊天界面下拉框里切换即可。换过大模型后原来的 1.5B 可以先留着ollama rm删掉也可以不影响已经建好的知识库。文档越攒越多之后可以根据主题拆成多个知识库比如「项目手册」「实验记录」「合同台账」然后在聊天应用里按当前场景切换上下文。Dify 还支持把做好的应用发布成网页链接分享给团队局域网内同事可以直接打开使用不需要他们配置任何环境。发布前记得在应用设置里调整一下欢迎语和开场问题这样别人点进来就知道该怎么问。我自己第一次搭这套的时候图省事直接往知识库里塞了几本书结果问什么都答得稀碎排查了半天才发现上下文压根没挂上。从那以后我每次新建知识库都强制自己先拿 3-5 页的小文档跑一遍全链路验证确认检索、引用、回答都对再考虑批量上传。希望你也能按照这个顺序来能少走不少弯路希望帮到你。本文还有配套的精品资源点击获取
返回列表