Dify低代码平台入门与实战指南
·
Dify 低代码平台入门与实战指南
一、Dify 概述
1.1 什么是 Dify
Dify:一款开源的 LLM 应用开发平台,提供可视化编排、知识库管理、API 发布等功能,帮助开发者快速构建 AI 应用。
核心价值:
- 低代码开发:可视化拖拽,无需编写复杂代码
- 全流程管理:从 Prompt 设计到 API 发布一站式完成
- 团队协作:支持多用户协作和版本管理
- 灵活部署:支持云服务和本地部署
1.2 Dify 架构
┌─────────────────────────────────────────────────────────────┐
│ Dify 架构 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Web UI │ │ API Server │ │ Worker │ │
│ │ (前端界面) │ │ (API服务) │ │ (任务队列) │ │
│ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │
│ │ │ │ │
│ └───────────────────┼───────────────────┘ │
│ ↓ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 核心服务层 │ │
│ │ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ │ │
│ │ │ Prompt │ │ RAG │ │ Agent │ │ Tool │ │ │
│ │ │ Engine │ │ Engine │ │ Engine │ │ Engine │ │ │
│ │ └────────┘ └────────┘ └────────┘ └────────┘ │ │
│ └──────────────────────────────────────────────────────┘ │
│ │ │
│ ┌───────────────────┼───────────────────┐ │
│ ↓ ↓ ↓ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ PostgreSQL │ │ Redis │ │ Vector DB │ │
│ │ (元数据) │ │ (缓存) │ │ (向量数据) │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
1.3 Dify 版本对比
| 版本 | 特点 | 适用场景 |
|---|---|---|
| Dify Cloud | 托管服务,开箱即用 | 快速原型、小型项目 |
| Dify Self-hosted | 本地部署,数据可控 | 企业级应用、隐私敏感场景 |
| Dify Pro | 高级功能,支持 SSO | 大型团队、企业应用 |
二、安装部署
2.1 系统要求
| 组件 | 最低配置 | 推荐配置 |
|---|---|---|
| CPU | 4核 | 8核以上 |
| 内存 | 8GB | 16GB以上 |
| 存储 | 50GB | 100GB以上 |
| 网络 | 稳定网络 | 公网可访问 |
2.2 Docker 部署(推荐)
步骤 1:安装 Docker 和 Docker Compose
# Ubuntu/Debian
sudo apt update
sudo apt install docker.io docker-compose-plugin
# CentOS/RHEL
sudo yum install docker docker-compose-plugin
# 启动 Docker
sudo systemctl start docker
sudo systemctl enable docker
步骤 2:下载 Dify 配置
mkdir -p /opt/dify && cd /opt/dify
curl -fsSL https://github.com/langgenius/dify/releases/latest/download/docker-compose.yml -o docker-compose.yml
步骤 3:启动 Dify
# 后台启动
docker compose up -d
# 查看日志
docker compose logs -f
步骤 4:访问 Dify
打开浏览器访问 http://localhost:8080,首次登录需要创建管理员账户。
2.3 环境变量配置
关键配置项:
# docker-compose.yml
services:
api:
environment:
- SECRET_KEY=your-secret-key
- OPENAI_API_KEY=your-openai-key
- QWEN_API_KEY=your-qwen-key
- REDIS_URL=redis://redis:6379
- POSTGRES_HOST=postgres
- POSTGRES_PORT=5432
- POSTGRES_USER=dify
- POSTGRES_PASSWORD=dify
- POSTGRES_DB=dify
2.4 验证部署
# 检查容器状态
docker compose ps
# 测试 API
curl http://localhost:8080/api/health
三、核心概念
3.1 应用类型
| 类型 | 说明 | 适用场景 |
|---|---|---|
| 对话应用 | 交互式对话界面 | 聊天机器人、客服助手 |
| API 应用 | 通过 API 调用 | 集成到现有系统 |
| 工作流 | 可视化流程编排 | 复杂业务流程 |
3.2 核心组件
| 组件 | 说明 | 功能 |
|---|---|---|
| Prompt | 提示词模板 | 定义模型输入格式 |
| 知识库 | 文档管理系统 | 上传和管理知识文档 |
| 工具 | 外部服务调用 | 扩展应用能力 |
| 变量 | 动态参数 | 实现个性化配置 |
| 测试集 | 验证数据集 | 评估应用效果 |
3.3 应用生命周期
创建应用 → 设计 Prompt → 配置知识库 → 测试验证 → 发布上线 → 监控优化
四、创建第一个应用
4.1 步骤 1:创建对话应用
- 登录 Dify 后台
- 点击「新建应用」→「对话应用」
- 输入应用名称和描述
- 选择模型(如 GPT-4o、Claude 3.5)
4.2 步骤 2:设计 Prompt
# 系统提示词
system_prompt: |
你是一位专业的客服助手,负责回答用户关于产品的问题。
回答规则:
1. 友好礼貌
2. 使用简洁明了的语言
3. 如果不确定答案,请说明并建议用户联系人工客服
4. 避免使用技术术语
# 用户提示词模板
user_prompt: |
用户问题:{{user_input}}
请根据以下知识回答:
{{knowledge}}
4.3 步骤 3:配置知识库
上传文档:
- 进入「知识库」页面
- 点击「新建知识库」
- 上传文档(支持 PDF、Word、Markdown 等)
- 等待文档处理完成
配置检索:
retrieval:
enabled: true
top_k: 3
score_threshold: 0.7
rerank:
enabled: true
model: bge-reranker
4.4 步骤 4:测试应用
测试用例:
| 问题 | 预期回答 |
|---|---|
| “产品价格是多少?” | 回答具体价格范围 |
| “如何退换货?” | 说明退换货流程 |
| “客服电话是多少?” | 提供客服联系方式 |
测试方法:
- 在预览界面输入问题
- 检查回答质量
- 记录测试结果
4.5 步骤 5:发布应用
发布为 API:
- 点击「发布」按钮
- 选择发布版本
- 获取 API Key
- 测试 API 调用
API 调用示例:
curl -X POST https://api.dify.ai/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"inputs": {},
"query": "产品价格是多少?",
"response_mode": "streaming"
}'
五、Prompt 工程最佳实践
5.1 提示词结构
system_prompt: |
【角色定义】
你是一位专业的数据分析师。
【任务描述】
分析用户提供的数据并生成可视化报告。
【背景信息】
用户可能提供销售数据、用户行为数据等。
【输出要求】
1. 输出 JSON 格式
2. 包含数据分析结果和可视化建议
3. 使用中文输出
【约束条件】
1. 只分析提供的数据
2. 如果数据不足,请提示用户补充
user_prompt: |
用户数据:{{data}}
请分析以上数据并生成报告。
5.2 变量使用
内置变量:
| 变量 | 说明 | 示例 |
|---|---|---|
{{user_input}} | 用户输入 | 用户的问题 |
{{knowledge}} | 知识库内容 | 检索到的知识 |
{{conversation}} | 对话历史 | 之前的对话记录 |
{{file_content}} | 上传文件内容 | 文件解析结果 |
自定义变量:
variables:
- name: company_name
type: string
default: "我的公司"
description: "公司名称"
- name: industry
type: select
options: ["科技", "金融", "教育"]
default: "科技"
5.3 结构化输出
JSON 格式约束:
system_prompt: |
请输出 JSON 格式,不要包含其他内容。
格式要求:
{
"analysis": "分析结果",
"recommendations": ["建议1", "建议2"],
"confidence": 0.9
}
代码示例:
import json
def parse_response(response):
try:
return json.loads(response)
except json.JSONDecodeError:
# 提取 JSON 部分
start = response.find("{")
end = response.rfind("}") + 1
return json.loads(response[start:end])
六、知识库管理
6.1 文档类型支持
| 类型 | 扩展名 | 说明 |
|---|---|---|
| 文本 | .txt, .md | 纯文本文件 |
| 文档 | .docx, .pdf | 办公文档 |
| 表格 | .xlsx, .csv | 电子表格 |
| 网页 | URL | 网页链接 |
| 图片 | .jpg, .png | 支持 OCR |
6.2 文档处理流程
上传文档 → 解析提取 → 文本分段 → Embedding → 存入向量库
6.3 分段策略
| 策略 | 说明 | 参数配置 |
|---|---|---|
| 固定长度 | 按固定字符数分段 | chunk_size: 500 |
| 语义分段 | 按语义边界分段 | 使用语义模型 |
| 段落分段 | 按段落分隔符分段 | 按换行符分割 |
配置示例:
chunking:
strategy: semantic
chunk_size: 500
chunk_overlap: 50
max_chunk_length: 1000
6.4 检索优化
RAG 流程:
用户查询 → Embedding → 向量检索 → 结果重排序 → 构建 Prompt → 生成回答
优化技巧:
- 增加 top_k:返回更多候选结果
- 设置阈值:过滤低相关度结果
- 使用重排序:提升检索精度
- 混合检索:结合关键词和语义检索
七、工作流编排
7.1 工作流概念
工作流:将多个节点按顺序连接,实现复杂的业务逻辑。
节点类型:
| 类型 | 说明 | 示例 |
|---|---|---|
| 输入节点 | 接收用户输入 | 文本输入、文件上传 |
| LLM 节点 | 调用大模型 | GPT、Claude |
| 工具节点 | 调用外部工具 | 数据库查询、API 调用 |
| 条件节点 | 分支判断 | if-else 逻辑 |
| 循环节点 | 重复执行 | for/while 循环 |
| 输出节点 | 返回结果 | 文本输出、文件下载 |
7.2 创建工作流
步骤 1:新建工作流
- 点击「新建应用」→「工作流」
- 输入名称和描述
步骤 2:设计流程
输入 → 意图识别 → [条件判断]
├── 知识问答 → RAG检索 → LLM回答 → 输出
├── 数据查询 → SQL生成 → 数据库执行 → 结果格式化 → 输出
└── 文件处理 → 文件解析 → LLM分析 → 报告生成 → 输出
步骤 3:配置节点
# LLM 节点配置
llm_node:
model: gpt-4o
temperature: 0.7
system_prompt: |
你是一位专业的数据分析助手。
user_prompt: |
请分析以下数据:{{data}}
请输出 JSON 格式的分析结果。
# 工具节点配置
tool_node:
type: database
connection: postgres
query: SELECT * FROM sales WHERE date >= '{{start_date}}'
7.3 工作流示例
场景:客户服务机器人
用户输入 → 意图识别 → [条件判断]
├── 产品咨询 → RAG检索知识库 → LLM生成回答 → 输出
├── 订单查询 → 调用订单API → 格式化结果 → 输出
└── 投诉处理 → 记录投诉 → 分配工单 → 回复用户 → 输出
八、API 开发
8.1 API 类型
| 类型 | 说明 | 端点 |
|---|---|---|
| 聊天 API | 对话交互 | /v1/chat/completions |
| 完成 API | 文本生成 | /v1/completions |
| 知识库 API | 知识检索 | /v1/knowledge_base |
| 工作流 API | 工作流触发 | /v1/workflow/run |
8.2 认证方式
| 方式 | 说明 | 适用场景 |
|---|---|---|
| API Key | 通过请求头传递 | 服务器端调用 |
| Session Token | 会话级令牌 | 客户端调用 |
| OAuth 2.0 | 标准认证协议 | 企业级集成 |
8.3 调用示例
Python 示例:
import requests
API_KEY = "your-api-key"
BASE_URL = "https://api.dify.ai/v1"
def chat_with_bot(message):
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
data = {
"inputs": {},
"query": message,
"response_mode": "streaming",
"user": "user-123"
}
response = requests.post(
f"{BASE_URL}/chat/completions",
headers=headers,
json=data,
stream=True
)
for chunk in response.iter_content(chunk_size=1024):
if chunk:
print(chunk.decode("utf-8"), end="")
# 使用示例
chat_with_bot("你好,请问产品价格是多少?")
JavaScript 示例:
const API_KEY = "your-api-key";
const BASE_URL = "https://api.dify.ai/v1";
async function chat(message) {
const response = await fetch(`${BASE_URL}/chat/completions`, {
method: "POST",
headers: {
"Authorization": `Bearer ${API_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
inputs: {},
query: message,
response_mode: "streaming",
user: "user-123"
})
});
const reader = response.body.getReader();
while (true) {
const { done, value } = await reader.read();
if (done) break;
console.log(new TextDecoder().decode(value));
}
}
// 使用示例
chat("你好,请问产品价格是多少?");
九、团队协作
9.1 角色权限
| 角色 | 权限 | 说明 |
|---|---|---|
| 管理员 | 全部权限 | 管理平台配置 |
| 开发者 | 应用开发 | 创建和编辑应用 |
| 测试员 | 测试验证 | 测试应用功能 |
| 访客 | 查看权限 | 查看应用信息 |
9.2 版本管理
功能特性:
- 版本控制:保存和管理应用版本
- 回滚功能:恢复到历史版本
- 分支管理:支持并行开发
操作流程:
创建版本 → 开发修改 → 测试验证 → 发布上线
9.3 协作模式
| 模式 | 说明 | 适用场景 |
|---|---|---|
| 单人开发 | 个人独立开发 | 小型项目 |
| 团队协作 | 多人共同开发 | 中型项目 |
| 企业协作 | 跨部门协作 | 大型项目 |
十、性能优化
10.1 模型选择策略
| 场景 | 推荐模型 | 理由 |
|---|---|---|
| 快速响应 | GPT-3.5 / Qwen 2.5-7B | 响应速度快,成本低 |
| 高质量生成 | GPT-4o / Claude 3.5 | 生成质量高 |
| 中文场景 | Qwen 2.5 / Claude 3.5 | 中文理解好 |
| 隐私敏感 | 本地模型(Ollama) | 数据不出本地 |
10.2 缓存优化
策略:
- 对话缓存:缓存重复查询
- 知识库缓存:缓存检索结果
- 模型缓存:缓存频繁调用的模型
配置示例:
cache:
enabled: true
ttl: 3600 # 缓存时间(秒)
max_size: 10000 # 最大缓存数
10.3 异步处理
适用场景:
- 长时间运行的任务
- 批量处理任务
- 需要后台执行的操作
代码示例:
def async_process(task_id):
# 异步处理任务
result = run_long_task(task_id)
# 通知结果
notify_user(task_id, result)
十一、监控与调试
11.1 监控指标
| 指标 | 说明 | 目标值 |
|---|---|---|
| 响应时间 | API 响应耗时 | < 2秒 |
| 成功率 | 请求成功比例 | > 99% |
| Token 使用 | 模型 Token 消耗 | 合理控制 |
| 错误率 | 错误请求比例 | < 1% |
11.2 日志系统
日志类型:
| 类型 | 说明 | 用途 |
|---|---|---|
| 访问日志 | 请求记录 | 流量分析 |
| 错误日志 | 错误信息 | 故障排查 |
| 性能日志 | 性能数据 | 性能优化 |
查看日志:
# 查看 API 日志
docker compose logs api
# 查看 Worker 日志
docker compose logs worker
11.3 调试技巧
方法:
- 启用调试模式:查看详细执行过程
- 使用测试集:验证应用效果
- 查看中间结果:检查每一步输出
- 对比不同模型:选择最优模型
十二、实战:构建企业知识库助手
12.1 需求分析
场景:企业内部知识库助手,帮助员工快速查找公司政策、流程文档等。
功能需求:
- 支持文档上传和管理
- 智能问答功能
- 多轮对话支持
- 权限控制
12.2 架构设计
┌─────────────────────────────────────────────────────────────┐
│ 企业知识库助手 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 用户端 │
│ ┌──────────┐ │
│ │ Web UI │ ←─── 对话界面 │
│ └────┬─────┘ │
│ │ │
│ ↓ │
│ ┌────────────────────────────────────────────────────┐ │
│ │ Dify 平台 │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ Prompt │ │ Knowledge│ │ Tools │ │ │
│ │ │ Engine │ │ Base │ │ Engine │ │ │
│ │ └────┬─────┘ └────┬─────┘ └────┬─────┘ │ │
│ │ │ │ │ │ │
│ │ └─────────────┼─────────────┘ │ │
│ │ ↓ │ │
│ │ ┌────────────────┐ │ │
│ │ │ LLM Model │ │ │
│ │ │ (GPT-4o) │ │ │
│ │ └────────────────┘ │ │
│ └────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
12.3 实现步骤
步骤 1:创建知识库
# 通过 API 创建知识库
curl -X POST https://api.dify.ai/v1/knowledge_base \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "企业知识库",
"description": "公司政策、流程文档",
"provider": "pgvector"
}'
步骤 2:上传文档
# 上传文档到知识库
curl -X POST https://api.dify.ai/v1/knowledge_base/{kb_id}/documents \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "file=@company_policy.pdf" \
-F "file_name=company_policy.pdf"
步骤 3:配置应用
system_prompt: |
你是一位专业的企业知识库助手。
回答规则:
1. 基于知识库内容回答
2. 使用正式的语言
3. 提供引用来源
4. 如果找不到答案,请说明
retrieval:
enabled: true
top_k: 5
score_threshold: 0.6
步骤 4:发布应用
- 创建 API 密钥
- 集成到企业内部系统
- 配置权限控制
12.4 测试验证
测试用例:
| 问题 | 预期结果 |
|---|---|
| “年假政策是什么?” | 返回年假天数和申请流程 |
| “报销流程是怎样的?” | 说明报销步骤和要求 |
| “公司地址在哪里?” | 提供公司地址信息 |
十三、总结
核心要点
- Dify 定位:低代码 LLM 应用开发平台
- 部署方式:Docker 一键部署,支持云服务和本地部署
- 核心功能:Prompt 设计、知识库管理、工作流编排、API 发布
- 优势:可视化开发、团队协作、灵活部署
学习路径
安装部署 → 创建简单应用 → 学习 Prompt 工程 →
配置知识库 → 构建工作流 → 发布 API → 优化性能
下一步建议
- 安装 Dify 并创建第一个应用
- 学习 Prompt 工程最佳实践
- 尝试构建知识库问答系统
- 探索工作流编排功能
- 学习 API 集成和扩展
更多推荐
所有评论(0)