ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Dify+Ollama+DeepSeek:搭建本地优先云端兜底的私有AI平台

2026/10/2 5:51:21 拓冰建站 浏览量
Dify+Ollama+DeepSeek:搭建本地优先云端兜底的私有AI平台 先把结论放前面这套 Dify Ollama DeepSeek 的组合我实际跑了一个多月日常的问答、文档处理、工作流自动化基本都迁到上面了。核心思路一句话概括——能用本地模型解决的绝不把请求发到云端非得上云端的统一走一套可控的 API 入口。对你没看错关键词就是“本地优先、云端兜底”。我见过太多团队和个人做点 AI 功能就直奔大厂 API结果月底账单一拉几百上千块没了数据还全在外面过了一圈。坦白说很多场景根本用不着大模型上云——内部知识库问答、简单的文本分类、格式整理、代码片段生成一个 7B 的本地模型完全能扛。真正需要云端兜底的是那些复杂推理、长文档总结、高质量生成的任务。把这层关系理顺之后你会发现“私有 AI 平台”并不是什么高不可攀的东西它就是一套用 Dify 做编排、用 Ollama 跑本地模型、按需调用 DeepSeek API 的组合拳。这套方案适合谁我觉得至少三类人可以直接照着抄一是手里有台像样电脑有 NVIDIA 显卡最好的技术爱好者二是想把内部数据封闭在局域网里用的小团队三是对 API 费用敏感、想给公司省钱的开发者。下面我把从架构思路到踩坑实录全部展开尽量说人话保证你照着走一遍能跑起来。1. 思路拆解为什么“本地优先、云端兜底”能省钱又不降级1.1 全本地部署的硬伤模型不是万能的很多朋友一听到“私有 AI”第一反应是“既然要私有那就全上本地模型”。这个想法很美好但落地时你会发现三个尴尬问题。第一是硬件门槛。想要模型效果好参数量就得上去。一个 70B 的模型量化后也要 40GB 左右显存普通人手里的显卡根本跑不动勉强用 CPU 跑一次推理等几十秒体验直接回到上个世纪。第二是模型能力差距。本地开源模型和头部闭源 API 模型在复杂推理、代码生成、风格遵循上的差距是客观存在的你让一个 7B 模型去写一份合格的商业方案它会给你吐出一堆正确的废话。第三是维护成本。模型要更新、量化文件要重新下载、显存不够要调参这些都会消耗你的周末。所以“全本地”只是听着解气真做起来是给自己找麻烦。1.2 全云端 API 的痛点你真在给 API 打工再反过来看“全云端”。最早我就是一股脑全调 DeepSeek API确实省心但用着用着问题就冒出来了。最直观的是费用。开发阶段测试频繁对话上下文一长tokens 消耗快得吓人。按百万 tokens 计价虽然单价低但架不住量多。更麻烦的是限流和网络抖动稍微大型一点的请求并发上来429、超时轮番轰炸深更半夜调接口偶尔还会遇上服务端 5xx。最让我受不了的是数据问题内部文档、客户信息、业务数据全部要打到第三方服务器上每次对接前都得做数据合规评估那种“不在自己手里的不踏实感”一直存在。你算一笔账就明白如果团队里十个人每人每天调用 50 次助手功能一次平均消耗 3000 tokens那么一天就是 150 万 tokens。就算云端 API 再便宜一个月下来也是一笔不小的开销何况这个用量还在随着功能铺开持续上涨。1.3 “本地优先、云端兜底”的本质是分流既然两边都有问题那就别走极端。我的方案是在 Dify 这一层做统一路由把请求分流到两个模型提供方——Ollama 负责本地推理DeepSeek API 负责云端兜底。这就像家里装了净水器日常喝水直接用本地净化的水便宜又放心碰上水质特别差、或者净水器滤芯失效时才从超市买瓶装水顶上。你不需要在“永远只喝纯净水”和“永远只买瓶装水”之间二选一按需切换才是理性的做法。实际分流规则也很简单简单的知识库问答、格式整理、摘要提取这类任务默认走本地模型速度可能稍慢但免费复杂的逻辑推理、长文本生成、需要强常识的任务在 Dify 工作流里显式指定为 DeepSeek 云端模型。你会发现80% 的请求其实都落在“本地就能搞定”的范围内API 费用自然就降下来了。这套架构还带来一个隐藏好处统一 API 入口。对外部系统来说它看到的只有 Dify 一个地址、一套鉴权不需要关心背后到底是哪个模型在响应。以后就算你想换掉 DeepSeek或者本地模型升级外部调用方一行代码都不用改。2. 核心组件解析Dify、Ollama、DeepSeek 各干各的活2.1 Dify整个平台的“总调度室”Dify 在这套架构里是最关键的一层。你可以把它理解成一个开源的 LLM 应用开发平台它把模型管理、应用编排、知识库、工作流、API 发布全都可视化地整合在一起。没有它的话你要自己写后端去接 Ollama、接 DeepSeek、管会话、管上下文工作量完全是另一个量级。选择 Dify 而不是别的框架我是这么考虑的它支持多模型供应商接入Ollama 和 DeepSeek 可以同时挂在同一个平台上并且给每个应用单独指定模型知识库功能开箱即用做 RAG 不需要额外写向量检索代码工作流可视化编排给非开发的同事也能看懂流程。这些能力组合起来正好覆盖了“私有 AI 平台”的绝大部分需求。Dify 部署方式主流是 Docker Compose组件包括 API 服务、Worker、Web 前端、PostgreSQL、Redis、向量数据库 Weaviate 等。第一次启动会拉不少镜像这是正常现象别被一堆容器名吓到它们都是 Dify 跑起来的基础设施。2.2 Ollama本地模型的“发动机”Ollama 是目前跑本地开源模型最省事的工具没有之一。它把模型下载、量化、推理、提供 API 这几件事整合成了一条命令ollama run deepseek-r1:7b。它解决的核心问题是“模型分发和运行环境的割裂”。以前你想跑一个开源模型要自己找权重文件、配置 Python 环境、装 PyTorch、写推理脚本光是环境依赖就能折腾一天。Ollama 把这些全部封装好它会自动从模型仓库拉取量化后的 GGUF 格式文件然后在本地起一个推理服务默认监听11434端口。这个服务还提供 OpenAI 兼容的/v1/chat/completions接口意味着任何支持 OpenAI 格式的客户端都可以直接指向它。对于 Dify 来说接入 Ollama 就像接入一个普通的模型供应商不需要额外适配。Ollama 的模型文件存储在本地目录Windows 默认在C:\Users\你的用户名\.ollama\modelsLinux 在/usr/share/ollama/.ollama/models。如果你想把模型放到单独的大容量磁盘可以通过设置环境变量OLLAMA_MODELS来指定目录这个细节在后续注意事项里我会展开。2.3 DeepSeek一半在本地一半在云端DeepSeek 这套组合里的角色比较特殊它既是开源的本地模型又是云端的 API 服务两种身份可以同时使用。先看本地。DeepSeek 开源了 R1 系列模型Ollama 仓库里可以直接拉取多个规格的量化版本比如deepseek-r1:1.5b、7b、8b、14b、32b、70b。参数越小越省资源效果也相应打折。我建议有 8GB 以上显存的机器至少跑7b或8b16GB 显存可以上14b日常文本处理完全够用。再看云端。DeepSeek 官方提供了 API 服务模型名一般叫deepseek-chat在 Dify 里只需要填一个 API Key 就能开通。但请注意云端模型是“按量付费”的这就是我强调“兜底”的原因——你应该让它去处理少数高价值请求而不是让它成为默认出口。实际配置时我建议把 Dify 的“默认模型”设置为本地 Ollama 的deepseek-r1:8b然后把工作流里的关键节点模型手动指定为云端deepseek-chat这样两条链路各司其职不会误触发高额费用。3. 完整搭建过程从零开始跑通本地优先、云端兜底3.1 安装 Ollama下载慢的问题这样破Ollama 官方提供 Windows 的.exe安装包和 Linux 的安装脚本。常规做法如下# Linux 一行命令安装 curl -fsSL https://ollama.com/install.sh | sh但国内网络环境下下载安装包和拉取模型经常会遇到“慢得想砸电脑”的情况。这里有几个我用过且有效的折中办法找国内可访问的镜像仓库下载对应的离线安装包安装时手动执行。注意核对文件的 SHA256 校验值不要随便从一个不知名链接下载可执行文件。如果只是模型下载慢可以设置OLLAMA_HOST和OLLAMA_MODELS环境变量然后在网络状况好的时段比如凌晨执行ollama pull deepseek-r1:8b后台挂着慢慢拉。Ollama 支持从本地 GGUF 文件导入模型如果你能从其他渠道拿到模型文件可以用ollama create命令导入不一定非得从官方仓库拉。安装完成后先验证一下服务状态命令行执行ollama list能看到模型列表说明 Ollama 服务正常运行。如果用的是 Windows右下角托盘应该有 Ollama 图标端口11434默认开着。3.2 安装 DifyWindows 和 Linux 都要注意的事项Dify 官方推荐用 Docker Compose 部署这是最省心的路径因为所有依赖PostgreSQL、Redis、向量库等都会被编排起来。先准备环境Linux 服务器需要安装 Docker 和 Docker Compose 插件Windows 建议安装 Docker Desktop 并开启 WSL2 后端因为 Dify 的容器在 WSL2 里跑性能更稳定。有个容易踩的坑是 Docker Desktop 默认只分 2GB 内存跑 Dify 全家桶加 Ollama 推理明显不够建议在 Docker Desktop 的 Settings - Resources 里把内存调到 8GB 以上。然后拉取 Dify 源码并启动git clone https://github.com/langgenius/dify.git cd dify/docker cp .env.example .env docker compose up -d第一次启动会拉镜像PostgreSQL、Redis、Weaviate、Sandbox、API、Web 这些加起来有好几个 GB耐心等。启动完成后浏览器访问http://localhost/install设置管理员账号密码然后进入 Dify 主界面。我遇到过的一个常见坑是docker compose up -d之后访问页面提示连不上数据库。原因多半是容器还在初始化等两分钟再看即可。如果持续报错用docker compose logs api看具体日志。3.3 接入 Ollama 和 DeepSeek关键一步是配置地址Dify 装好之后进入右上角头像 - 设置 - 模型供应商先添加 Ollama。这里面最容易出错的是 Base URL。Dify 跑在 Docker 容器里容器内部访问宿主机不能用localhost要用host.docker.internal。所以我填的地址是http://host.docker.internal:11434然后模型名称填你在 Ollama 里已经拉取的模型名比如deepseek-r1:8b。模型类型选 LLM上下文长度要根据实际模型设置。我建议先填 8192因为你本地模型如果支持更长上下文可以在后续按需调大填太大反而可能因为超出模型实际能力而报错。接着添加 DeepSeek 供应商。Dify 的模型供应商列表里有 DeepSeek 官方选项打开后在设置里填入你自己的 API Key模型名选deepseek-chat上下文长度按官方文档确认。这里有个细节DeepSeek API Key 通常以sk-开头填的时候不要带多余空格建议直接在官网控制台复制完整 Key。加完两个供应商后进入“设置 - 默认模型”把系统推理模型设为 Ollama 的deepseek-r1:8b这样后续新建应用时默认就走本地。DeepSeek 云端模型会在工作流节点中被显式指定。3.4 创建一个真正能用的聊天应用模型配好之后回到 Dify 首页点击“创建应用”类型选“聊天助手”。应用名称随便起关键是“模型”这一步在模型下拉框里选择 Ollama 下的deepseek-r1:8b代表这个应用默认使用本地模型。如果你想测试云端效果随时切换到 DeepSeek 的deepseek-chat。提示词我建议写得稍微具体一点比如你是一位企业内部知识库助手。请根据用户的问题提供准确、简洁的解答。如果信息不足明确说明你不知道不要编造答案。填好后点“发布”在调试面板里先跑几条测试确认本地模型能正常响应。此时一个最基本的私有 AI 聊天应用已经跑通了。4. 把平台变成生产力知识库、统一 API 与工作流4.1 知识库接入RAG 才是降本增效的关键一个没有知识库的 AI 助手本质上只是个聊天玩具。Dify 的知识库功能是它的一大亮点你可以把内部文档传上去让模型基于文档内容回答问题这就是典型的 RAG 应用。创建知识库时Dify 会要求选择“索引方式”和“检索设置”。我的建议是如果你的文档量不大几千个 chunk 以内直接用 Dify 默认的向量检索就够如果文档量非常大再考虑混合检索或全文检索。上传文档时有一个高频坑.txt、.md这类纯文本 Dify 可以直接解析但.pdf、.docx需要额外的文档解析服务。本地部署的 Dify 默认没有开启 unstructured API一旦你传 PDF 就可能报错unstructured API URL is not configured for doc file processing。我的解决思路有两条最简单把 PDF 或 Word 先转成文本文件再上传。虽然土但对小团队完全够用。更正规单独启动一个 unstructured 容器服务然后在 Dify 的.env里配置对应的解析地址重新加载后就能直接解析 PDF。这种方法需要维护额外的容器适合文档类型繁多的场景。知识库建好后在聊天应用里关联它并在提示词里加上“请基于知识库内容回答不要使用你自己的知识”之类的约束效果会稳定很多。4.2 把 Dify 封装成统一 API不再直接消费各家 Key这是我最想强调的一点。当你的应用调试结束后点击 Dify 应用页面顶部的“访问 API”平台会为这个应用生成一个专用的 API 密钥格式通常是app-开头同时给你一个 API 地址前缀。有了这组信息外部系统比如你自己的网站、企业微信机器人、内部工具只需要对接 Dify 一家 API再也不需要关心底层用的是哪个模型、配的哪家供应商。调用方式也很简单下面是标准消息接口的调用示例curl --location --request POST https://你的dify域名/api/v1/chat-messages \ --header Authorization: Bearer app-你的密钥 \ --header Content-Type: application/json \ --data-raw { inputs: {}, query: 请总结一下这个月的销售数据, response_mode: blocking, conversation_id: , user: user-123 }返回结果里包含conversation_id下次对话需要带上这个 ID 才能保持上下文。这个接口设计得很干净等于你给团队或客户提供了一个“私有 AI 服务”而不是让他们直接去各家大模型官网注册充值。4.3 用工作流实现“本地默认、云端兜底”Dify 的工作流功能可以让你用拖拽的方式编排复杂的处理逻辑。我现在的做法是在知识库问答场景里第一个节点先走本地模型做基础回答并检索知识库如果本地模型对答案的置信度不高或者任务本身要求高质量生成就通过条件分支把请求路由到 DeepSeek 云端模型。这里涉及一个工作流节点配置细节每个 LLM 节点都可以独立指定模型供应商。所以你在一个工作流里可以让“意图识别”用便宜的本地小模型让“最终内容生成”用云端大模型。Dify 会按节点分别计费和调用用起来非常灵活。当然工作流不是必须的。如果你只是做个简单的个人助手直接在聊天应用里选一个模型就行。但如果你想把“本地优先、云端兜底”这件事真正落到业务里工作流是值得花半小时研究的功能。5. 成本与影响这套平台到底值不值得搭5.1 账要算清楚硬件一次性投入 vs API 持续支出很多人在意的是“搭这套东西要花多少钱”。我直接给一个实际参考一台 24GB 显存的消费级显卡主机比如 4090 级别的二手整机加上存储和内存大约一两万块预算能流畅跑deepseek-r1:14b和32b量化版本。如果只是跑 7b/8b 这种小模型一块 8GB 显存的显卡就够成本低得多。对比一下纯 API 方案假设前面算的每日 150 万 tokens 用量都走云端按当前公开价格粗算每月费用在几百元到上千元之间。关键是这个费用是持续性的业务量越大涨得越快而本地方案的电费可能一天就几块钱。我做的分流策略实际测试下来云端请求占比降到原来的 20% 左右API 账单直接少了一个数量级。而且最值钱的不是省了多少钱而是核心数据不再外流这在企业内部推进 AI 时太重要了。5.2 影响范围哪些场景适合迁到本地哪些不适合适合迁到本地的场景有这些团队内部知识库问答、文档摘要、代码补全、日志分析、文本分类、数据脱敏前的预处理。这些任务对延迟不敏感、对效果要求不是顶级本地模型足以胜任。不适合纯本地的场景也要说清楚需要极强推理能力的数学证明级问题、高质量长文创作、超大规模 RAG 检索排序这些目前还是得靠云端大模型。所以“云端兜底”不是可有可无而是这套方案的弹力后盾。我个人的判断是未来中小团队的标准配置一定是“本地小模型处理日常 云端大模型处理疑难”而不是非黑即白。这个趋势对预算有限但有数据安全需求的公司尤其友好。6. 踩坑实录常见问题与排查技巧速查表这一部分是我最想分享的毕竟理论谁都会讲真到出问题时才知道哪些坑有多深。下面这些问题是热词里出现频率最高的我全部实测过整理成分级排查思路。问题现象可能原因排查与解法Dify 添加 DeepSeek 时报An error occurred during credentials validationAPI Key 错误、账户余额不足、网络不通、模型名填错先在 DeepSeek 官网用同一 Key 调用一次 API 验证有效性检查 Dify 中填的模型名是否与官方一致确认服务器能访问 DeepSeek API 域名调用 API 报401 unauthorized: incorrect api key providedKey 复制不完整、带了空格、Key 被重置重新复制完整 Key在本地用 curl 直接请求验证 Key检查环境变量里是否残留旧 KeyDify 页面提示 SSL 错误或 HTTPS 证书问题使用 IP 访问默认走 HTTP、端口被占用、反向代理配置了无效证书内网环境直接改用http://IP访问如果配了 Nginx检查证书是否过期、proxy_pass是否正确Ollama 模型下载速度慢到无法忍受官方仓库网络路由不佳、模型文件太大错峰下载从可信镜像站获取离线安装包或 GGUF 文件用ollama create导入本地文件ollama run xxx报500 internal server error: llama-server process内存或显存不足、模型文件损坏、Ollama 版本过旧关掉多余程序释放内存删除模型重新pull升级 Ollama 到最新版换更小参数的模型Dify 工作流报400 this models maximum context length is 1048576 tokens请求内容与上下文太长超过模型配置或模型配置中上下文长度填得过大检查请求体里是否塞入超长文档在模型配置里把上下文长度改成与模型实际能力匹配的值RAG 检索结果控制在合理 chunk 数内知识库上传 PDF 报unstructured API URL is not configured本地 Dify 没启动文档解析服务先转成纯文本上传或单独部署 unstructured 容器并配置地址或下载 Dify 企业版/新版本自带的解析能力代码或工具里报no api key for provider route deepseek-official没有在 Dify 模型供应商中配置 DeepSeek Key但某个工作流节点却指定了 DeepSeek 模型去 Dify 设置里补全 DeepSeek 供应商配置检查该节点指定的模型名是否填写正确Dify 迁移到新服务器后应用数据丢失只迁移了代码没有迁移 PostgreSQL 和 Redis 数据卷备份并恢复docker compose down后对应的 volume 数据确保.env中的密钥和数据库密码保持一致6.1 几个排查思路的补充说明关于 401 这个问题我发现一个特别隐蔽的情况很多人是从聊天记录或 HTML 页面里复制的 API Key复制进去时可能带了不可见的换行符或空格。Dify 表单不会主动 trim所以哪怕看起来一样实际上 Key 是无效的。建议先在文本编辑器里粘贴一下再复制出来。关于上下文超长新手最容易在“工作流”里踩坑。因为工作流会把前序节点的输出拼接到后续节点的输入中如果前序节点返回了一大段检索结果模型该报的 400 还是会报。我通常在检索节点后面加一个“提取摘要”的 LLM 节点先把检索内容压短再交给最终生成节点这样既省 tokens 又避免超长。关于 Ollama 500 错误很多人以为是模型问题实际是电脑撑不住。你跑 14b 模型时如果系统内存不到 32GB加载 GGUF 文件大概率会失败。还有一次我把模型装到移动硬盘上读取速度跟不上导致推理进程崩溃后来把OLLAMA_MODELS指到本机 SSD 就好了。6.2 Dify 迁移的一次实战记录热词里有“dify 迁移”我也补充一下。Dify 升级或迁移服务器时最容易丢的就是 PostgreSQL 里的应用配置和向量数据库里的知识库数据。我建议在旧服务器上执行docker compose down注意先别加-v因为-v会连数据卷一起删掉。然后把整个dify/docker/volumes目录打包拷贝到新服务器再在新服务器上执行docker compose up -d数据基本能原样恢复。如果换域名或 IP记得同步修改.env里的相关配置。另外Dify 版本升级时官方文档会提示先备份数据库再操作。我就吃过一次亏直接docker compose pull然后up -d结果新版 API 和旧版数据库结构不兼容表单一直报错。后来老老实实按官方 release note 一步步迁移省了很多折腾。最后分享一个我实操中的小技巧你可能会问这套平台跑起来之后日常维护到底麻烦不麻烦我的体会是真正的维护成本主要不在技术而在“模型路由的策略”。一开始我为了让所有请求都走本地把默认模型设为最小的 1.5b 模型结果回答质量差到被同事吐槽。后来调整为 8b 本地模型做主回答、云端只处理复杂业务节点体验才终于稳定。建议你也在 Dify 里分两个应用一个“快速问答”应用默认走本地小模型适合高频低难度请求一个“深度助手”应用默认走 DeepSeek 云端适合低频高难度请求。这样每个应用的费用和体验都是可控的账单一目了然。这套私有 AI 平台的组合拳打下来我最大的收获不是省了多少钱而是“主动权回到了自己手里”——数据在自己服务器上模型可以随时换API 出口只有一个再也不用被单一厂商牵着走。希望这篇文章能帮你少走几个月的弯路动手搭一套试试看。