Dify 自托管:基于您的LLM创建AI应用 本地
Dify 是一个开源平台,可让您通过可视化界面构建 AI 应用——聊天机器人、工作流、智能体和 RAG 助手——无需编写一行代码。自行部署并连接 Ollama 后,它便能在您的本地模型之上提供完整的“无代码”功能层:您的提示词、文档和数据始终不会离开您的机器。本指南涵盖通过 Docker Compose 部署、连接本地 LLM,以及构建第一个可正常工作的 RAG 助手。
#为何选择Dify而非聊天界面
Open WebUI 或 LM Studio 足以与模型对话。Dify 则更进一步:构建可复用的应用。您定义系统提示词,接入知识库,通过 API 或可嵌入的聊天组件提供这些功能,并对每轮迭代进行版本管理。它相当于可在本地运行的开源版 OpenAI Assistants 或 Coze。
Dify + Ollama 组合有两方面的优势。首先是隐私:与连接 GPT-4 或 Claude 的 Dify 不同,这里的已索引文档和对话都留在您的基础设施上。其次是成本:不按 token 收费,您可以反复尝试数百个提示词,无需盯着 API 账单。
- Chatbot
- 一个配备系统提示、输入变量和对话记忆的对话助手。
- 智能体
- 能够循环调用工具(网络搜索、计算、API),直至完成任务的助手。
- Workflow
- 由 LLM、条件判断、信息提取、HTTP 等节点构成的可视化链路,用于确定性处理。
- Knowledge / RAG
- 对您的文档进行索引,使应用能够基于这些文档进行响应,并附上来源引用。
#先决条件
Dify 是一个多容器应用(API、后台任务进程、前端、PostgreSQL 数据库、Redis、向量数据库)。它通过 Docker Compose 部署。模型方面,这里假设 Ollama 已经运行,并监听其默认端口。
- Docker + Docker Compose
- 较新版本的 Docker Engine,并安装 Compose 插件(命令为 docker compose)。在 Windows/macOS 上,Docker Desktop 即可满足要求。
- Ollama正常运行
- 已安装 Ollama 守护进程,且可通过 http://localhost:11434 访问。开始前,请运行 ollama list 进行测试。
- 一个聊天模型
- 例如 qwen3.5:9b(256k 上下文、多模态、Apache 2.0 许可证),它是 2026 年 8GB 显存条件下的标杆选择。采用 Q4 量化时,它可装入约 6.6GB 显存,RTX 3060 12GB 绰绰有余。
- 嵌入模型
- 这是 RAG 必不可少的组件:nomic-embed-text 是默认选择,轻量且高效。
- 资源
- 除 Ollama 模型消耗的显存和内存外,还需为 Dify 技术栈本身预留约 8 GB 内存。
#使用Docker Compose安装Dify
Dify 提供官方仓库,其中包含一个开箱即用的 docker 文件夹。克隆仓库,复制示例环境文件,然后启动整套服务。
- 01克隆仓库从 GitHub 获取项目的最新稳定版本,然后进入包含 docker-compose.yaml 文件的 docker 文件夹。
- 02创建 .env 文件将.env.example复制为.env。默认值足以满足本地使用;稍后您会在此文件中调整端口或密钥。
- 03启动服务栈运行 docker compose up -d。首次启动会下载镜像并初始化 PostgreSQL 数据库;预计需要几分钟时间。
- 04创建管理员账户在浏览器中打开 http://localhost/install,并输入第一个管理员的邮箱和密码。该账户将管理工作空间。
#接入Ollama作为模型提供方
只有将 Ollama 设置为模型提供商,Dify 才能识别您的本地模型。这需要在模型设置中完成,而不是修改配置文件。最需要注意的是 URL:在 Docker 容器中,localhost 指向容器自身,而不是运行 Ollama 的宿主机。
- 01打开供应商设置点击右上角的头像 → 设置 → 模型提供商。在列表中查找 Ollama 并选择它。
- 02输入服务器URL在 Base URL 字段中,输入容器能够访问的地址(见下方提示框)。模型名称必须与 ollama list 返回的名称完全一致,例如 qwen3.5:9b。
- 03添加聊天模型模型类型:LLM。填写上下文长度(例如 8192 或更高,具体取决于模型),然后确认。Dify 会在保存时测试连接。
- 04添加嵌入模型对 nomic-embed-text 重复上述操作,并选择 Text Embedding 类型。没有这个模型,您就无法构建知识库。
- 05设置默认模型接着仍在设置中,将 qwen3.5:9b 设为默认系统模型,并将 nomic-embed-text 设为默认嵌入模型。
#无需编程,构建首个 RAG 助手
RAG(检索增强生成)使模型能够基于您的文档进行回答,而不仅仅依赖训练时的知识。在Dify中,这通过一个知识库(Knowledge)实现,之后再将其关联到某个应用。
- 01创建知识库Knowledge 选项卡 → 创建。导入您的文件(PDF、Markdown、TXT、DOCX)。Dify 会自动将文件切分为文本块。
- 02调整分块与索引设置请选择“高质量”索引模式,该模式使用您的 nomic-embed-text 嵌入模型。如果您的文档结构化程度很高(如表格、代码),请调整文本块的大小。
- 03创建聊天应用Studio选项卡 → 创建应用 → 聊天机器人。为其命名并添加描述。
- 04编写系统提示在编辑器中描述助手的角色:「你仅根据提供的文档回答。若文档中未包含相关信息,请明确指出。」这有助于限制幻觉的发生。
- 05关联知识库在应用的“上下文”面板中,添加第 1 步创建的知识库。启用来源引用,让回答显示所使用的摘录。
- 06测试后发布请使用右侧的调试面板提出问题。当行为符合预期时,点击发布以获取聊天URL和API密钥。
#工作流和智能体:无代码能做到什么程度
超越简单的聊天机器人,Dify 提供了两种更高级的模式。工作流模式提供了一个可视化画布,用户可以连接节点:用户输入、调用 LLM、条件判断(if/else)、参数提取、HTTP 请求、列表迭代。由此构建出确定性的数据流程——例如:接收一封电子邮件,进行分类,提取实体,然后生成标准回复。
Agent 模式下,模型可以自主决定调用哪些工具以及调用顺序,并在循环中持续执行,直到达成目标。该模式更强大但也更脆弱:性能高度依赖模型的推理能力以及遵循工具调用格式的能力。小型本地模型(2-4B)表现不佳;建议选择专为工具使用优化的模型,例如 GLM 4.7 Flash(MoE 30B-A3B,MIT,约19 GB)或 Qwen 3.8 27B(约18 GB),前提是您的 VRAM 足够。
- 无代码工具擅长的方面
- 快速制作 RAG 聊天机器人原型,串联几个 LLM 步骤,无需编写后端即可提供 API,团队协作迭代提示词。
- 本地环境中的瓶颈所在
- 要求较高的多工具智能体需要具备可靠工具调用能力的模型,因此也需要相应的显存。Qwen 3.5 9B 足以用于 RAG,但通常难以胜任复杂智能体的需求。
- 何时进入代码阶段
- 精细的业务逻辑、定制集成、对检索流程的完全控制:当可视化画布显现出局限时,LangChain 这样的库就能接手。
#故障排除
- 添加模型时出现「Connection refused」错误
- Dify 无法连接到 Ollama。问题几乎总是出在 URL 上:请将 localhost 替换为 host.docker.internal(Docker Desktop)或 Docker 网关的 IP 地址(Linux),并确认 Ollama 确实在 0.0.0.0 上监听。
- 模型未显示
- 输入的名称与 ollama list 列出的名称不一致。请复制完整准确的名称,包括标签(qwen3.5:9b,而不是 qwen3.5)。
- 文档索引过程中出现错误
- 嵌入模型未配置或未下载。请执行 ollama pull nomic-embed-text 并将其设置为默认嵌入模型。
- 响应非常缓慢
- 聊天模型很可能有一部分运算已转由 CPU 承担。请改用更轻量的量化格式(Q4_K_M)或更小的模型,并确认 Ollama 确实在使用 GPU。
- 端口 80 已被占用
- 另一个服务占用了端口。请修改.env文件中的EXPOSE_NGINX_PORT(例如8080),然后重新运行docker compose up -d。
- 尽管使用了RAG仍产生偏离主题的回复
- 请确认知识库已正确关联到应用,并且系统提示要求模型必须依据上下文作答。同时调整文本块的大小。
#深入了解
Dify 能发挥多大价值,取决于支撑它的模型和基础设施有多可靠。这些指南有助于巩固它所依赖的基础组件。
- 安装 Ollama
- 通过 11434 端口提供聊天模型和嵌入向量服务的守护进程——整个 Dify 本地技术栈的基础。
- 使用 ChromaDB 和 Ollama 进行本地 RAG
- 用于了解 Dify 在底层自动完成了哪些操作,并在无代码方案显现局限时,用 Python 重新掌握控制权。
- n8n + Ollama:本地自动化
- 另一种无代码方法,专注于任务自动化,与 Dify 的工作流互补。
有反馈、发现了错误,或想补充说明?请告诉我们,让这份指南对每个人都更有帮助。