基于 Dify 低代码平台开发 AI 应用:从入门到生产部署
本文介绍基于 Dify 低代码平台开发 AI 应用的完整流程,包括环境搭建、文本摘要、私有知识库问答(RAG)、多模态图片分析及工作流插件开发。内容涵盖 Docker 部署步骤、Prompt 设计技巧、API 集成方法及生产环境优化方案,帮助开发者快速构建企业级 AI 应用。

本文介绍基于 Dify 低代码平台开发 AI 应用的完整流程,包括环境搭建、文本摘要、私有知识库问答(RAG)、多模态图片分析及工作流插件开发。内容涵盖 Docker 部署步骤、Prompt 设计技巧、API 集成方法及生产环境优化方案,帮助开发者快速构建企业级 AI 应用。

引言
在人工智能技术飞速发展的今天,企业和开发者对 AI 应用的需求日益增长。然而,传统 AI 应用开发面临着诸多痛点:一是技术门槛高,需要掌握大模型 API 调用、prompt 工程、知识库构建等多领域知识;二是开发周期长,从需求分析到功能落地往往需要数周甚至数月;三是维护成本高,模型迭代、数据更新、权限管理等工作繁琐;四是集成难度大,不同模型、工具、数据源的整合需要大量定制化开发。
Dify 作为一款开源低代码 AI 应用开发平台,恰好解决了这些痛点。它具备以下核心优势:
本文将以 "理论 + 实战" 的形式,带领读者从 Dify 环境搭建开始,逐步开发文本摘要、私有知识库问答、多模态图片分析三类典型 AI 应用,并讲解工作流设计、插件开发、生产部署与优化等高级内容,最终帮助读者掌握基于 Dify 快速构建企业级 AI 应用的能力。
在开始开发前,我们需要先理解 Dify 的核心概念与架构设计,这将帮助我们更高效地使用平台。
Dify 采用分层架构设计,确保系统的灵活性、可扩展性和稳定性,架构分为四层:
Dify 支持两类模型,满足不同场景需求:
Dify 提供两种部署方式:Docker Compose 快速部署(适合新手)和本地源码部署(适合二次开发),本节将详细讲解两种部署流程。
Docker Compose 部署无需复杂的依赖配置,只需几分钟即可完成 Dify 启动,适合快速体验和生产环境使用。
以 Ubuntu 22.04 为例,执行以下命令安装依赖:
# 更新软件源
sudo apt update && sudo apt upgrade -y
# 安装 Docker
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io
# 安装 Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# 验证安装
docker --version
docker-compose --version
# 创建 Dify 目录
mkdir -p /opt/dify && cd /opt/dify
# 下载 docker-compose.yml 文件
wget https://raw.githubusercontent.com/langgenius/dify/main/docker-compose.yml
# 下载环境变量配置文件
wget https://raw.githubusercontent.com/langgenius/dify/main/.env.example -O .env
编辑.env 文件,修改关键配置(如端口、数据库密码):
vim .env
常用配置项说明:
# 后台启动所有服务
docker-compose up -d
# 查看服务启动状态
docker-compose ps
启动成功后,输出应显示所有服务(api、web、db、redis、worker 等)状态为 Up。
界面展示 docker-compose ps 命令执行结果,包含 7 个服务:dify-api、dify-web、dify-db、dify-redis、dify-worker、dify-nginx、dify-websocket,所有服务状态均为 "Up (healthy)",表示启动成功。
打开浏览器,输入 http://服务器 IP:端口(如 http://192.168.1.100:8000),进入 Dify 登录界面。
图 1:Dify 登录界面

界面左侧为 Dify 品牌标识和产品介绍,右侧为登录表单,包含 "邮箱" 和 "密码" 输入框,下方有 "忘记密码" 和 "注册账号" 按钮,首次访问需点击 "注册账号" 创建管理员账户。
首次访问需注册管理员账户,填写邮箱、密码后完成注册,注册成功后自动登录到 Dify 控制台主界面。
图 2:Dify 控制台主界面

