接入 Ollama
把 Ollama 接到 Dify,推理和 Embedding 都可以不出公网。适合内网、演示、以及不想为试错付云厂商 token 的场景。Dify 仍负责编排、知识库与发布;Ollama 只提供 OpenAI 风格的本地模型 HTTP API(默认端口 11434)。
先让本机 Ollama 跑起来
在宿主机(不是 Dify 容器里)安装并启动 Ollama,拉一个对话模型和一个 Embedding 模型,例如:
模型名必须与你在 Dify 里填写的完全一致。本站 Ollama 教程 覆盖安装、Modelfile 与显存。Dify 容器访问不到「只绑在 127.0.0.1」的服务时,需要让 Ollama 监听更宽的地址,例如设置 OLLAMA_HOST=0.0.0.0(或 0.0.0.0:11434)后重启 Ollama。只在受信网络上这么做,并用防火墙限制 11434。
在 Dify 里添加 Ollama 供应商
- Integrations → Model Provider,安装 Ollama
- Setup:填写 Base URL(见下一节,不要想当然写 localhost)
- 添加具体模型:对话模型选 LLM 类型;
nomic-embed-text一类选 Text Embedding - 保存并通过连接校验
可把默认 System Reasoning 指到本地 LLM,默认 Embedding 指到本地向量模型,这样新建知识库不必每次手选。
Docker 网络:不要用 localhost
Dify Community Edition 的 api / worker 跑在容器里。容器内的 localhost / 127.0.0.1 是容器自己,不是你的笔记本。Ollama 若装在宿主机,应使用:
在 Dify 的 api 容器里可以 curl http://host.docker.internal:11434/api/tags 做冒烟:能列出模型再回 Studio 点校验。
Embedding 与知识库
本地 RAG 需要同一套 Embedding 贯穿「建索引」和「查询」。常见组合:
- 对话:
qwen2.5:7b/llama3.2等 - 向量:
nomic-embed-text或厂商提供的中英 Embedding
知识库选 High Quality,Embedding 选 Ollama 上的向量模型。换 Embedding 模型必须重建索引,否则向量空间不一致,检索会 silently 变差。混合检索仍可用;没有云 Rerank 时,靠权重与 Top K 先调到能用。
显存不够时:对话与 Embedding 错开高峰、换更小量化、或 Embedding 仍走云、只把 LLM 放本地。
对照 LangChain
LangChain 用 langchain-ollama 或 OpenAI 兼容 base_url。Dify 是同一 URL,只是配在供应商表单里。本地模型的上下文长度、工具调用质量通常弱于旗舰云模型:Agent 优先试 Function Calling 是否可用,不行就降到 Workflow,少让弱模型自己规划。
常见问题
Connection refused / timeout? 99% 是 localhost 写错,或 Ollama 只听 127.0.0.1,或防火墙挡了 11434。
校验 404? 模型没 pull,或名称多了 :latest 之类后缀对不上。
知识库处理失败? 没加 Embedding 类型模型,或 worker 同样访问不到 host.docker.internal。
Linux 仍不通? 查 extra_hosts、本机 IP、以及是否误用了 Docker bridge 网关却没让 Ollama 听 0.0.0.0。