ollama+dify本地化部署

模型与算力

讲清把 Ollama 和 Dify 拼成一套本地 AI 应用的部署顺序、模型接入口径和排查顺序,不堆砌版本号与硬件参数。

想在自己机器或内网跑一套带知识库和编排的 AI 应用,通常会把 Ollama 当模型服务、Dify 当应用层。真动手时卡人的不是安装命令,而是两边的连接口径、模型名与地址怎么填、跑起来之后慢和不通该怎么查。这篇按部署顺序给一份可照着走的清单。

想在自己机器或内网跑一套带知识库、带流程编排的 AI 应用,常见做法是让 Ollama 负责把模型跑起来,Dify 负责对话流程、知识库和工作流。两个东西装起来都不算难,真正卡人的是两边怎么接、地址和模型名填什么、跑起来之后慢和不通该从哪查起。

这篇按部署顺序给一份能照着走的清单:先分清两边各管什么,再把模型接进 Dify,接着是排查顺序,最后说清楚什么场景下这套组合不该用。全程不聊具体硬件参数和版本号,需要实时数字就去站内对应页面核对。

先把两边的分工分清楚

Ollama 的职责只有一件:把模型加载起来,在本地暴露一个能调用的接口。Dify 管的是应用层那摊事,对话流程、知识库检索、工作流编排都在它这边。很多人一上来就把两边一起装、一起配,出问题后完全分不清是模型没起来还是应用配错了。

  • 判断顺序固定死:先确认 Ollama 单独调用能出字,再去接 Dify;反过来查会一直在两个系统之间打转
  • 部署形态取舍:同一台机器全塞一起最省心,但模型吃内存会挤压 Dify 的数据库和后台进程,分开两台更稳
  • 什么情况下不适用:只想要一个纯聊天窗口、不做编排和知识库,那就不必上 Dify,单装 Ollama 配个前端更省事
  • 接 Dify 之前先把 Ollama 的监听地址改成本机之外也能访问,否则容器里的 Dify 根本摸不到它

把模型接进 Dify 的关键几步

Dify 的模型供应商列表里选 Ollama,填的是 Ollama 服务地址,不是 Dify 自己的地址。这一点在容器化部署时最容易踩坑:配置里写 localhost 指的是容器自身,不是宿主机,要换成宿主机地址或同一个网络里的服务名。

  1. 填对服务地址按部署方式区分:Dify 跑在容器里就写宿主机 IP 或服务名,Dify 跑在宿主机上才可以用本机回环地址。填完先别急着建应用,做一次连通性测试看能不能列出模型。
  2. 原样填模型名模型名按 Ollama 里已经拉取的名字原样抄,大小写、分隔符、标签后缀不一致都会直接连不上。拿不准就去 Ollama 侧列一遍已有模型再复制。
  3. 对话模型和嵌入模型分开配知识库还需要一个嵌入模型,两类不要混填同一个。嵌入模型挑中文语义检索表现更稳的那类,具体对照去 /embeddings 页面看。
  4. 建应用前先测通连通性测试通过之后再建应用和工作流,别等到流程跑到一半才发现模型根本没接上。
配置项容易填错的地方怎么验证
服务地址容器里写 localhost 只指向自己用容器网络内的方式访问一次接口
模型名大小写或标签后缀不一致在 Ollama 侧列出模型后复制
模型类别对话模型和嵌入模型混用分别建一次测试调用
调用路径路径多写或漏写后缀用最简请求打一次看返回格式

跑起来之后按这个顺序排查

跑起来之后的症状基本就三类:慢、不通、答非所问。三类对应的排查位置完全不同,顺序错了就是在瞎改配置。建议固定成下面这个顺序,一层一层往下走。

  • 先量延迟基线:本地模型直接调用的响应速度量一次,再去 Dify 里测同一句话,差值就是应用层的开销
  • 再看连接类报错:按「服务在不在、端口通不通、模型名对不对、路径有没有多写后缀」逐层排,别一上来改配置
  • 再看显存与内存:模型加载后显存被占满、系统开始换页,表现就是越用越慢,这时降量化档位比加并发更有效
  • 最后看知识库链路:检索答非所问往往不是对话模型的问题,先怀疑切分粒度和嵌入模型是否匹配中文内容

排查时给自己留一个最小的可复现请求,不要拿复杂工作流当测试用例。工作流里变量多、分支多,任何一处出错都会被误判成模型问题。延迟测出来之后可以去 /tools/speed-test 对比一下同类环境的大致区间,判断是环境问题还是配置问题。

什么时候这套组合不该用

这套组合适合的是个人或小团队在内网搭一套能自己控制的应用。一旦使用场景变了,硬撑着用同一套架构反而更费事。下面几种情况值得提前想清楚,别等上线了再返工。

场景为什么不顺手替代思路
多人同时用单机推理容易排队,响应时间一起变长换更偏并发的推理框架,按 /compute/sizing 算一遍
有数据合规硬要求本地跑模型不等于整条链路都不出内网,存储位置同样要盘把嵌入和检索的存储位置一并纳入评估
需要长期稳定对外服务单机自建在可用性上不如托管方案先算清停机成本再决定要不要自建
模型换代旧配置不一定还能直接跑迁移前先做小范围验证再切

还有一类容易被忽略的情况:只想要一个聊天入口,不需要知识库和编排。这时候上 Dify 是给自己加负担,维护一套用不上的编排系统本身就是成本。判断标准很简单,问自己未来一个月会不会用到知识库或工作流,答案是不会就先别上。

先把 Ollama 调通,再接 Dify;先量延迟基线,再改配置。
下一步想知道不同卡数和部署形态大概能撑多少并发、模型换代时哪些配置要重配,去站内算力和模型资料页对一遍当时的数字,再决定是加机器还是换方案。

常见问题

Dify 里连不上 Ollama,最常见的原因是什么?

多半是地址口径问题。容器里写的 localhost 指向容器自身,不是跑 Ollama 的那台机器;换成宿主机地址或同一网络里的服务名再试。其次核对模型名是否与已拉取的一致,以及接口路径有没有多写或漏写后缀。先把 Ollama 单独调通,再回 Dify 里测。

这套组合跑知识库,效果差该先调哪一环?

先分清是「找不到」还是「说不对」。找不到多半是切分粒度和检索条数的问题,说不对才是对话模型的能力问题。可以先把检索到的原文片段单独看一眼,确认答案确实在库里;不在库里,换多大模型都没用。嵌入模型对中文的匹配度影响很大,挑法可对照 /embeddings。

多人一起用会不会卡?

会。Ollama 更偏单机单路的用法,几个人轮流用还行,同时并发时表现为回复越来越慢甚至超时。判断依据是模型加载后的显存占用和请求排队情况,具体能扛多少要按模型大小、量化档位和卡的类型算,用 /compute/sizing 先估一遍再决定要不要换推理框架。

本文依据各平台公开文档与官方公告整理,只做中文归纳;具体做法、参数与限制以官方文档为准。