界面顶部为导航栏(包含首页、应用、知识库、工作流、插件、设置),左侧为功能菜单,中间为控制台首页,显示应用数量、知识库数量、最近访问的应用列表,右侧为快速操作按钮(新建应用、新建知识库)。
若需要对 Dify 进行二次开发(如定制界面、扩展功能),可采用本地源码部署方式。
git clone https://github.com/langgenius/dify.git
cd dify
# 进入后端目录
cd api
# 创建虚拟环境
python -m venv venv
source venv/bin/activate # Linux/macOS
# venv\Scripts\activate # Windows
# 安装依赖
pip install -r requirements.txt
# 初始化数据库
cp .env.example .env
# 编辑.env 文件,配置数据库、Redis 连接信息
vim .env
# 执行数据库迁移
flask db upgrade
# 启动后端服务
flask run --host=0.0.0.0 --port=5001
# 进入前端目录
cd ../web
# 安装依赖
npm install
# 配置环境变量
cp .env.example .env
# 编辑.env 文件,设置 REACT_APP_API_URL 为后端服务地址
vim .env
# 启动前端开发服务
npm start
前端服务启动后,访问 http://localhost:3000,后端服务地址为 http://localhost:5001。
若启动时提示 "端口已被占用",可修改.env 文件中的 PORT 配置(Docker 部署)或启动命令中的--port 参数(源码部署),选择未被占用的端口(如 8001、5002)。
执行 docker-compose logs -f 查看日志,定位失败原因:
文本摘要应用是最基础的 AI 应用之一,功能为 "用户输入长文本,AI 自动生成简洁摘要"。本节将详细讲解基于 Dify 开发文本摘要应用的完整流程,包括应用创建、prompt 设计、模型配置、API 集成等步骤。
prompt 设计直接影响 AI 摘要的质量,需明确模型的角色、任务、输出格式和约束条件。
你是一名专业的文本摘要工程师,擅长提取文本核心信息并生成简洁、准确的摘要。请按照以下规则处理用户提供的文本:
1. 摘要需包含文本的核心主题、关键人物/事件、主要结论(若有);
2. 避免遗漏重要信息,同时不添加文本中没有的内容;
3. 根据用户选择的摘要长度调整内容详略:
- 短摘要(100 字以内):仅保留核心主题和关键结论;
- 中摘要(100-300 字):包含核心主题、关键事件、主要结论;
- 长摘要(300 字以上):详细描述文本结构、核心内容、关键细节、主要结论;
4. 摘要语言需与用户输入文本语言一致(如用户输入中文,摘要也为中文);
5. 输出格式:先说明摘要长度类型,再输出摘要内容,示例:
【短摘要】本文介绍了人工智能技术在医疗领域的应用现状,包括疾病诊断、药物研发等场景,指出当前技术面临的数据安全和伦理问题,建议加强行业监管。
在编辑器中点击 "添加变量",创建两个变量:
最终用户提示模板为:
需要摘要的文本:{{text}}
摘要长度要求:{{summary_length}}
配置完成后的 prompt 设计界面
界面左侧为 prompt 编辑器,分为 "系统提示" 和 "用户提示" 两部分,系统提示区域显示上述设计的规则文本,用户提示区域显示包含两个变量的模板;右侧为变量管理区,显示 text 和 summary_length 两个变量的配置信息(类型、提示语、默认值),下方有 "预览" 按钮可查看用户输入界面效果。
2024 年以来,人工智能技术进入高速发展阶段,尤其是生成式 AI 的应用场景不断拓展。在医疗领域,AI 辅助诊断系统的准确率已达到 95% 以上,可帮助医生快速识别肺癌、糖尿病等疾病;在教育领域,AI 助教能够根据学生的学习数据制定个性化学习计划,提升学习效率;在工业领域,AI 质检系统可实现 24 小时不间断检测,将产品缺陷率降低 30%。然而,AI 技术的快速发展也带来了一系列挑战,如数据隐私泄露、算法偏见、就业结构变化等问题。为此,全球多个国家已开始制定 AI 监管政策,欧盟的《人工智能法案》于 2024 年 5 月正式生效,对高风险 AI 应用实施严格监管;美国也推出了《AI 风险管理框架》,指导企业规范 AI 应用。专家预测,未来 5 年,AI 技术将与各行业深度融合,形成新的产业生态,同时监管体系将逐步完善,推动 AI 技术健康发展。
【中摘要】2024 年生成式 AI 应用场景持续拓展,医疗领域 AI 辅助诊断准确率超 95%,可快速识别多种疾病;教育领域 AI 助教能制定个性化学习计划;工业领域 AI 质检系统可 24 小时检测,降低产品缺陷率 30%。但 AI 发展面临数据隐私泄露、算法偏见、就业结构变化等挑战,欧盟《人工智能法案》已生效,美国推出《AI 风险管理框架》。专家预测未来 5 年 AI 将与各行业深度融合,监管体系也将完善,推动 AI 健康发展。
Dify 为每个应用自动生成 API 接口,可将文本摘要工具集成到网站、APP、小程序等第三方系统。
import requests
import json
# 配置 API 信息
API_KEY = "你的 Dify 应用 API 密钥"
API_URL = "http://192.168.1.100:8000/v1/applications/65f8a7b2-3c4d-4e5f-8a9b-0c1d2e3f4a5b/completions"
HEADERS = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
def generate_summary(text, summary_length):
"""
调用 Dify 文本摘要 API 生成摘要
:param text: 需要摘要的文本内容
:param summary_length: 摘要长度(短/中/长)
:return: 摘要结果或错误信息
"""
# 构造请求体
payload = {
"inputs": {
"text": text,
"summary_length": summary_length
},
"query": text, # 用于 Dify 日志跟踪,可与 text 一致
"user": "user_001" # 用户名,用于区分不同用户的请求
}
try:
# 发送 POST 请求
response = requests.post(API_URL, headers=HEADERS, data=json.dumps(payload), timeout=30)
# 检查响应状态码
response.raise_for_status()
# 若状态码非 200,抛出异常
# 解析响应结果
result = response.json()
return result["output"]["text"]
except requests.exceptions.RequestException as e:
return f"API 调用失败:{str(e)}"
# 测试代码
if __name__ == "__main__":
# 测试文本 "2024 年以来,人工智能技术进入高速发展阶段,尤其是生成式 AI 的应用场景不断拓展...(同 4.2.4 中的测试文本)"
summary = generate_summary(test_text, )
()
(summary)
运行代码,查看输出结果(与测试界面结果一致)。
其他语言调用示例(以 JavaScript 为例):
const axios = require('axios');
// 配置 API 信息
const API_KEY = "你的 Dify 应用 API 密钥";
const API_URL = "http://192.168.1.100:8000/v1/applications/65f8a7b2-3c4d-4e5f-8a9b-0c1d2e3f4a5b/completions";
async function generateSummary(text, summaryLength) {
try {
const response = await axios.post(
API_URL,
{
inputs: {
text,
summary_length: summaryLength
},
query: text,
user: "user_001"
},
{
headers: {
"Authorization": `Bearer ${API_KEY}`,
"Content-Type": "application/json"
},
timeout: 30000
}
);
return response.data.output.text;
} catch (error) {
return `API 调用失败:${error.message}`;
}
}
// 测试
generateSummary("测试文本...", "中摘要(100-300 字)")
.then(summary => .(, summary))
.( .(err));
若需要修改应用的前端界面(如调整颜色、添加公司 logo),可通过 Dify 的 "交互设置" 标签页进行配置:
应用开发完成后,可通过 Dify 的 "发布" 功能对外提供服务:
在实际应用中,很多 AI 问答场景需要基于企业私有数据(如产品手册、内部文档、行业报告),此时需要结合检索增强生成(RAG)技术。本节将开发一个 "产品手册问答 AI 应用",支持用户基于上传的产品手册提问,AI 结合手册内容给出精准回答。
RAG 技术流程:
首先需要创建知识库并上传产品手册,Dify 提供完整的知识库管理功能。
点击 "上传文档" 按钮,选择本地的产品手册 PDF 文件(示例:某款智能手机产品手册),进入文档上传与处理界面。
文档处理完成后,系统会显示 "处理成功",并列出处理后的文本块数量(如 100 个文本块)。
你是一款产品手册问答 AI,负责基于用户上传的产品手册内容回答问题。请按照以下规则处理:
1. 仅基于知识库中的产品手册内容回答,不添加外部知识;
2. 若问题超出手册范围,明确告知用户"该问题不在产品手册范围内,无法回答";
3. 回答需引用手册内容,在回答末尾标注引用来源(格式:【引用:文档名称,页码 X】);
4. 语言需简洁、准确,避免使用专业术语堆砌,确保用户易懂。
- **用户提示**:
创建变量 question(问题内容),类型为 "短文本",提示用户 "请输入关于产品手册的问题"。
在检索测试区输入问题(如 "这款手机的电池容量是多少?"),点击 "检索" 按钮,系统会显示检索到的文本块(包含内容、相似度得分、来源),验证检索结果是否准确。
进入 "模型配置" 标签页,选择模型为 "OpenAI GPT-3.5 Turbo",配置参数:
这款智能手机支持快充功能,其快充功率为 66W。根据产品手册描述,使用原装充电器时,30 分钟可充电至 80%,完全充满需约 45 分钟。
【引用:智能手机产品手册,页码 12】
回答下方会显示引用的文档片段,用户可查看原文验证准确性。
与文本摘要应用相比,带 RAG 的 API 调用无需额外配置,Dify 会自动处理检索流程,只需在请求体中指定知识库 ID 即可。
Python API 调用代码示例:
import requests
import json
# 配置 API 信息
API_KEY = "你的产品问答应用 API 密钥"
API_URL = "http://192.168.1.100:8000/v1/applications/78a9b0c1-2d3e-4f5a-6b7c-8d9e0f1a2b3c/chat-messages"
HEADERS = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
def product_qa(question, user_id):
"""
调用产品手册问答 API
:param question: 用户问题
:param user_id: 用户 ID(区分不同用户)
:return: 回答结果、引用来源
"""
payload = {
"inputs": {
"question": question
},
"query": question,
"user": user_id,
"knowledge_base_id": "89c0d1e2-3f4a-5b6c-7d8e-9f0a1b2c3d4e" # 知识库 ID
}
try:
response = requests.post(API_URL, headers=HEADERS, data=json.dumps(payload), timeout=60)
response.raise_for_status()
result = response.json()
# 提取回答和引用来源
answer = result["output"]["text"]
sources = [f"【{source['document_name']},页码{source['page']}】" for source in result["retrieval_contexts"][0]["sources"]]
return f"{answer}\n{' '.join(sources)}"
except requests.exceptions.RequestException as e:
return
__name__ == :
question =
result = product_qa(question, )
()
(result)
运行代码,输出结果包含回答和引用来源,与 Web 测试界面一致。
Dify 支持知识库的全生命周期管理:
若 RAG 问答效果不理想(如回答不准确、引用错误),可通过以下方式优化:
随着多模态模型(如 GPT-4V、Claude 3 Vision)的发展,AI 应用已从纯文本扩展到图片、音频、视频等领域。本节将开发一个 "图片内容分析 AI 应用",支持用户上传图片,AI 分析图片内容并生成描述,同时回答与图片相关的问题。
首先需要在 Dify 中配置多模态模型(GPT-4V),确保支持图片分析功能。
多模态 prompt 需要包含图片处理指令和文本生成规则,进入 "prompt 设计" 标签页:
你是一名专业的图片内容分析师,擅长分析图片中的场景、物体、文字、颜色、人物等元素。请按照以下规则处理:
1. 首先生成图片详细描述,包含:
- 场景(如室内/室外、家庭/办公/自然);
- 主要物体(名称、数量、颜色、位置);
- 人物(数量、动作、穿着、表情,若有);
- 文字(图片中的文字内容,若有);
- 整体氛围(如明亮/昏暗、温馨/严肃);
2. 若用户有提问,结合图片内容回答问题,确保回答基于图片实际内容;
3. 若图片内容不清晰或无法识别,明确告知用户;
4. 语言需简洁、有条理,分点描述(使用 1.2.3.格式)。
上传的图片:{{image}}
用户问题(可选):{{question}}
一、图片详细描述
1. 场景:室内静物场景,背景为白色桌面,无其他装饰元素;
2. 主要物体:
- 苹果:1 个,红色,位于图片左侧;
- 香蕉:2 根,黄色,位于图片中间,呈弯曲状;
- 橙子:1 个,绿色(未完全成熟),位于图片右侧;
3. 人物:无;
4. 文字:无;
5. 整体氛围:明亮、简洁,突出水果主体。
二、问题回答
图片中的水果及颜色如下:
1. 苹果:红色;
2. 香蕉:黄色;
3. 橙子:绿色。
多模态 API 调用需要处理图片文件(二进制数据),需将图片转换为 Base64 编码或通过表单上传。Dify 支持两种方式,本节以 Base64 编码为例。
Python API 调用代码示例:
import requests
import json
import base64
# 配置 API 信息
API_KEY = "你的图片分析应用 API 密钥"
API_URL = "http://192.168.1.100:8000/v1/applications/90a1b2c3-4d5e-6f7a-8b9c-0d1e2f3a4b5c/multimodal-completions"
HEADERS = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
def image_analysis(image_path, question=None):
"""
调用图片内容分析 API
:param image_path: 图片本地路径
:param question: 用户问题(可选)
:return: 分析结果
"""
# 将图片转换为 Base64 编码
with open(image_path, "rb") as image_file:
image_base64 = base64.b64encode(image_file.read()).decode("utf-8")
# 构造请求体
payload = {
"inputs": {
"image": {
"type": "base64",
"data": image_base64,
"filename": image_path.split("/")[-1] # 图片文件名
},
"question": question or "请分析图片内容"
},
"query": question or "图片分析请求",
"user": "user_003"
}
try:
response = requests.post(API_URL, headers=HEADERS, data=json.dumps(payload), timeout=60)
response.raise_for_status()
result = response.json()
return result[][]
requests.exceptions.RequestException e:
__name__ == :
image_path =
question =
analysis_result = image_analysis(image_path, question)
()
(analysis_result)
代码说明:
Dify 的工作流和插件功能可满足复杂业务场景需求,本节将介绍如何通过工作流设计复杂流程,以及如何开发自定义插件。
工作流支持拖拽式设计复杂业务逻辑,例如 "用户提问→检索知识库→调用模型→发送邮件通知" 的完整流程。
Dify 支持自定义插件开发,若内置插件无法满足需求,可开发专属插件(如对接企业内部系统、第三方 API)。本节将开发一个 "天气查询插件",支持根据城市名称查询实时天气。
插件采用 Python 开发,需遵循 Dify 插件开发规范,项目结构如下:
weather_plugin/
├── __init__.py
├── main.py # 插件核心逻辑
├── config.py # 配置文件
└── manifest.json # 插件描述文件
编写插件描述文件(manifest.json):
{
"name": "天气查询插件",
"description": "根据城市名称查询实时天气",
"version": "1.0.0",
"author": "Dify 开发者",
"type": "tool",
"parameters": [
{
"name": "city",
"type": "string",
"required": true,
"description": "城市名称(如北京、上海)"
}
],
"outputs": [
{
"name": "weather_info",
"type": "string",
"description":
使用第三方天气 API(如高德天气 API)实现天气查询功能:
import requests
from config import AMAP_API_KEY
class WeatherPlugin:
def __init__(self):
self.base_url = "https://restapi.amap.com/v3/weather/weatherInfo"
self.api_key = AMAP_API_KEY
def run(self, parameters):
"""
插件执行入口
:param parameters: 输入参数(包含 city)
:return: 天气信息
"""
# 获取城市名称
city = parameters.get("city")
if not city:
raise ValueError("城市名称不能为空")
# 调用高德天气 API
params = {
"key": self.api_key,
"city": city,
"extensions": "base", # 基础天气信息
"output": "json"
}
try:
response = requests.get(self.base_url, params=params, timeout=10)
response.raise_for_status()
data = response.json()
# 解析天气数据
if data["status"] != "1":
raise Exception(f"天气查询失败:{data.get('info', '未知错误')}")
weather_data = data["lives"][0]
weather_info = (
f"城市:\n"
)
{: weather_info}
Exception e:
Exception()
# 高德天气 API 密钥(需在高德开放平台申请:https://lbs.amap.com/)
AMAP_API_KEY = "你的高德天气 API 密钥"
在 Dify 中集成插件
登录 Dify 控制台,点击左侧导航栏 "插件"→"上传插件",选择插件项目压缩包(ZIP 格式)。
上传完成后,点击 "测试" 按钮,输入城市名称(如 "北京"),验证插件是否能正常返回天气信息;
测试通过后,点击 "启用" 按钮,插件即可在应用和工作流中使用。
插件应用
开发完成的 AI 应用需要部署到生产环境,并进行性能、成本、稳定性优化,确保满足企业级应用需求。
对于生产环境,推荐使用 Docker Swarm 实现服务编排和高可用:
# 在管理节点执行
docker swarm init --advertise-addr 管理节点 IP
version: '3.8'
services:
api:
image: langgenius/dify-api:latest
deploy:
replicas: 2 # 部署 2 个副本,实现负载均衡
restart_policy:
condition: on-failure
environment:
- PORT=5000
- DB_HOST=db
- DB_PORT=5432
- DB_USER=dify
- DB_PASSWORD=你的复杂密码
- DB_NAME=dify
- REDIS_HOST=redis
- REDIS_PORT=6379
- REDIS_PASSWORD=你的 Redis 密码
- OPENAI_API_KEY=你的 OpenAI API 密钥
- STORAGE_TYPE=s3 # 生产环境推荐使用 S3 存储文件
- S3_ACCESS_KEY=你的 S3 Access Key
- S3_SECRET_KEY=你的 S3 Secret Key
- S3_BUCKET=dify-storage
-
# 安装 Certbot
sudo apt install certbot python3-certbot-nginx
# 获取证书
sudo certbot --nginx -d your-dify-domain.com -d api.your-dify-domain.com
# 配置 Nginx,将 HTTP 请求重定向到 HTTPS
docker stack deploy -c docker-compose.prod.yml

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online