Dify平台深度指南:从入门到精通
这篇指南讲什么
这是一篇Dify平台的完整教程,从”这是啥”讲到”怎么用”。不管你是纯新手还是想进阶的老手,都能找到有价值的内容。文章很长,建议收藏慢慢看。
Dify是什么?
Dify(名字来自”Do It For You”)是一款开源的AI应用开发平台。简单来说,它就是帮你快速搭建AI应用的工具。
用大白话讲:Dify就是一个不用写很多代码,就能把AI大模型变成实际产品的平台。
你可能会问:我直接调用OpenAI API不就行了?为什么要用Dify?
好问题!让我打个比方:
不用Dify,直接调API → 像自己盖毛坯房,从打地基开始 用Dify → 像买精装修房,拎包入住
具体来说,Dify帮你搞定这些事情:
- 不用自己写对话管理的代码
- 不用自己处理上下文窗口
- 不用自己搭知识库系统
- 不用自己写API接口
- 不用自己处理各种异常情况
这些”脏活累活”Dify都帮你做了,你只需要关注业务逻辑。
核心特性详解
特性一:DAG可视化工作流
Dify的工作流引擎是它最核心的功能。它基于DAG(有向无环图)模型设计,说人话就是:把复杂的AI流程画成图,用节点和线来表示。
看个例子:
用户输入 → 问题分类 → ┬→ 技术问题 → 知识库检索 → 生成回答
├→ 投诉问题 → 情绪分析 → 安抚策略 → 生成回答
└→ 咨询问题 → FAQ检索 → 生成回答
↓
质量检查 → 输出答案
这个图看起来复杂,但用Dify只需要拖拖拽拽就能搭出来。
工作流的优势:
- 模块化:每个节点只做一件事,可以单独测试
- 可视化:业务流程一目了然,好理解、好维护
- 可观测:每个节点的输入输出都能看到,方便调试
- 可扩展:想加新功能就加新节点,不影响现有逻辑
特性二:RAG知识库系统
RAG(检索增强生成)是当前AI应用最火的技术之一。Dify原生支持RAG,让你不用额外集成就能做知识库问答。
RAG是什么?
RAG = Retrieval Augmented Generation(检索增强生成)。原理很简单:
- 把你的文档切成小块,转换成”向量”存起来
- 用户提问时,先去向量库里找相关的文档块
- 把找到的文档块和用户问题一起喂给AI
- AI根据文档内容生成回答
这样做的好处是:AI回答的内容是”有据可查”的,而不是瞎编的。
Dify的RAG能力:
- 支持多种文档格式(PDF、Word、Markdown、TXT等)
- 支持多种Embedding模型(OpenAI、Cohere、Jina等)
- 支持多种向量数据库(pgvector、Qdrant、Weaviate、Milvus、Pinecone)
- 支持混合检索(语义+关键词)和rerank重排序
特性三:Agent智能体框架
Dify的Agent框架可以创建”能自主决策”的智能体。它不只是简单地问答,而是能:
- 理解复杂意图:把用户的一句话拆解成多个任务
- 调用外部工具:查天气、调API、读写数据库
- 多步骤执行:一个任务可以包含多个步骤,Agent自己决定下一步干嘛
- 自我反思:做错了能重新来
支持两种Agent策略:
- ReAct:推理+行动,适合需要复杂推理的场景
- Function Calling:直接调用工具,适合工具丰富的场景
特性四:API优先架构
Dify采用API优先的设计。每个创建的应用都会自动生成API,让你把AI能力集成到任何地方。
# 调用示例
curl -X POST 'http://localhost/v1/chat-messages' \
-H 'Authorization: Bearer app-xxxxx' \
-H 'Content-Type: application/json' \
-d '{
"query": "你好",
"user": "user_123"
}'支持流式响应(SSE),能实时返回AI正在生成的文字,体验很好。
安装部署指南
方式一:Docker部署(推荐)
Docker部署是最简单的方式,适合大多数人。
前置条件:
-
安装Docker Desktop
- Mac:https://www.docker.com/products/docker-desktop/
- Windows:https://www.docker.com/products/docker-desktop/
- Linux:各种发行版命令不同,官网有教程
-
确认Docker正常运行
docker --version # 应该看到类似:Docker version 24.0.0
部署步骤:
# 1. 克隆Dify代码
git clone https://github.com/langgenius/dify.git
# 2. 进入docker目录
cd dify/docker
# 3. 复制环境配置
cp .env.example .env
# 4. 启动所有服务(这步需要等一会儿)
docker compose up -d
# 5. 检查服务状态
docker compose ps
# 应该看到 nginx、web、api、worker、db、redis 都是 Up访问Dify:
打开浏览器,访问:
- 本地:
http://localhost - 服务器:
http://你的服务器IP
第一次访问会让你创建管理员账号,创建完就能用了。
常见问题
Q:docker compose命令找不到? A:新版Docker用
docker compose(空格),老版本用docker-compose(横杠)。如果提示命令不存在,先更新Docker。Q:端口80被占用? A:修改
.env文件,找到EXPOSE_NGINX_PORT=80改成其他端口如8080。Q:启动后都是Exit状态? A:执行
docker compose logs查看错误日志,常见问题是内存不足或端口冲突。
方式二:Docker Compose 生产部署
上面的快速部署适合体验,生产环境建议用更完整的配置。
创建 docker-compose.yml(在docker目录下,.env同级的位置):
# 增强版docker-compose.yml
version: '3'
services:
# Nginx反向代理
nginx:
image: nginx:alpine
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- ./nginx/ssl:/etc/nginx/ssl:ro
depends_on:
- web
networks:
- dify-network
# 前端
web:
image: langgenius/dify-web:0.6.14
restart: always
environment:
CONSOLE_WEB_URL: ${CONSOLE_WEB_URL:-http://localhost}
CONSOLE_API_URL: ${CONSOLE_API_URL:-http://api:5000}
SERVICE_API_URL: ${SERVICE_API_URL:-http://api:5000}
networks:
- dify-network
# 后端API
api:
image: langgenius/dify-api:0.6.14
restart: always
environment:
MODE: ${MODE:-standalone}
LOG_LEVEL: ${LOG_LEVEL:-INFO}
DB_USERNAME: ${DB_USERNAME:-dify}
DB_PASSWORD: ${DB_PASSWORD:-dify_chatflow}
DB_HOST: ${DB_HOST:-db}
DB_PORT: ${DB_PORT:-5432}
DB_DATABASE: ${DB_DATABASE:-dify}
REDIS_HOST: ${REDIS_HOST:-redis}
REDIS_PORT: ${REDIS_PORT:-6379}
REDIS_PASSWORD: ${REDIS_PASSWORD:-dify}
volumes:
- ./volumes/db:/opt/dify/db
depends_on:
- db
- redis
networks:
- dify-network
# 异步Worker
worker:
image: langgenius/dify-api:0.6.14
restart: always
environment:
MODE: ${MODE:-standalone}
LOG_LEVEL: ${LOG_LEVEL:-INFO}
DB_USERNAME: ${DB_USERNAME:-dify}
DB_PASSWORD: ${DB_PASSWORD:-dify_chatflow}
DB_HOST: ${DB_HOST:-db}
DB_PORT: ${DB_PORT:-5432}
DB_DATABASE: ${DB_DATABASE:-dify}
REDIS_HOST: ${REDIS_HOST:-redis}
REDIS_PORT: ${REDIS_PORT:-6379}
REDIS_PASSWORD: ${REDIS_PASSWORD:-dify}
volumes:
- ./volumes/db:/opt/dify/db
depends_on:
- db
- redis
networks:
- dify-network
# 数据库
db:
image: postgres:15-alpine
restart: always
environment:
POSTGRES_USER: ${DB_USERNAME:-dify}
POSTGRES_PASSWORD: ${DB_PASSWORD:-dify_chatflow}
POSTGRES_DB: ${DB_DATABASE:-dify}
volumes:
- ./volumes/db/data:/var/lib/postgresql/data
networks:
- dify-network
# Redis
redis:
image: redis:7-alpine
restart: always
command: redis-server --requirepass ${REDIS_PASSWORD:-dify}
volumes:
- ./volumes/redis:/data
networks:
- dify-network
networks:
dify-network:
driver: bridge方式三:源码部署
适合需要深度定制或者在特殊环境运行的情况。
环境要求:
- Python 3.11+
- Node.js 18+
- PostgreSQL 14+
- Redis 6+
- Git
# 克隆代码
git clone https://github.com/langgenius/dify.git
cd dify
# 后端部署
cd api
python -m venv venv
source venv/bin/activate # Linux/Mac
# venv\Scripts\activate # Windows
pip install -r requirements.txt
# 配置环境变量
cp .env.example .env
# 编辑.env文件,配置数据库连接
# 初始化数据库
flask db upgrade
# 启动后端
flask run --host 0.0.0.0 --port 5000
# 前端部署(另开终端)
cd ../web
npm install
npm run build
npm run start界面操作详解
应用类型选择
登录Dify后,点击”创建应用”,会看到四种类型:
| 类型 | 特点 | 适合场景 |
|---|---|---|
| 助手 | 对话式,有上下文 | 客服、问答、助手 |
| Agent | 能调用工具,自主决策 | 复杂任务自动化 |
| Workflow | 纯工作流,无对话界面 | 批量处理、自动化流程 |
| Completion | 纯文本生成 | 文案创作、内容生成 |
新手推荐从助手类型开始,上手最快。
Prompt编排界面
创建应用后进入Prompt编排界面,这是Dify最核心的编辑区域。
界面布局:
┌─────────────────────────────────────────────────────┐
│ 系统提示词 │
│ ┌───────────────────────────────────────────────┐ │
│ │ 你是一个专业的客服助手... │ │
│ └───────────────────────────────────────────────┘ │
│ │
│ 用户提示词 │
│ ┌───────────────────────────────────────────────┐ │
│ │ 用户问题:{{query}} │ │
│ │ 参考资料:{{context}} │ │
│ └───────────────────────────────────────────────┘ │
│ │
│ 变量配置 │
│ ├─ query (输入变量) │
│ └─ context (上下文变量,来自知识库) │
│ │
│ [预览] [调试] [发布] │
└─────────────────────────────────────────────────────┘
系统提示词定义AI的角色和约束条件,用户提示词定义输入模板和输出格式。
知识库管理
知识库是Dify的重要功能。在左侧菜单找到”知识库”,创建知识库:
创建流程:
-
填写基本信息
- 名称:比如”产品知识库”
- 描述:说明知识库用途
-
选择Embedding模型
- OpenAI Embeddings(需要API Key)
- 或者本地部署的开源模型
-
配置分块策略
- 自动分块(推荐新手)
- 自定义分块(适合有特殊需求)
-
上传文档
- 支持PDF、Word、Markdown、TXT、CSV等
- 等待系统处理完成
-
审核分块结果
- 查看自动分块的效果
- 必要时手动调整
工作流进阶
工作流节点类型
Dify工作流支持多种节点:
LLM节点 调用大语言模型,是工作流的核心。
配置示例:
model: gpt-4o
temperature: 0.7
max_tokens: 2000
prompt: |
你是一个{{role}},请回答以下问题。
用户问题:{{query}}知识库检索节点 从知识库中检索相关内容。
配置示例:
knowledge_base: 产品知识库
retrieval_model:
top_k: 5
score_threshold: 0.7
mode: hybrid # 混合检索条件分支节点 根据条件分流。
配置示例:
conditions:
- variable: intent
operator: equal
value: complaint
next_node: emotion_analysis
- variable: intent
operator: equal
value: inquiry
next_node: knowledge_retrieval
- variable: "*"
next_node: default_handler代码执行节点 执行自定义逻辑。
# Python示例
import json
def main(data: str) -> dict:
# 数据处理
result = {
"processed": True,
"content": data.strip(),
"length": len(data)
}
return resultHTTP请求节点 调用外部API。
配置示例:
method: POST
url: https://api.example.com/analyze
headers:
Authorization: "Bearer {{api_key}}"
body:
text: "{{user_input}}"
timeout: 30迭代节点 遍历数组处理。
配置示例:
iterator: "{{items}}"
body:
- llm: 处理每个元素
- variable: 收集结果工作流设计模式
模式一:顺序执行 最简单的模式,所有步骤按顺序执行。
开始 → 步骤1 → 步骤2 → 步骤3 → 结束
适用场景:步骤之间有严格的先后依赖。
模式二:并行执行 多个分支同时执行,最后合并。
→ 分支A
/
开始 → 分叉 → 分支B → 合并 → 结束
\
→ 分支C
适用场景:分支之间没有依赖,可以同时执行。
模式三:条件分支 根据条件走不同路径。
开始 → 条件判断
├─ 条件A → 处理A → 结束
├─ 条件B → 处理B → 结束
└─ 默认 → 默认处理 → 结束
适用场景:需要根据不同情况做不同处理。
模式四:循环迭代 重复执行直到满足退出条件。
开始 → 循环体 → 条件判断
↓
├─ 继续 → 循环体
└─ 退出 → 结束
适用场景:需要反复处理直到达标。
实战案例:智能客服工作流
下面展示一个完整的智能客服工作流设计:
【开始】
↓
【用户意图识别】
├─ 售前咨询 → 【产品知识库检索】 → 【生成回答】
├─ 售后问题 → 【FAQ知识库检索】 → 【情绪分析】 → 【生成回答】
├─ 投诉建议 → 【创建工单】 → 【回复处理进度】
└─ 其他 → 【通用回复】
↓
【质量检查】
├─ 置信度≥0.8 → 【直接输出】
└─ 置信度<0.8 → 【人工审核】
↓
【结束】
节点配置示例:
1. 意图识别LLM节点
model: gpt-4o-mini
prompt: |
分析用户消息的意图类别:
- pre_sales: 售前咨询
- after_sales: 售后问题
- complaint: 投诉建议
- other: 其他
用户消息:{{user_message}}
只返回意图类别名称。
2. 知识库检索节点
knowledge_base: 产品FAQ
query: "{{user_message}}"
retrieval:
top_k: 3
score_threshold: 0.7
3. 条件分支节点
conditions:
- if: "{{intent}} == 'pre_sales'"
then: product_retrieval
- if: "{{intent}} == 'after_sales'"
then: faq_retrieval
- if: "{{intent}} == 'complaint'"
then: create_ticket
- else: default_response
RAG知识库进阶
文档预处理
知识库的效果很大程度取决于文档质量。做好预处理事半功倍:
1. 清洗文档内容
- 去除页眉页脚、目录
- 删除无关的装饰性内容
- 统一格式和排版
2. 结构化处理
- 使用标题层级(h1、h2、h3)
- 使用列表和表格
- 重要内容放在前面
3. 格式建议
# 标题要清晰
## 小节内容
正文内容,应该完整表述一个知识点。
### 更细的分类
- 要点1
- 要点2
| 表格 | 列1 | 列2 |
|------|------|------|
| 内容 | xxx | xxx |分块策略
分块策略直接影响检索效果。常见策略:
| 策略 | 描述 | 适用场景 |
|---|---|---|
| 固定大小 | 按token数分块 | 通用场景 |
| 段落分块 | 按段落分块 | 结构清晰的文档 |
| 语义分块 | AI自动识别语义边界 | 复杂文档 |
| 标题分块 | 按标题层级分块 | 层级分明的文档 |
分块参数建议:
chunk_size: 500 # 每个块的大小(token)
chunk_overlap: 50 # 块之间的重叠- chunk_size太大:丢失细粒度信息
- chunk_size太小:丢失上下文
- chunk_overlap:确保边界信息不丢失
检索策略优化
混合检索
混合语义检索和关键词检索,效果最好:
retrieval:
mode: hybrid
semantic:
enabled: true
rrf: true # Reciprocal Rank Fusion
keyword:
enabled: true
rrf: trueRerank重排序
初筛后再用rerank模型重排序,提升精度:
retrieval:
rerank:
enabled: true
model: "BAAI/bge-reranker-base"
top_k: 20 # 初筛数量
rank_top_k: 5 # 最终返回数量多知识库路由
复杂场景可能需要多个知识库。设计路由策略:
# 路由Prompt示例
prompt: |
用户问题:{{query}}
请判断应该使用哪个知识库:
- 产品知识库:产品功能、规格、使用方法
- 政策知识库:售后政策、退换货政策
- 常见问题:FAQ问答
只返回知识库名称。Agent开发进阶
Agent vs 普通助手
| 维度 | 普通助手 | Agent |
|---|---|---|
| 交互方式 | 问答 | 任务执行 |
| 工具使用 | 无 | 可调用多个工具 |
| 执行模式 | 单轮响应 | 多轮推理 |
| 适用场景 | 简单问答 | 复杂任务 |
ReAct Agent
ReAct = Reasoning + Acting(推理+行动)。适合需要复杂推理的场景。
工作原理:
- 推理:根据当前状态和目标,决定下一步
- 行动:执行某个动作(调用工具)
- 观察:获取行动结果
- 循环:继续推理→行动→观察,直到完成任务
配置示例:
agent:
type: ReAct
model: gpt-4o
tools:
- search_knowledge_base
- calculator
- web_search
prompt: |
你是一个智能助手,可以调用各种工具完成任务。
当你需要完成一个任务时:
1. 分析任务要求
2. 决定是否需要调用工具
3. 如果需要,选择合适的工具
4. 根据工具结果决定下一步
记住:
- 每次只调用一个工具
- 工具调用格式:{tool: "工具名", input: {参数}}Function Calling Agent
适合工具丰富的场景,模型直接决定调用哪个工具。
配置示例:
agent:
type: function_calling
model: gpt-4o
tools:
- name: get_weather
description: 获取城市天气
parameters:
city: {type: string, required: true}
- name: send_email
description: 发送邮件
parameters:
to: {type: string, required: true}
subject: {type: string, required: true}
body: {type: string, required: true}API部署与调用
发布为API
在应用页面点击”发布”,然后选择”发布为API”。
发布后会获得:
- API地址
- API Key
- 接口文档
调用示例
同步对话(等待完整响应):
curl -X POST 'http://localhost/v1/chat-messages' \
-H 'Authorization: Bearer app-xxxxxx' \
-H 'Content-Type: application/json' \
-d '{
"query": "你好,请介绍一下你们的产品",
"response_mode": "blocking",
"user": "user_123"
}'流式对话(实时返回):
curl -X POST 'http://localhost/v1/chat-messages' \
-H 'Authorization: Bearer app-xxxxxx' \
-H 'Content-Type: application/json' \
-H 'Accept: text/event-stream' \
-d '{
"query": "你好",
"response_mode": "streaming",
"user": "user_123"
}'Python SDK调用:
from dify import DifyClient
client = DifyClient(api_key="app-xxxxxx")
# 同步对话
response = client.chat_message(
query="你好",
user="user_123",
response_mode="blocking"
)
print(response["answer"])
# 流式对话
for chunk in client.chat_message_stream(
query="你好",
user="user_123"
):
print(chunk["answer"], end="", flush=True)生产环境优化
性能优化
1. 启用向量缓存
# .env文件
ENABLE_VECTOR_CACHE=True2. 启用模型响应缓存 减少重复调用的开销。
3. 使用异步处理 非实时场景用异步模式。
4. 数据库索引优化 定期维护索引:
-- 分析查询计划
EXPLAIN ANALYZE SELECT * FROM documents WHERE similar('%query%');
-- 重建索引
REINDEX INDEX idx_documents_embedding;安全配置
1. 启用API Key认证
# .env文件
CONSOLE_WEB_URL=http://localhost
APP_WEB_URL=http://localhost
CONSOLE_API_URL=http://localhost:50002. 配置CORS
CONSOLE_CORS_ALLOW_ORIGINS=http://localhost:3000
APP_CORS_ALLOW_ORIGINS=http://localhost:30003. 限流配置
RATE_LIMIT_ENABLED=True
RATE_LIMIT_PER_MINUTE=60监控与日志
Dify内置了日志和监控功能:
日志查看:
- 应用日志:每个对话的输入输出、token消耗
- 系统日志:API访问、错误记录
监控指标:
- 调用量趋势
- 响应时间分布
- Token消耗统计
与竞品对比
Dify vs Coze
| 维度 | Dify | Coze |
|---|---|---|
| 部署方式 | 支持私有化 | 仅云端 |
| 开源 | 完全开源 | 部分开源 |
| 模型支持 | 多模型混合 | 主要字节系 |
| 工作流 | 功能完善 | 更图形化 |
| 目标用户 | 企业开发者 | 业务人员 |
| 学习曲线 | 中等 | 低 |
选择建议:
- 需要私有化 → Dify
- 追求快速上手 → Coze
Dify vs LangFlow
| 维度 | Dify | LangFlow |
|---|---|---|
| 架构理念 | 应用导向 | 数据流导向 |
| 界面风格 | Web应用 | 画布节点 |
| 工作流 | 预定义节点 | 自由组合 |
| 学习难度 | 中等 | 较高 |
| 生产可用 | 强 | 一般 |
选择建议:
- 快速出产品 → Dify
- 实验研究 → LangFlow
总结
Dify是一款功能强大的开源AI应用开发平台,适合:
- 想快速构建AI应用的开发者
- 需要私有化部署的企业
- 需要RAG知识库场景的项目
- 需要复杂工作流的项目
核心优势:
- 开源可控,功能完整
- DAG工作流,能力强大
- 原生RAG,知识库友好
- API优先,集成方便
学习建议:
- 先用Docker快速部署体验
- 从”助手”类型开始,熟悉界面
- 尝试创建知识库,上传文档
- 学习工作流编排
- 进阶Agent开发
相关文档
- 智能体搭建 - AI Agent核心概念
- dify工作流设计 - 深入学习工作流编排
- coze平台深度指南 - 对比学习Coze平台
- n8n平台深度指南 - 对比学习n8n平台
- 工作流设计模式 - 通用工作流设计模式
- AI对话记忆系统 - 记忆系统设计
本文档由归愚知识系统生成 last updated: 2026-04-24