Dify 入门教程:开源 AI 应用开发平台实战
完整的 Dify 入门到进阶教程,涵盖 Docker 部署、知识库搭建、工作流编排以及接入 DeepSeek 等外部模型的实战指南。
为什么你需要 Dify
我是 DFK,作为一个 AI 工具的重度用户,我用过无数种方式来构建 AI 应用——从纯代码写 LangChain,到用 Coze 拖拽搭建,再到用 Dify 这样的平台。最终,Dify 成了我个人项目中最常用的开发平台。
原因很简单:Dify 在灵活性和易用性之间找到了最佳平衡点。
它比 Coze 更灵活——你可以私有部署、自定义一切;它比直接写 LangChain 代码更省时间——可视化编排让复杂流程一目了然。如果你对零代码搭建方案也有兴趣,可以看看我的 Coze 完全指南,两个工具各有所长。
Dify 是什么
Dify 是一个 开源的 LLMOps 平台,让你可以快速构建和部署 AI 应用。它的名字来源于 "Do It For You"(帮你搞定),这也很好地概括了它的理念——把 AI 应用开发中的脏活累活都帮你处理好。
核心概念
在开始之前,先了解几个核心概念:
| 概念 | 解释 | 类比 |
|---|---|---|
| Prompt 编排 | 设计 AI 的行为和回答方式 | 相当于给员工写岗位说明书 |
| RAG(检索增强生成) | 让 AI 能查阅你的私有文档来回答 | 给员工一本参考手册 |
| Agent | 能自主使用工具完成任务的 AI | 一个有手有脚的智能助手 |
| Workflow(工作流) | 多步骤的 AI 处理流水线 | 一条自动化生产线 |
| Dataset(知识库) | 存储文档和数据的地方 | 公司的知识库系统 |
Dify 能做什么
- 聊天助手:带知识库的智能问答系统
- 文本生成应用:自动写文案、翻译、摘要
- Agent 应用:能使用搜索、计算等工具的智能体
- 工作流应用:多步骤的复杂 AI 处理流程
Docker 部署实战
Dify 支持云端使用和自部署。对于想要完全控制数据和自由定制的用户,Docker 私有部署是最佳选择。
前置准备
# 确保已安装 Docker 和 Docker Compose
docker --version # 需要 Docker 20.10+
docker compose version # 需要 Docker Compose V2
# 机器最低配置要求
# CPU: 2核
# 内存: 4GB(推荐 8GB)
# 磁盘: 20GB 可用空间
部署步骤
第一步:克隆代码
git clone https://github.com/langgenius/dify.git
cd dify/docker
第二步:配置环境变量
# 复制环境变量模板
cp .env.example .env
# 编辑 .env 文件,修改关键配置
关键配置项:
# 密钥配置(务必修改!)
SECRET_KEY=your-random-secret-key-here
CONSOLE_API_URL=http://your-server-ip/console/api
APP_WEB_URL=http://your-server-ip
# 数据库配置(默认使用内置 PostgreSQL)
DB_USERNAME=postgres
DB_PASSWORD=your-db-password
# 向量数据库配置(默认使用 Weaviate)
VECTOR_STORE=weaviate
第三步:启动服务
docker compose up -d
等待几分钟,所有容器启动完成后:
# 检查容器状态
docker compose ps
# 应该看到以下服务都是 running 状态:
# - dify-web (前端界面)
# - dify-api (后端API)
# - dify-worker (后台任务)
# - postgres (数据库)
# - redis (缓存)
# - weaviate (向量数据库)
# - nginx (反向代理)
第四步:初始化
- 访问
http://your-server-ip - 创建管理员账号
- 进入工作台
常见问题排查:
# 如果某个容器启动失败,查看日志
docker compose logs dify-api
# 如果端口被占用
# 修改 .env 中的端口配置,或停掉占用端口的服务
# 如果内存不足
# 升级服务器配置或减少不必要的服务
搭建你的第一个 AI 应用
场景:带知识库的问答 Bot
我们来搭建一个实际有用的东西——一个能回答你产品相关问题的 AI 客服,它能够检索你上传的文档来给出准确答案。
第一步:创建知识库
- 进入「知识库」页面,点击「创建知识库」
- 上传你的文档(支持 TXT、PDF、Markdown、HTML 等)
- 配置文本分段参数:
分段方式:自动分段(推荐)
分段长度:500-1000 tokens(中文文档建议 500)
重叠长度:50 tokens
清洗规则:启用(去除多余空格、特殊字符)
- 选择嵌入模型(推荐使用 OpenAI text-embedding-3-small 或 bge-large-zh-v1.5)
- 等待索引完成
文档准备建议:
- 按主题拆分文档,每个文件聚焦一个话题
- 确保文档中有清晰的标题和结构
- 删除无关内容(页眉页脚、广告等)
- 如果是 FAQ 格式,每个问答对独立一段效果最好
第二步:创建应用
- 进入「工作室」,点击「创建应用」
- 选择「聊天助手」类型
- 编写提示词:
你是 Learn AI 平台的智能客服助手。你的职责是回答用户关于 AI 工具和学习资源的问题。
## 回答原则
1. 基于知识库内容回答,不要编造信息
2. 如果知识库中没有相关信息,诚实说明"这个问题我暂时没有相关资料"
3. 回答要简洁清晰,使用编号列表组织复杂内容
4. 适当引导用户探索更多相关内容
## 回答格式
- 简短问题:直接回答,不超过 3 句话
- 复杂问题:先给总结,再分步骤展开
- 引用知识库内容时,标注来源文档
- 在「上下文」设置中关联刚创建的知识库
- 配置检索参数:
检索模式:混合检索(推荐)
Top K:3(检索最相关的 3 段内容)
Score 阈值:0.5(低于此分数的结果不返回)
第三步:测试和优化
在右侧预览窗口测试对话效果。常见优化方向:
- 回答不准确:检查文档分段是否合理,调高 Top K 值
- 回答太冗长:在 Prompt 中强调简洁性
- 检索不到内容:检查嵌入模型质量,尝试调低 Score 阈值
- 回答有幻觉:在 Prompt 中强调"只基于知识库回答"
进阶:工作流模式
工作流是 Dify 最强大的功能,它让你能够构建复杂的多步骤 AI 流水线。
工作流 vs 聊天助手
| 特性 | 聊天助手 | 工作流 |
|---|---|---|
| 交互方式 | 对话式 | 输入-输出式 |
| 适合场景 | 问答、客服 | 批量处理、复杂流程 |
| 灵活性 | 中等 | 极高 |
| 可视化 | 简单配置 | 节点拖拽编排 |
工作流实战:文章内容处理流水线
我在 joinlearn 网站上用 Dify 搭建了一个内容处理流水线,流程如下:
输入:原始文章文本
↓
[LLM节点] 提取文章关键信息(标题、摘要、标签)
↓
[条件判断] 文章类型?
├── 教程类 → [LLM节点] 优化为教程格式
├── 评测类 → [LLM节点] 生成对比表格
└── 观点类 → [LLM节点] 提炼核心论点
↓
[LLM节点] 生成 SEO 优化的 meta description
↓
[代码节点] 格式化输出为 JSON
↓
输出:结构化文章数据
关键工作流节点详解
LLM 节点:调用大模型的核心节点
# LLM 节点配置示例
模型: deepseek-chat
温度: 0.3 # 低温度保证输出稳定性
最大 tokens: 2000
系统提示词: |
你是一个专业的内容编辑。
请从以下文章中提取关键信息。
用户输入: "{{input_text}}"
条件判断节点:根据条件走不同分支
条件:如果 {{article_type}} 等于 "tutorial"
→ 走教程处理分支
否则如果 {{article_type}} 等于 "review"
→ 走评测处理分支
否则
→ 走默认处理分支
代码节点:执行自定义 Python/JavaScript 代码
def main(inputs: dict) -> dict:
title = inputs.get("title", "")
summary = inputs.get("summary", "")
tags = inputs.get("tags", "").split(",")
return {
"result": {
"title": title.strip(),
"summary": summary.strip(),
"tags": [tag.strip() for tag in tags],
"slug": title.lower().replace(" ", "-")
}
}
HTTP 请求节点:调用外部 API
URL: https://api.example.com/publish
方法: POST
Headers:
Content-Type: application/json
Authorization: Bearer {{api_key}}
Body:
title: "{{title}}"
content: "{{content}}"
接入外部模型
Dify 支持接入各种大语言模型,这也是它最大的优势之一。
接入 DeepSeek
DeepSeek 是目前性价比最高的选择,接入非常简单:
- 进入「设置」→「模型供应商」
- 找到 DeepSeek,点击配置
- 填入你的 DeepSeek API Key
- 在应用中选择 deepseek-chat 或 deepseek-coder
关于 DeepSeek 的详细使用指南,可以看我的 DeepSeek 完全指南。
接入 OpenAI
API Key: sk-your-openai-api-key
API Base URL: https://api.openai.com/v1
(如果使用中转服务,改为中转地址)
接入本地模型(通过 Ollama)
这是最省钱的方案——完全免费,而且数据不出本地。
- 先安装并运行 Ollama(详见我的 Ollama 本地部署指南)
- 在 Dify 模型设置中选择 Ollama
- 填入 Ollama 地址(默认
http://localhost:11434) - Dify 会自动检测已下载的模型
# 先在 Ollama 中下载模型
ollama pull deepseek-r1:8b
ollama pull qwen2.5:7b
# Dify 中就能看到并使用这些模型了
模型选择建议
| 场景 | 推荐模型 | 原因 |
|---|---|---|
| 日常问答 | DeepSeek Chat | 便宜好用 |
| 英文任务 | GPT-4o | 英文能力最强 |
| 编程辅助 | DeepSeek Coder | 代码能力强 |
| 隐私敏感 | Ollama 本地模型 | 数据不出本地 |
| 长文处理 | Claude 3.5 | 长上下文能力强 |
Dify vs LangChain vs Coze
| 维度 | Dify | LangChain | Coze |
|---|---|---|---|
| 类型 | 可视化平台 | 代码框架 | 零代码平台 |
| 开源 | 是 | 是 | 否 |
| 私有部署 | 支持 | 自行搭建 | 不支持 |
| 学习曲线 | 中等 | 陡峭 | 平缓 |
| 灵活性 | 高 | 极高 | 中等 |
| 适合人群 | 技术团队 | 开发者 | 非技术用户 |
| 可视化编排 | 有 | 无(需 LangGraph) | 有 |
| 模型自由度 | 任意模型 | 任意模型 | 平台提供 |
我的选择逻辑:
- 快速验证想法 → Coze
- 团队协作开发 AI 应用 → Dify
- 需要深度定制和完全控制 → LangChain
我的实战案例:为 joinlearn 搭建 AI FAQ Bot
我用 Dify 为 joinlearn.com 搭建了一个智能 FAQ Bot,整个过程分享如下:
需求
- 自动回答用户关于 AI 工具使用的问题
- 能检索网站上的所有教程文章
- 回答要准确,不要编造
实现方案
- 知识库:把网站上所有博客文章导出为 Markdown 文件,上传到 Dify 知识库
- 嵌入模型:使用 bge-large-zh-v1.5(中文效果最好)
- 对话模型:DeepSeek Chat(性价比最高)
- 检索策略:混合检索 + Top K=5
效果
经过两周的优化,Bot 在常见问题上的回答准确率达到了 90% 以上。主要的优化措施:
- 把长文章按章节拆分后上传
- 在 Prompt 中加入了常见问题的示范回答
- 对于检索不到的问题,引导用户去看具体的教程文章
部署
通过 Dify 的 API 接口集成到网站前端,同时通过 n8n 工作流 做了一些自动化处理(比如自动记录未回答的问题,方便后续补充知识库)。
总结和建议
Dify 是目前最适合技术团队使用的开源 AI 应用开发平台。它的优势在于:
- 开源免费:社区版功能已经非常强大
- 私有部署:数据完全自己掌控
- 模型自由:可以接入任何大语言模型
- 可视化编排:工作流拖拽设计,直观高效
- 生态丰富:工具、插件、模板持续更新
上手建议:
- 先用 Dify 云端版体验功能(dify.ai)
- 确认适合你的需求后再部署私有版
- 从简单的聊天助手开始,逐步用工作流实现复杂功能
- 多尝试不同的模型组合,找到性价比最优解