Dify 开源 LLM 应用开发平台部署与使用指南
在生成式 AI 技术快速落地的今天,越来越多团队希望将大模型能力嵌入业务流程——无论是智能客服、知识问答,还是自动化内容生成。但直接调用 API 写代码,往往面临维护成本高、Prompt 难管理、迭代效率低等问题。
有没有一种方式,能让开发者甚至非技术人员,也能像搭积木一样构建复杂的 AI 应用?Dify正是为此而生。
它不是一个简单的前端界面,而是一套完整的 LLM 应用操作系统:从模型接入、流程编排、RAG 检索到 Agent 行为控制,全部可视化操作。更重要的是,它是开源的,支持私有化部署,真正把数据主权和系统可控性交还给用户。
本文不讲概念堆砌,而是带你一步步从零开始,在本地环境跑起 Dify,完成核心配置,并动手搭建一个基于企业知识库的智能客服机器人。过程中会穿插一些实战建议和避坑提示,帮你少走弯路。
本地部署:5 分钟启动全栈服务
Dify 的架构采用微服务设计,依赖多个组件协同工作。幸运的是,官方提供了docker-compose脚本,一键即可拉起整套环境。
环境准备
最低配置要求如下:
- CPU:2 核以上
- 内存:4GB(若运行本地模型建议 8GB+)
- 存储:10GB 可用空间(SSD 更佳)
- 系统:Linux / macOS / Windows(需启用 WSL2)
- 软件:Docker ≥ 19.03,Docker Compose v2+
⚠️ 特别提醒:如果你打算用 Ollama 加载 Llama3 或 Qwen 这类大模型,务必确保主机有足够内存。7B 参数模型通常需要至少 6–8GB 显存或内存才能流畅推理。没有 GPU 的话,响应速度会明显变慢。
快速启动
git clone https://github.com/langgenius/dify.git cd dify/docker cp .env.example .env docker-compose up -d这条命令会启动以下关键服务:
| 服务 | 作用 |
|---|---|
nginx | 前端入口 + 反向代理 |
api | 后端逻辑处理(Flask) |
worker | 异步任务队列(Celery + Redis) |
db | PostgreSQL,存储应用与用户数据 |
vector-db | Weaviate,负责向量检索(RAG 核心) |
redis | 缓存与消息中间件 |
等待约 1–2 分钟后执行:
docker ps你应该能看到类似输出:
CONTAINER ID IMAGE STATUS PORTS NAMES ... nginx Up 0.0.0.0:80->80/tcp docker-nginx-1 ... dify-api Up 5001/tcp docker-api-1 ... postgres Up 5432/tcp docker-db-1 ... weaviate/weaviate Up 8080/tcp docker-vector-db-1只要这些容器都在运行状态,就可以打开浏览器访问 http://localhost。
首次进入会跳转到初始化页面,创建管理员账号后即可登录主控台。
✅ 小技巧:由于 Nginx 映射到了宿主机 80 端口,局域网内的其他设备也可以通过
http://<你的IP>直接访问,适合团队协作调试。
模型接入:灵活对接各类 LLM 生态
Dify 的强大之处在于其“模型中立”设计。你可以自由组合不同来源的模型,比如用 OpenAI 的 GPT 做生成,用本地 BGE 做 Embedding,再用 Xinference 托管 Rerank 模型。
进入【设置 → 模型供应商】,支持的类型包括:
- LLM:文本生成
- Text Embedding:向量化编码
- Rerank:结果重排序
- TTS / STT:语音合成与识别
接入 OneAPI 统一网关
如果你已经用 OneAPI 聚合了多个模型服务商(如阿里云百炼、火山引擎、Azure OpenAI),只需添加一个兼容接口即可。
- 类型选择 “OpenAI API Compatible”
- Base URL 填写:
https://your-oneapi-domain.com/v1 - 输入全局 API Key
- 保存并测试连接
🔥 注意事项:
- URL不要带末尾斜杠
- 确保 OneAPI 已正确映射模型名称,例如gpt-3.5-turbo是否可用
- 若出现认证失败,请检查是否启用了 IP 白名单或速率限制
集成 Ollama 本地模型
Ollama 是目前最流行的本地模型运行工具。假设你在宿主机上已运行ollama serve,监听http://localhost:11434。
要在 Docker 容器内访问宿主机的服务,必须使用特殊域名:
http://host.docker.internal:11434这是 Docker 提供的内置 DNS 名称,专用于容器访问宿主机。
配置步骤:
- 在模型供应商中选择 “Ollama”
- Host Address 填写上述地址
- 点击“同步模型列表”,自动拉取当前加载的模型(如
llama3,qwen:7b,mistral) - 启用所需模型并设为默认
💡 提示:可在
.env文件中预先设置OLLAMA_BASE_URL=http://host.docker.internal:11434,避免每次手动填写。
使用 Xinference 托管 Embedding 模型
对于中文场景,推荐使用bge-large-zh-v1.5或gte-large-zh这类高性能向量模型。它们对显存要求较高,适合用 Xinference 统一管理。
先在服务器启动 Xinference:
xinference-local start --host 0.0.0.0 --port 9997然后加载模型:
xinference launch --model-name bge-large-zh-v1.5 --device cuda回到 Dify 控制台:
- 添加“Xinference”供应商
- 地址填
http://host.docker.internal:9997 - 同步模型,选择对应的 Embedding 模型
- 保存并应用于后续 RAG 流程
❗ 常见错误:如果提示 404,大概率是因为误加了
/v1路径前缀。Xinference 默认根路径即为 API 入口,无需额外拼接。
邮件服务配置:开启团队协作基础功能
要实现成员邀请、密码找回等功能,必须配置邮件发送能力。Dify 支持两种主流方式:SMTP 和 Resend。
方式一:使用 SMTP(适合已有邮箱账户)
编辑.env文件:
MAIL_TYPE=smtp MAIL_DEFAULT_SENDER=notify@yourcompany.com MAIL_SERVER=smtp.gmail.com MAIL_PORT=587 MAIL_USERNAME=notify@yourcompany.com MAIL_PASSWORD=your_app_password MAIL_USE_TLS=true⚠️ Gmail 用户注意:不能使用登录密码,需生成“应用专用密码”。
修改完成后重启服务:
docker-compose down && docker-compose up -d方式二:使用 Resend(现代替代方案)
Resend 是近年来兴起的邮件 API 服务,专为开发者设计,注册即送 3000 封免费额度。
- 访问 resend.com 注册账号
- 获取 API Key(形如
re_XXXXXXXXXXXXXXXXXXXXXX) - 修改
.env:
MAIL_TYPE=resend RESEND_API_KEY=re_XXXXXXXXXXXXXXXXXXXXXX MAIL_DEFAULT_SENDER="Dify <dify@yourdomain.com>"同样重启服务生效。
构建第一个 AI 应用:企业知识库客服机器人
现在我们来实战演练,搭建一个能回答内部 FAQ 的智能客服助手。
创建应用
- 登录 Dify 控制台
- 点击“创建应用” → 选择“文本生成”
- 命名为“客服助手”,上传图标和描述
设计 Prompt 编排逻辑
进入“Prompt 编排”页面,输入以下模板:
你是一个专业的客户服务代表,请根据以下知识库内容回答用户问题。 【知识库】 {{#context#}} 【用户问题】 {{query}} 请用简洁、礼貌的语言作答,避免猜测未知信息。这里的{{#context#}}是 RAG 检索结果占位符,{{query}}是用户输入的问题。
🧠 实践建议:
- 不要让模型“自由发挥”,明确指令边界
- 加入拒答机制,防止幻觉输出
- 对敏感词做过滤预处理(可通过前置函数实现)
启用 RAG 检索能力
- 进入“检索设置”
- 选择 Embedding 模型(如
bge-large-zh) - 上传企业常见问题文档(PDF/TXT/DOCX 等格式)
- 设置分块策略:
- 分块大小:512 token(兼顾上下文完整性和检索精度)
- 重叠长度:50 token(保留语义连续性) - 点击“构建索引”
上传完成后,系统会对文档进行切片、向量化并存入 Weaviate 数据库。
⚖️ 权衡点:
- 分块太小 → 上下文缺失
- 分块太大 → 检索噪声增多
中文文档建议以段落为单位拆分,避免跨句断裂
发布与集成
完成配置后点击“发布”,可以选择多种方式对外提供服务:
- Web App:生成可分享链接,嵌入官网或内部门户
- API 接口:获取 API Key,通过 HTTP 调用
- SDK 嵌入:使用 JavaScript SDK 将聊天窗口集成到网页
例如,调用 API 的示例请求:
curl -X POST 'http://localhost/api/v1/apps/{app_id}/chat-messages' \ -H 'Authorization: Bearer {api_key}' \ -H 'Content-Type: application/json' \ -d '{ "inputs": {}, "query": "如何申请年假?", "response_mode": "blocking" }'返回结果包含答案、引用来源及 Token 消耗统计。
高级玩法:探索 Agent 与多版本管理
当你熟悉了基本流程,可以尝试更复杂的模式。
Agent 模式:打造自主决策智能体
切换应用类型为“Agent”,就能解锁更强的能力:
- 工具调用(Function Calling):连接数据库、搜索引擎、计算器等外部系统
- 思维链(Chain-of-Thought):展示推理过程,增强可信度
- 循环与终止判断:支持多步任务自动执行
举个例子:构建一个“数据分析 Agent”,接收自然语言查询如“上个月销售额最高的产品是什么?”,它可以:
- 自动拆解问题 → 识别时间范围和指标
- 调用 SQL 工具查询数据库
- 汇总结果并生成图表描述
- 返回结构化回答
这种能力特别适用于 BI 助手、运维巡检、工单分类等场景。
多版本管理与 A/B 测试
实际生产中,Prompt 往往需要不断优化。Dify 支持版本快照和灰度发布:
- 创建多个 Prompt 版本(如 v1.0 强调专业术语,v2.0 更口语化)
- 设置流量比例(如 70% 用户走 v1,30% 走 v2)
- 查看各版本的响应质量、延迟、Token 成本等指标
这让你可以用真实用户反馈驱动迭代,而不是凭感觉调整。
写在最后:为什么值得投入时间学习 Dify?
我见过太多团队一开始用脚本快速验证想法,但随着需求增长,逐渐陷入“胶水代码地狱”:Prompt 散落在各个文件里,修改一次要改十几处,上线还要手动同步。
Dify 解决的正是这类工程化痛点。它不是取代编程,而是把重复劳动标准化,让开发者能把精力集中在更有价值的地方——比如设计更好的交互逻辑、优化用户体验、构建闭环系统。
更重要的是,它的开源属性意味着你不必被厂商锁定。你可以完全掌控模型选型、数据流向、安全策略,这对企业级应用至关重要。
下一步你可以尝试:
- 导入真实业务数据,构建专属知识问答系统
- 探索 Agent 模式下的自动化工作流设计
- 结合 CI/CD 实现 AI 应用的自动化部署与监控
技术的本质是服务于人。而 Dify 正在让这句话变得更真实一点。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考