2026/10/29 13:04:48

Windows 11 部署 DeepSeek+Dify 本地知识库避坑指南

Windows 11 部署 DeepSeek+Dify 本地知识库避坑指南 简介《DeepSeekDify本地部署知识库》是一份面向希望在个人电脑上搭建本地AI知识库的开发者和技术爱好者的PDF实操文档重点解决大模型与知识库应用部署门槛高、环节分散的问题适合零基础或初级用户按图索骥。压缩包内含1个PDF文件约1.47MB以图文步骤和配置说明呈现内容覆盖系统环境变量设置、Ollama与DeepSeek模型拉取、Docker安装及镜像配置、Dify源码部署与模型接入并延伸到知识库创建、分段索引和聊天助手配置等应用环节形成从环境准备到可用知识库的完整链路。文档保留了关键命令、参数片段和界面示意便于读者对照操作、定位配置差异也可作为部署完成后的复盘与排错参考。目前已有2349人学习适合希望直观了解本地大模型知识库搭建流程、需要一份可跟随的中文部署手册的读者。1. 一套跑在 Windows 11 上的 DeepSeek Dify 本地知识库卡住人的往往不是模型「DeepSeek Dify 本地部署知识库」这套组合我在内网资料出不了门的场景里装过不止一次Ollama 负责把模型拉到本地Docker 负责把 Dify 的一堆服务跑起来最后在浏览器里把知识库和对话界面拼到一起。听着像双击下一步的事实际翻车点全在顺序上——先装 Ollama 再想起来改 OLLAMA_MODELS模型已经躺在 C 盘用户目录里Docker 装完不改镜像盘位WSL 的虚拟磁盘能一路涨到几十个 G 还不知道是谁吃的。适合两类人手上攒了一堆 PDF、Word想变成能问答的私有库或者团队要在离线环境里跑一套问答助手数据一步都不许出机器。下面按我实际装的顺序走一遍Windows 11、Ollama、deepseek-r1:8b、bge-m3、Docker Desktop、Dify一步不跳。2. 版本与盘位先定下来OLLAMA_MODELS 必须在装 Ollama 之前设这一章是整套环境的地基。顺序错一步后面要么重装要么手动搬几十 G 的文件。我一般先花十分钟把硬件、盘位、虚拟化三件事定死再动手装任何 exe。2.1 先看内存再选模型档位Ollama 上的 deepseek-r1 有多个尺寸选大了不是跑不动是跑起来之后每次回答要等半分钟体验直接崩。选之前先确认内存和显卡Windows 下开任务管理器看「性能」页或者命令行跑nvidia-smi看有没有独显、显存多大。模型标签下载体积大致建议内存适用场景deepseek-r1:1.5b12 GB8 GB只验证链路通不通deepseek-r1:8b5 GB 上下16 GB 起个人机、轻量问答deepseek-r1:14b9 GB 上下32 GB 起有独显、追求回答质量deepseek-r1:32b20 GB 上下64 GB 或大显存团队共用一台机器bge-m31.2 GB 上下与上面共用知识库向量化几乎必装体积以 ollama.com 模型页显示的 pull 大小为准不同量化版本会有浮动。显存不够时 Ollama 会自动退回 CPU 推理能跑但 8B 以上的模型在纯 CPU 上出字速度很难受。8B 是个人机最稳的档位先用它把整条链路打通觉得不够再换 14B模型是可以随时加装的不用重装环境。2.2 新建 OLLAMA_MODELS变量名写对别写进用户变量里Ollama 默认把模型存在C:\Users\用户名\.ollama\models一个 8B 加一个 bge-m3 就是六七个 G再换几个模型 C 盘就红了。改存储位置的唯一办法是环境变量OLLAMA_MODELS而且必须在 Ollama 第一次启动之前设好否则它已经按默认路径建好目录变量改了也不回头。图形界面路径右击「此电脑」→「属性」→「高级系统设置」→「环境变量」在「系统变量」区域点「新建」变量名填OLLAMA_MODELS变量值填你在 D 盘或 E 盘提前建好的空文件夹例如E:\Ai\Ollama3。注意是系统变量不是用户变量——Ollama 的服务进程在某些情况下是以系统身份起的只写用户变量可能读不到。习惯用命令行的管理员权限开 PowerShell 跑这一段效果等价# Machine 表示写入系统变量写 User 则是当前用户变量 [Environment]::SetEnvironmentVariable(OLLAMA_MODELS, E:\Ai\Ollama3, Machine) # 重新开一个窗口验证旧窗口读不到新变量 echo $env:OLLAMA_MODELSSetEnvironmentVariable的第三个参数决定写进哪个作用域Machine对应系统变量需要管理员权限。设置完必须重启系统或者至少注销重登——已经跑起来的进程不会继承新变量这是最容易误判「设了没用」的地方。验证方法很简单装完 Ollama 拉一个模型去E:\Ai\Ollama3看有没有blobs目录有就是生效了。注意变量值只写目录路径不要带引号不要写文件名。路径里也尽量别有中文和空格Dify 那边的挂载和脚本对这类路径不友好。2.3 WSL2 与虚拟化Docker 的前置也是后面所有坑的源头Docker Desktop 在 Windows 上依赖 WSL2 或者 Hyper-V装之前先把这两项确认掉不然装到一半弹个「WSL kernel version too low」回头再修更费时间。# 查看 WSL 状态与已安装发行版 wsl --status # 内核过旧时更新需要联网 wsl --updatewsl --status会打印默认版本和内核版本正常应该是 2。如果提示未安装跑wsl --install后重启。虚拟化层面在命令行执行systeminfo翻到最下面的「Hyper-V 要求」四项都应该是「是」有一项是「否」就得进 BIOS 打开 VT-x 或 SVM这一步绕不过去。2.4 装 Ollama 并拉取 deepseek-r1:8b 与 bge-m3到 ollama.com 下载OllamaSetup.exe双击、点 Install它会自动装到用户目录并在托盘常驻不需要选路径。装完开一个新的 PowerShell# 确认版本与命令可用 ollama --version # 确认服务已在 11434 端口监听返回 JSON 说明正常 curl http://127.0.0.1:11434/api/tagsOllama 装完就是一个后台服务加一个命令行客户端默认监听127.0.0.1:11434这个端口号后面配 Dify 要用到记一下。/api/tags返回的是本地已有模型列表空的时候是{models:[]}能返回就说明服务活着。接着拉对话模型。ollama run是「没有就拉、有就直接跑」ollama pull是只拉不跑两个命令都能用# 拉取并进入交互式对话第一次会先下载约 5GB ollama run deepseek-r1:8b # 对话里输入 /bye 退出或者按 CtrlD拉完之后随便问一句「你好」能正常回字就说明模型加载没问题。退出用/bye或者CtrlD别直接关窗口有时候会把加载中的模型留在内存里。命令行的中文如果显示成乱码先执行chcp 65001切到 UTF-8 代码页这只是显示问题不影响模型。然后是向量化模型知识库的检索全靠它# bge-m3 是多语言 embedding 模型中英文混排的资料用它比较稳 ollama pull bge-m3 # 核对两个模型都在列表里注意 NAME 列要一字不差地抄到 Dify 里 ollama listollama list输出的NAME列就是模型标识比如deepseek-r1:8b、bge-m3:latest后面在 Dify 里添加模型时必须和这里完全一致多一个空格都连不上。到这一步模型层就算落地了命令行窗口可以关掉托盘图标别退。3. Docker Desktop 装完先改两处镜像盘位和 registry-mirrorsDify 是由一组容器拼起来的没有 Docker 就没有它。这一章的重点不是「怎么点安装」而是装完之后那两个必须改的配置——不改C 盘会被 WSL 虚拟磁盘吃掉几十 G拉镜像还会慢到怀疑网络。3.1 安装包选择与 Disk image location 迁移到 docker.com 点 Download Docker Desktop选Download for Windows - AMD64。下载完双击Docker Desktop Installer.exe安装过程基本是自动的勾选项保持默认装完要求注销或重启照做。重启后第一次打开 Docker Desktop会弹服务条款接受之后进入主界面。先别急着跑容器点右上角齿轮进Settings左侧Resources→Advanced找到Disk image location。这里默认在C:\Users\用户名\AppData\Local\Docker\wsl所有镜像、容器层、卷都堆在这一个虚拟磁盘文件里跑一套 Dify 加上几个模型镜像二三十 G 很常见。改成 D 盘或 E 盘的空目录例如D:\Docker\DockerDesktopWSL点Apply。如果里面已经有数据Docker 会问是否迁移选迁移等它搬完全新安装直接改就行。这个路径一旦定下来尽量别再动改一次要把已有镜像全搬一遍。3.2 Docker Engine 里那段 JSON每个字段在干什么还是在Settings里左侧切到Docker Engine右边是一个 JSON 编辑框。默认内容里没有registry-mirrors需要手动加。整段替换成下面这样{ builder: { gc: { defaultKeepStorage: 20GB, enabled: true } }, experimental: false, registry-mirrors: [https://hub.rat.dev] }逐项说明一下免得照抄之后不知道为什么builder.gc.enabled打开构建缓存回收defaultKeepStorage设成20GB是缓存上限超过就自动清。不设的话构建缓存会一直涨尤其在反复docker compose build的时候。机器盘小可以压到10GB。experimental保持false这是 Docker 的实验特性开关日常部署不需要开开了反而多一层不确定性。registry-mirrors是镜像拉取的加速地址数组配了之后docker pull会优先走这里。示例里的地址来自原始笔记实际用哪个以你所在网络环境能连通为准可以放多个按顺序尝试。JSON 对格式很敏感多一个逗号、少一个引号都会导致Apply restart失败报错一般直接指到行号照着改就行。改完点右下角Apply restartDocker 会重启引擎等托盘图标变成稳定状态。提示如果在Docker Engine里保存时报unable to configure the Docker daemon先把整段 JSON 粘到任意在线 JSON 校验里过一遍九成是尾逗号或者中文引号。3.3 Apply restart 之后的自检三连配置改完不能只看界面绿不绿命令行验证一遍才踏实# 客户端与服务端都要有输出证明引擎起来了 docker version # 看 Registry Mirrors 那一段有没有你配的地址没生效就是没重启成功 docker info # compose 是 v2 插件命令是 docker compose中间是空格不是横杠 docker compose version # 拉一个最小镜像验证网络和镜像源都能走通 docker run --rm hello-worlddocker info输出很长重点看两处Registry Mirrors是否列出了你填的地址Docker Root Dir是否已经指向新盘位。docker compose version返回 v2.x 才算正常如果提示docker: compose is not a docker command说明装的是老版本 Docker Desktop去官网下最新的重装。hello-world跑通说明整条拉取链路没问题这一步花两分钟能省掉后面在 Dify 那边排查「镜像拉不下来到底是网络还是配置」的时间。4. Dify 落地.env 里加两行docker compose up -d 起一组容器前三章把模型和容器引擎都铺好了这一章才是把 Dify 接上去。核心动作只有三个解压、改.env、起容器。真正花时间的是等镜像拉完和第一次初始化。4.1 解压位置与 .env.example 改名的坑从 Dify 的 GitHub 仓库下载 main 分支的 zip 包解压到 D 盘或 E 盘目录名改成dify比如D:\Ai\dify。路径里别有中文、别带空格容器挂载卷的时候这类路径容易出问题。进到dify\docker目录能看到.env.example。需要把它复制一份改名成.envDify 启动时只读.env.env.example是模板。Windows 资源管理器直接改名会踩一个坑文件名变成.env.example.txt或者提示「必须键入文件名」。稳妥做法是在这个目录里右键「在终端中打开」用命令复制# 复制模板为实际配置文件保留 example 以备对照 Copy-Item .env.example .env # 确认文件名正确应该能看到 .env Get-ChildItem -Force | Select-Object Name-Force是必须的.env在 Windows 里算隐藏文件不加参数列不出来。这一步做完.env和.env.example应该同时存在。4.2 CUSTOM_MODEL_ENABLED 和 OLLAMA_API_BASE_URL 怎么写用记事本或者 VS Code 打开.env光标拉到最末尾换一行追加下面两行# 打开自定义模型入口否则设置页里看不到 Ollama 供应商 CUSTOM_MODEL_ENABLEDtrue # 指向宿主机上的 Ollama 服务容器内部访问宿主机要用 host.docker.internal OLLAMA_API_BASE_URLhttp://host.docker.internal:11434第一行的作用是把「自定义模型」这个功能开关打开。Dify 默认只暴露云端供应商Ollama 属于本地自定义接入不打开这个开关设置页的模型供应商里根本找不到 Ollama 选项很多人卡在这一步以为版本不对。第二行是 Ollama 的 API 地址。原始笔记里写的是不带协议头的host.docker.internal:11434我这边习惯补上http://新版 Dify 对带协议的写法兼容更好两种都能试连不上就换另一种。关键点是不能写127.0.0.1——Dify 的容器有自己的网络命名空间容器里的127.0.0.1指的是容器自己不是你的 Windows 宿主机。host.docker.internal是 Docker Desktop 提供的特殊域名专门用来从容器回连宿主机。另外.env里还有个EXPOSE_NGINX_PORT80控制 Web 界面暴露的端口。本机 80 端口如果被 IIS、某些同步工具占了把这里改成8080之类访问地址就跟着变成http://127.0.0.1:8080/install。改完记得保存记事本保存时确认编码是 UTF-8不要存成带 BOM 的格式。4.3 第一次 up -d拉镜像、等健康检查、进 install 页还是在dify\docker目录的终端里执行# -d 是后台运行第一次会拉取 api、web、nginx、postgres、redis 等一组镜像 docker compose up -d第一次执行会把所有镜像拉下来总量好几个 G视网络情况十几分钟到半小时不等。中途终端会不断刷Pulling、Downloaded、Extracting属于正常。如果卡在某个镜像上不动超过五分钟按CtrlC中断再重新执行compose 会从断点续拉已经下完的层不会重来。拉完之后容器会依次启动其中api和worker依赖数据库迁移启动会比别的慢一些。用这个命令看状态# 关注 STATUS 列健康的服务会显示 Up (healthy) 或 Up docker compose ps正常情况下能看到api、web、nginx、db、redis、weaviate、sandbox、ssrf_proxy这么一组容器全部是Up。db和redis会带(healthy)api可能要多等十几秒才稳定下来。然后浏览器打开http://127.0.0.1/install——端口按你.env里改的来。能看到设置管理员账号的页面就说明 Dify 起来了。填邮箱、用户名、密码登录进主界面。登录后点右上角头像进「设置」→「模型供应商」找到 Ollama点「添加模型」。这里要填三项模型名称、基础 URL、模型类型。模型名称打开命令行ollama list原样抄基础 URL 填http://host.docker.internal:11434模型类型选LLM。保存后再添加一次模型名称填bge-m3:latest类型选Text Embedding。两个都加完模型层才算在 Dify 里注册好。接着建知识库左侧「知识库」→「创建知识库」→ 选「导入已有文本」→ 上传文件 → 下一步 → 分段设置选「通用」索引方式选「高质量」检索设置选「向量检索」→ 保存并处理。等处理状态变成可用再回「工作室」创建聊天助手在「上下文」里添加刚建的知识库就可以开始问了。5. 常见问题排查五个我实际撞过的坑这一章是按「现象 → 原因 → 解决」记的都是装这套东西时真遇到过的按出现频率从高到低排。5.1 模型还是下到了 C 盘现象明明设了OLLAMA_MODELSollama list也有输出但 C 盘用户目录下的.ollama\models照样在涨。原因有三个变量设在了「用户变量」而不是「系统变量」设完之后没有重启Ollama 托盘进程还是旧环境或者设变量之前已经拉过模型旧的目录和文件不会自动搬走。解决先在命令行确认echo $env:OLLAMA_MODELS有新值没有就重设系统变量并重启。确认生效后把C:\Users\用户名\.ollama\models下的blobs和manifests两个目录整体剪切到新路径下再ollama list验证列表还在就说明搬对了。搬之前先退出托盘里的 Ollama不然文件占用会失败。5.2 浏览器打不开 127.0.0.1/install现象docker compose ps里容器都是 Up浏览器访问却一直转圈或者报「无法访问此网站」。原因80 端口被别的程序占了最常见的是系统自带的 Web 服务、某些同步网盘、旧版开发工具也可能是 nginx 容器虽然 Up但内部还在初始化。解决先查端口占用netstat -ano | findstr :80拿到 PID去任务管理器对一下是哪个进程能关就关不能关就改.env里的EXPOSE_NGINX_PORT8080然后docker compose up -d重建 nginx。如果是初始化没完成等三十秒再刷。还有一种情况是访问了https://Dify 默认是 http浏览器自动补协议会打不开。5.3 Dify 里添加 Ollama 模型报连接失败现象模型供应商里点保存提示连接不上或者Connection refused。原因基础 URL 写成了127.0.0.1:11434容器内部回环到了自己或者漏了协议头或者宿主机上的 Ollama 只监听127.0.0.1容器通过host.docker.internal过来的请求被拒。解决先把 URL 改成http://host.docker.internal:11434。还不行就在 Windows 系统变量里加一条OLLAMA_HOST值填0.0.0.0:11434然后退出托盘里的 Ollama 重新启动让它监听所有网卡。改完再用容器去测试具体命令放在最后一章。安全上留个心监听0.0.0.0意味着同网段能访问个人机问题不大办公网里要评估一下。5.4 compose 卡在 Pulling 半天不动现象docker compose up -d停在某个镜像的Pulling或者反复Retrying终端刷TLS handshake timeout。原因registry-mirrors没生效或者配的加速地址当前不通也可能是 Docker 引擎改完配置后没真正重启。解决docker info看Registry Mirrors那一段空的说明配置没保存成功回Docker Engine检查 JSON 格式再Apply restart。列表里有地址但还是慢就换一个能连通的源或者直接CtrlC后重跑Docker 会续传已完成的层。判断是不是网络问题很简单docker run --rm hello-world能跑通说明链路没问题剩下的就是镜像源的事。5.5 知识库处理失败或者选不到嵌入模型现象上传文件后点「保存并处理」状态一直是处理中或者直接报错或者在索引方式里选了「高质量」提示找不到可用的嵌入模型。原因bge-m3没拉下来或者拉下来了但没在 Dify 里注册注册的时候模型类型选成了LLM而不是Text Embedding。解决命令行ollama list确认bge-m3在列表里不在就ollama pull bge-m3。在 Dify 的 Ollama 供应商下检查是不是有一条类型为Text Embedding的配置没有就补一条。改完模型配置后已经建好的知识库要重新索引一次才生效——在知识库设置里找重新处理。6. 装完怎么验证三层连通性加一次带引用的问答到这一步界面能打开、模型也配好了但「能打开」不等于「能用」。我习惯按三层往下验每层都有明确的期望输出出问题能立刻定位在哪一层。6.1 第一层宿主机直接问 Ollama# 宿主机上确认模型列表和推理接口都正常 curl http://127.0.0.1:11434/api/tags # 发一条最小请求返回 JSON 里有 response 字段即可 curl http://127.0.0.1:11434/api/generate -d {\model\:\deepseek-r1:8b\,\prompt\:\11\,\stream\:false}第一条返回模型数组第二条返回里带done:true说明 Ollama 本身没问题。这一步不通后面全白搭。6.2 第二层从容器里访问宿主机# 进 api 容器内部测试回连宿主机容器名以 docker compose ps 显示为准 docker compose exec api curl -s http://host.docker.internal:11434/api/tags返回同样的模型 JSON说明容器到宿主机的网络通了Dify 添加模型时用的就是这个地址。容器里没有curl的话换成wget -qO- http://host.docker.internal:11434/api/tags效果一样。这一层不通基本都是 5.3 里说的监听地址问题。6.3 第三层知识库命中测试前两层只证明「连得上」最后要证明「查得准」。往知识库里传一份内容唯一的测试文档比如自己写一段带特殊编号的文字然后在聊天助手里问一个只有这份文档才能回答的问题。验证项观察位置期望结果知识库状态知识库列表显示可用文档数正确检索是否命中回答下方的引用来源出现上传文档的片段和相似度回答是否基于文档回答正文包含文档里的特殊编号不是通用套话引用来源里能看到你文档的段落说明向量检索生效了回答里出现了那个特殊编号说明模型确实读了检索结果而不是在自由发挥。这一步我踩过一次文档处理完了但聊天助手的上下文里忘了添加知识库问什么都答得很流畅就是全是模型自己编的。三层都过完这套环境才算真跑通。从那以后我每次装完这套东西都会强制走一遍「宿主机 → 容器 → 知识库」的验证不管界面看着多正常跳过这一步迟早要在别人面前翻车。希望帮到你。本文还有配套的精品资源点击获取