基于 Dify 低代码平台开发 AI 应用全指南:从入门到生产部署
本文介绍了开源低代码AI开发平台Dify的核心功能与应用实战。Dify通过可视化界面简化了AI应用开发流程,支持文本生成、知识库问答、多模态交互等场景。文章详细讲解了Dify的部署方法(Docker或源码部署)、三种典型应用的开发过程:文本摘要工具(含Prompt设计)、私有知识库问答系统(RAG技术)、图片内容分析应用(多模态处理)。此外,还介绍了工作流编排和自定义插件开发等高级功能,以及生产环
大家好,我是玖日大大,总爱在晨光漫过窗台时翻开书页,指尖划过文字的沙沙声,是我与世界对话的方式。日常里喜欢记录细碎美好 —— 可能是街角咖啡店飘来的焦糖香气,地铁上陌生人递来的一张纸巾,或是雨后树叶上颤动的水珠,这些微光般的瞬间,都被我藏进随身的便签本里。前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
https://www.captainbed.cn/jr
https://www.captainbed.cn/jr
话不多说,接下来开始正文部分

1. 引言:AI 应用开发的痛点与 Dify 的解决方案
在人工智能技术飞速发展的今天,企业和开发者对 AI 应用的需求日益增长。然而,传统 AI 应用开发面临着诸多痛点:一是技术门槛高,需要掌握大模型 API 调用、prompt 工程、知识库构建等多领域知识;二是开发周期长,从需求分析到功能落地往往需要数周甚至数月;三是维护成本高,模型迭代、数据更新、权限管理等工作繁琐;四是集成难度大,不同模型、工具、数据源的整合需要大量定制化开发。
Dify 作为一款开源低代码 AI 应用开发平台,恰好解决了这些痛点。它具备以下核心优势:
- 低代码可视化开发:通过拖拽式界面设计应用流程,无需复杂编码即可快速搭建 AI 应用;
- 多模型无缝集成:支持 OpenAI、Anthropic、阿里云通义千问、字节跳动火山大模型等主流 API 模型,同时兼容 Llama 3、Qwen、Mistral 等开源模型的本地部署;
- 内置检索增强生成(RAG):一键创建私有知识库,解决大模型 "幻觉" 问题,提升回答准确性;
- 灵活的工作流引擎:支持复杂业务逻辑设计,可串联模型调用、数据处理、第三方工具集成等步骤;
- 完善的插件生态:提供天气查询、数据库连接、邮件发送等常用插件,同时支持自定义插件开发;
- 全流程管理能力:涵盖应用开发、测试、部署、监控、迭代的完整生命周期。
本文将以 "理论 + 实战" 的形式,带领读者从 Dify 环境搭建开始,逐步开发文本摘要、私有知识库问答、多模态图片分析三类典型 AI 应用,并讲解工作流设计、插件开发、生产部署与优化等高级内容,最终帮助读者掌握基于 Dify 快速构建企业级 AI 应用的能力。
2. Dify 核心概念与架构解析
在开始开发前,我们需要先理解 Dify 的核心概念与架构设计,这将帮助我们更高效地使用平台。
2.1 核心概念
- 应用(Application):Dify 的开发成果载体,根据功能可分为文本生成、问答、多模态交互等类型,每个应用包含 prompt 配置、模型选择、功能模块等核心组件。
- Prompt 工程:Dify 提供可视化 prompt 编辑器,支持变量注入、条件判断、模板管理,帮助开发者设计高质量的模型指令,提升 AI 响应效果。
- 知识库(Knowledge Base):用于存储私有数据(如 PDF、Word、TXT 文档),通过 RAG 技术将知识库内容与大模型结合,实现基于私有数据的精准问答。
- 工作流(Workflow):可视化流程设计工具,支持拖拽式添加 "模型调用"" 数据检索 ""工具执行"" 条件分支 " 等节点,实现复杂业务逻辑。
- 插件(Plugin):扩展 Dify 功能的组件,分为 "工具插件"(如天气查询、地图服务)和 "数据源插件"(如 MySQL、Elasticsearch),支持自定义开发。
- API 密钥(API Key):应用对外提供服务的认证凭证,通过 API 密钥可将 Dify 应用集成到自有系统(如网站、APP、小程序)。
2.2 架构设计
Dify 采用分层架构设计,确保系统的灵活性、可扩展性和稳定性,架构分为四层:
- 前端层:基于 React 开发的可视化界面,包含应用管理、知识库管理、工作流设计、插件配置等模块,提供直观的操作体验。
- 后端服务层:采用 Python FastAPI 框架开发,负责处理业务逻辑,包括用户认证、应用配置管理、模型调用调度、知识库检索等核心功能。
- 模型集成层:提供统一的模型调用接口,兼容 API 模型(如 OpenAI GPT-4)和本地部署模型(如 Llama 3),支持模型负载均衡、超时重试、缓存管理。
- 数据存储层:采用多数据库协同存储,PostgreSQL 存储应用配置、用户数据,Redis 存储缓存数据,MinIO 存储知识库文档、图片等文件数据。
2.3 支持的模型类型
Dify 支持两类模型,满足不同场景需求:
- API 模型:无需本地部署,通过 API 调用的模型,如 OpenAI GPT-3.5/4、Anthropic Claude 3、阿里云通义千问 Plus、百度文心一言 4.0。
- 开源模型:可本地部署的模型,支持通过 Ollama、vLLM、LangChain 等框架集成,如 Meta Llama 3(70B)、阿里 Qwen(14B)、Mistral(8x7B)、智谱清言 GLM-4。
3. Dify 环境准备:部署与初始化
Dify 提供两种部署方式:Docker Compose 快速部署(适合新手)和本地源码部署(适合二次开发),本节将详细讲解两种部署流程。
3.1 Docker Compose 快速部署(推荐)
Docker Compose 部署无需复杂的依赖配置,只需几分钟即可完成 Dify 启动,适合快速体验和生产环境使用。
3.1.1 前置条件
- 操作系统:Linux(Ubuntu 20.04+/CentOS 7+)、Windows 10+(WSL2)、macOS 12+
- 软件依赖:Docker 20.10+、Docker Compose 2.0+
- 硬件要求:至少 2 核 CPU、4GB 内存、20GB 磁盘空间(若部署开源模型,需 16GB + 内存)
3.1.2 部署步骤
- 安装 Docker 与 Docker Compose
以 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 部署配置文件
# 创建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
常用配置项说明:
-
- PORT: Dify 访问端口,默认 8000
-
- DB_PASSWORD: PostgreSQL 数据库密码,建议修改为复杂密码
-
- REDIS_PASSWORD: Redis 密码,建议修改
-
- STORAGE_TYPE: 文件存储类型,默认 local(本地存储),可改为 s3/minio
- 启动 Dify 服务
# 后台启动所有服务
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)",表示启动成功。
- 访问 Dify 平台
打开浏览器,输入http://服务器IP:端口(如http://192.168.1.100:8000),进入 Dify 登录界面,如图 21所示:
图 1:Dify 登录界面

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

界面顶部为导航栏(包含首页、应用、知识库、工作流、插件、设置),左侧为功能菜单,中间为控制台首页,显示应用数量、知识库数量、最近访问的应用列表,右侧为快速操作按钮(新建应用、新建知识库)。
3.2 本地源码部署(适合二次开发)
若需要对 Dify 进行二次开发(如定制界面、扩展功能),可采用本地源码部署方式。
3.2.1 前置条件
- 软件依赖:Python 3.10+、Node.js 16+、npm 8+、PostgreSQL 14+、Redis 6+
- 开发工具:Git、PyCharm(或 VS Code)、WebStorm
3.2.2 部署步骤
- 拉取源码
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。
3.3 常见部署问题解决
- 端口占用问题
若启动时提示 "端口已被占用",可修改.env文件中的PORT配置(Docker 部署)或启动命令中的--port参数(源码部署),选择未被占用的端口(如 8001、5002)。
- 服务启动失败
执行docker-compose logs -f查看日志,定位失败原因:
-
- 若数据库连接失败,检查.env文件中DB_HOST、DB_PORT、DB_PASSWORD配置是否正确;
-
- 若 Redis 连接失败,检查REDIS_HOST、REDIS_PORT、REDIS_PASSWORD配置;
-
- 若依赖缺失,执行docker-compose down && docker-compose up -d --build重新构建服务。
- 浏览器无法访问
-
- 检查服务器防火墙是否开放 Dify 端口(如 8000),执行sudo ufw allow 8000开放端口;
-
- 若为云服务器,检查安全组规则是否允许对应端口的入站流量。
4. 实战一:开发文本摘要 AI 应用(基础应用)
文本摘要应用是最基础的 AI 应用之一,功能为 "用户输入长文本,AI 自动生成简洁摘要"。本节将详细讲解基于 Dify 开发文本摘要应用的完整流程,包括应用创建、prompt 设计、模型配置、API 集成等步骤。
4.1 需求分析与设计
4.1.1 功能需求
- 支持用户输入任意长度的文本(如新闻、报告、文章);
- AI 自动提取文本核心信息,生成简洁摘要(长度可配置);
- 支持摘要长度调整(短 / 中 / 长);
- 提供 API 接口,可集成到第三方系统。
4.1.2 技术选型
- 模型:OpenAI GPT-3.5 Turbo(性价比高,适合文本生成场景);
- 交互方式:Web 界面 + API 接口;
- 部署方式:基于 Dify 平台开发,无需单独部署前端。
4.2 开发步骤
4.2.1 1. 创建应用
- 登录 Dify 控制台,点击左侧导航栏 "应用"→"新建应用",进入应用创建界面
界面顶部为 "新建应用" 标题,中间为应用类型选择区,包含 "文本生成"、"问答"、"多模态交互" 三个选项,每个选项下方有功能描述;右侧为应用配置区,包含 "应用名称"、"应用描述"、"应用图标" 输入框。
- 选择应用类型为 "文本生成",填写应用信息:
-
- 应用名称:文本摘要工具;
-
- 应用描述:输入长文本,自动生成简洁摘要,支持摘要长度调整;
-
- 应用图标:选择默认图标或上传自定义图标。
- 点击 "创建" 按钮,完成应用创建,进入应用开发界面(包含 "prompt 设计"、"模型配置"、"交互设置"、"API 配置" 四个标签页)。
4.2.2 2. 设计 prompt(核心步骤)
prompt 设计直接影响 AI 摘要的质量,需明确模型的角色、任务、输出格式和约束条件。
- 进入 "prompt 设计" 标签页,Dify 提供可视化 prompt 编辑器,支持 "系统提示" 和 "用户提示" 两部分配置:
-
- 系统提示:定义模型的角色和任务规则;
-
- 用户提示:定义用户输入的内容格式。
- 设计系统提示:
你是一名专业的文本摘要工程师,擅长提取文本核心信息并生成简洁、准确的摘要。请按照以下规则处理用户提供的文本:
1. 摘要需包含文本的核心主题、关键人物/事件、主要结论(若有);
2. 避免遗漏重要信息,同时不添加文本中没有的内容;
3. 根据用户选择的摘要长度调整内容详略:
- 短摘要(100字以内):仅保留核心主题和关键结论;
- 中摘要(100-300字):包含核心主题、关键事件、主要结论;
- 长摘要(300字以上):详细描述文本结构、核心内容、关键细节、主要结论;
4. 摘要语言需与用户输入文本语言一致(如用户输入中文,摘要也为中文);
5. 输出格式:先说明摘要长度类型,再输出摘要内容,示例:
【短摘要】
本文介绍了人工智能技术在医疗领域的应用现状,包括疾病诊断、药物研发等场景,指出当前技术面临的数据安全和伦理问题,建议加强行业监管。
- 设计用户提示:
在编辑器中点击 "添加变量",创建两个变量:
最终用户提示模板为:
需要摘要的文本:{{text}}
摘要长度要求:{{summary_length}}
配置完成后的 prompt 设计界面
界面左侧为 prompt 编辑器,分为 "系统提示" 和 "用户提示" 两部分,系统提示区域显示上述设计的规则文本,用户提示区域显示包含两个变量的模板;右侧为变量管理区,显示text和summary_length两个变量的配置信息(类型、提示语、默认值),下方有 "预览" 按钮可查看用户输入界面效果。
-
- 变量 1:text(文本内容),类型为 "长文本",提示用户 "请输入需要摘要的文本内容";
-
- 变量 2:summary_length(摘要长度),类型为 "下拉选择",选项为 "短摘要(100 字以内)"、"中摘要(100-300 字)"、"长摘要(300 字以上)",默认值为 "中摘要(100-300 字)"。
4.2.3 3. 配置模型
- 进入 "模型配置" 标签页,选择模型类型为 "API 模型",然后选择 "OpenAI"→"GPT-3.5 Turbo"
界面顶部为模型类型选择区(API 模型 / 开源模型),中间为模型列表(OpenAI、Anthropic、阿里云等),当前选中 "OpenAI GPT-3.5 Turbo";右侧为模型参数配置区,包含 "API 密钥"、"温度"、"最大 Token 数"、"超时时间" 等参数输入框。
- 配置模型参数:
-
- API 密钥:输入你的 OpenAI API 密钥(获取地址:https://platform.openai.com/api-keys);
-
- 温度(Temperature):设置为 0.3(温度越低,输出越稳定、准确,适合摘要场景);
-
- 最大 Token 数:设置为 1024(确保有足够的 Token 生成摘要,GPT-3.5 Turbo 支持最大 4096 Token);
-
- 超时时间:设置为 30 秒;
-
- 频率惩罚:设置为 0(避免模型过度避免重复内容,影响摘要完整性);
-
- 存在惩罚:设置为 0。
- 点击 "测试连接" 按钮,验证模型是否能正常调用,若提示 "连接成功",则模型配置完成。
4.2.4 4. 测试应用
- 点击应用开发界面顶部的 "测试" 按钮,进入应用测试界面
界面左侧为用户输入区,包含 "文本内容" 输入框(多行)和 "摘要长度" 下拉选择框;右侧为 AI 响应区,显示 "等待输入" 提示;底部有 "提交" 和 "清空" 按钮。
- 输入测试文本(示例:一段关于人工智能发展的新闻):
2024年以来,人工智能技术进入高速发展阶段,尤其是生成式AI的应用场景不断拓展。在医疗领域,AI辅助诊断系统的准确率已达到95%以上,可帮助医生快速识别肺癌、糖尿病等疾病;在教育领域,AI助教能够根据学生的学习数据制定个性化学习计划,提升学习效率;在工业领域,AI质检系统可实现24小时不间断检测,将产品缺陷率降低30%。然而,AI技术的快速发展也带来了一系列挑战,如数据隐私泄露、算法偏见、就业结构变化等问题。为此,全球多个国家已开始制定AI监管政策,欧盟的《人工智能法案》于2024年5月正式生效,对高风险AI应用实施严格监管;美国也推出了《AI风险管理框架》,指导企业规范AI应用。专家预测,未来5年,AI技术将与各行业深度融合,形成新的产业生态,同时监管体系将逐步完善,推动AI技术健康发展。
- 选择摘要长度为 "中摘要(100-300 字)",点击 "提交" 按钮,等待 3-5 秒后,AI 生成摘要:
【中摘要】
2024年生成式AI应用场景持续拓展,医疗领域AI辅助诊断准确率超95%,可快速识别多种疾病;教育领域AI助教能制定个性化学习计划;工业领域AI质检系统可24小时检测,降低产品缺陷率30%。但AI发展面临数据隐私泄露、算法偏见、就业结构变化等挑战,欧盟《人工智能法案》已生效,美国推出《AI风险管理框架》。专家预测未来5年AI将与各行业深度融合,监管体系也将完善,推动AI健康发展。
- 优化调整:若摘要存在信息遗漏或冗余,可返回 "prompt 设计" 界面修改系统提示(如增加 "需包含各领域具体数据" 的规则),重新测试直至满足需求。
4.2.5 5. 集成 API(对接第三方系统)
Dify 为每个应用自动生成 API 接口,可将文本摘要工具集成到网站、APP、小程序等第三方系统。
- 进入 "API 配置" 标签页,获取 API 信息:
-
- API 地址:http://你的Dify地址/v1/applications/你的应用ID/completions;
-
- 请求方式:POST;
-
- 认证方式:Bearer Token(API 密钥在页面中点击 "生成" 按钮获取)。
- 编写 Python API 调用代码(示例):
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__":
# 测试文本
test_text = """2024年以来,人工智能技术进入高速发展阶段,尤其是生成式AI的应用场景不断拓展...(同4.2.4中的测试文本)"""
# 调用函数生成摘要
summary = generate_summary(test_text, "中摘要(100-300字)")
# 打印结果
print("文本摘要结果:")
print(summary)
- 运行代码,查看输出结果(与测试界面结果一致),如图 8 所示:
图 8:API 调用代码运行结果界面
界面为 Python 终端运行结果,显示 "文本摘要结果:",下方为 AI 生成的中摘要内容,无错误信息,表明 API 调用成功。
- 其他语言调用示例(以 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 => console.log("文本摘要结果:", summary))
.catch(err => console.error(err));
4.2.6 6. 前端界面定制(可选)
若需要修改应用的前端界面(如调整颜色、添加公司 logo),可通过 Dify 的 "交互设置" 标签页进行配置:
- 界面标题:修改应用在 Web 界面的显示标题;
- 主题颜色:选择或自定义界面主色调;
- logo 设置:上传公司 logo,替换默认图标;
- 提示文本:修改用户输入框的提示语(如 "请粘贴需要摘要的文章内容");
- 按钮文本:修改 "提交"、"清空" 按钮的显示文本。
4.3 应用发布与分享
应用开发完成后,可通过 Dify 的 "发布" 功能对外提供服务:
- 点击应用开发界面顶部的 "发布" 按钮,选择发布环境(测试环境 / 生产环境);
- 配置访问权限(公开访问 / 密码保护 / 指定用户访问);
- 生成访问链接,用户可通过链接直接使用 Web 版应用,或通过 API 集成到第三方系统。
5. 实战二:开发私有知识库问答 AI 应用(RAG 应用)
在实际应用中,很多 AI 问答场景需要基于企业私有数据(如产品手册、内部文档、行业报告),此时需要结合检索增强生成(RAG)技术。本节将开发一个 "产品手册问答 AI 应用",支持用户基于上传的产品手册提问,AI 结合手册内容给出精准回答。
5.1 需求分析与设计
5.1.1 功能需求
- 支持上传产品手册(PDF/Word/TXT 格式);
- 自动处理文档(分块、嵌入、存储);
- 用户可针对产品手册内容提问;
- AI 结合手册内容生成回答,并标注引用来源;
- 支持文档更新、删除、检索测试。
5.1.2 技术原理
RAG 技术流程:
- 文档处理:将上传的文档分割为小文本块(避免超出模型 Token 限制);
- 文本嵌入:使用嵌入模型(如 OpenAI Embeddings)将文本块转换为向量;
- 向量存储:将向量存储到向量数据库(Dify 内置 Chroma 向量库);
- 检索过程:用户提问后,将问题转换为向量,在向量库中检索相似度最高的文本块;
- 生成回答:将检索到的文本块作为上下文,传递给大模型,生成基于私有数据的回答。
5.2 开发步骤
5.2.1 1. 创建知识库
首先需要创建知识库并上传产品手册,Dify 提供完整的知识库管理功能。
- 登录 Dify 控制台,点击左侧导航栏 "知识库"→"新建知识库",进入知识库创建界面
界面包含 "知识库名称"、"知识库描述" 输入框,"文档处理设置"(分块策略、嵌入模型),"向量数据库" 选择(内置 Chroma / 外部向量库如 Pinecone),下方有 "创建" 按钮。
- 配置知识库信息:
-
- 知识库名称:产品手册知识库;
-
- 知识库描述:存储产品手册文档,用于产品问答 AI 应用;
-
- 分块策略:选择 "按段落分块",块大小设置为 500 字符,重叠率设置为 50 字符(确保上下文连贯性);
-
- 嵌入模型:选择 "OpenAI Embeddings"(适合英文和中文,准确率高);
-
- 向量数据库:选择 "内置 Chroma"(无需额外部署,适合快速开发)。
- 点击 "创建" 按钮,完成知识库创建,进入知识库文档管理界面。
- 上传产品手册文档:
点击 "上传文档" 按钮,选择本地的产品手册 PDF 文件(示例:某款智能手机产品手册),进入文档上传与处理界面
界面左侧显示上传的文档名称、大小、格式,右侧为文档处理进度(上传中→解析中→分块中→嵌入中→完成),下方显示处理后的文本块数量、嵌入模型、分块策略信息。
文档处理完成后,系统会显示 "处理成功",并列出处理后的文本块数量(如 100 个文本块)。
5.2.2 2. 创建问答应用
- 点击左侧导航栏 "应用"→"新建应用",选择应用类型为 "问答",填写应用名称(产品手册问答 AI)和描述,点击 "创建"。
- 进入应用开发界面,首先进行 "prompt 设计":
-
- 系统提示:
你是一款产品手册问答AI,负责基于用户上传的产品手册内容回答问题。请按照以下规则处理:
1. 仅基于知识库中的产品手册内容回答,不添加外部知识;
2. 若问题超出手册范围,明确告知用户"该问题不在产品手册范围内,无法回答";
3. 回答需引用手册内容,在回答末尾标注引用来源(格式:【引用:文档名称,页码X】);
4. 语言需简洁、准确,避免使用专业术语堆砌,确保用户易懂。
-
- 用户提示:
创建变量question(问题内容),类型为 "短文本",提示用户 "请输入关于产品手册的问题"。
5.2.3 3. 配置 RAG(关联知识库)
- 进入应用开发界面的 "知识库配置" 标签页,点击 "关联知识库",选择之前创建的 "产品手册知识库"
界面顶部为知识库选择区,当前选中 "产品手册知识库";中间为检索参数配置区,包含 "检索 Top K"、"相似度阈值"、"上下文拼接方式";右侧为检索测试区,可输入测试问题,查看检索结果。
- 配置检索参数:
-
- 检索 Top K:设置为 5(检索相似度最高的 5 个文本块,确保覆盖足够的上下文);
-
- 相似度阈值:设置为 0.7(过滤相似度低于 0.7 的文本块,避免无关信息干扰);
-
- 上下文拼接方式:选择 "按相似度排序拼接"(将检索到的文本块按相似度从高到低拼接);
-
- 上下文最大长度:设置为 2000 字符(避免超出模型 Token 限制)。
- 检索测试:
在检索测试区输入问题(如 "这款手机的电池容量是多少?"),点击 "检索" 按钮,系统会显示检索到的文本块(包含内容、相似度得分、来源),验证检索结果是否准确。
5.2.4 4. 配置模型
进入 "模型配置" 标签页,选择模型为 "OpenAI GPT-3.5 Turbo",配置参数:
- API 密钥:输入 OpenAI API 密钥;
- 温度:设置为 0.2(问答场景需准确性,温度较低);
- 最大 Token 数:设置为 1500;
- 其他参数:默认即可。
5.2.5 5. 测试应用
- 点击 "测试" 按钮,进入应用测试界面
界面左侧为用户提问区,包含 "问题" 输入框和 "提交" 按钮;右侧为 AI 回答区,显示回答内容和引用来源;下方为 "相关文档" 列表,显示检索到的文本块。
- 输入测试问题:"这款智能手机支持快充吗?快充功率是多少?",点击 "提交" 按钮。
- AI 生成回答(示例):
这款智能手机支持快充功能,其快充功率为66W。根据产品手册描述,使用原装充电器时,30分钟可充电至80%,完全充满需约45分钟。
【引用:智能手机产品手册,页码12】
回答下方会显示引用的文档片段,用户可查看原文验证准确性。
- 测试边界场景:
-
- 输入超出手册范围的问题(如 "这款手机的竞争对手有哪些?"),AI 应提示 "该问题不在产品手册范围内,无法回答";
-
- 输入模糊问题(如 "手机怎么充电?"),AI 应结合手册中的充电说明,给出详细步骤。
5.2.6 6. API 集成(带 RAG 的 API 调用)
与文本摘要应用相比,带 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 f"API调用失败:{str(e)}"
# 测试
if __name__ == "__main__":
question = "这款智能手机的电池容量是多少?支持无线充电吗?"
result = product_qa(question, "user_002")
print("问答结果:")
print(result)
运行代码,输出结果包含回答和引用来源,与 Web 测试界面一致。
5.2.7 7. 知识库管理
Dify 支持知识库的全生命周期管理:
- 文档更新:点击知识库中的 "上传文档",可上传新版本的产品手册,系统会自动替换旧文档;
- 文档删除:选择需要删除的文档,点击 "删除" 按钮,系统会删除文档及对应的向量数据;
- 检索优化:若检索结果不准确,可调整分块策略(如减小块大小)、更换嵌入模型(如使用中文优化的嵌入模型);
- 权限管理:设置知识库访问权限(仅自己可见 / 团队可见 / 所有用户可见)。
5.3 高级配置:优化 RAG 效果
若 RAG 问答效果不理想(如回答不准确、引用错误),可通过以下方式优化:
- 分块策略优化:
-
- 对于 PDF 文档,若包含大量表格,选择 "按页面分块";
-
- 对于长文档,块大小设置为 300-500 字符,重叠率设置为 50-100 字符;
- 嵌入模型优化:
-
- 中文文档推荐使用 "通义千问 Embeddings" 或 "文心一言 Embeddings",准确率高于 OpenAI Embeddings;
- 检索参数优化:
-
- 若回答遗漏信息,增大 "检索 Top K"(如从 5 调整为 8);
-
- 若回答包含无关信息,提高 "相似度阈值"(如从 0.7 调整为 0.8);
- Prompt 优化:
-
- 在系统提示中明确 "优先使用检索到的上下文,若上下文不足,告知用户无法回答";
-
- 要求模型 "在回答中逐点引用上下文,每个引用标注具体页码和段落"。
6. 实战三:开发多模态图片内容分析 AI 应用
随着多模态模型(如 GPT-4V、Claude 3 Vision)的发展,AI 应用已从纯文本扩展到图片、音频、视频等领域。本节将开发一个 "图片内容分析 AI 应用",支持用户上传图片,AI 分析图片内容并生成描述,同时回答与图片相关的问题。
6.1 需求分析与设计
6.1.1 功能需求
- 支持上传图片(JPG/PNG 格式,最大 10MB);
- AI 自动分析图片内容(场景、物体、文字、颜色等);
- 生成图片详细描述;
- 支持用户针对图片提问(如 "图片中的物体是什么颜色?"" 图片中有多少人?");
- 支持图片历史记录查看。
6.1.2 技术选型
- 多模态模型:OpenAI GPT-4V(支持图片分析,准确率高);
- 图片存储:Dify 内置 MinIO 存储服务;
- 交互方式:Web 界面(支持图片上传)+ API 接口。
6.2 开发步骤
6.2.1 1. 配置多模态模型
首先需要在 Dify 中配置多模态模型(GPT-4V),确保支持图片分析功能。
- 登录 Dify 控制台,点击左侧导航栏 "设置"→"模型管理"→"添加模型",进入模型配置界面,
界面顶部为模型类型选择(API 模型 / 开源模型),当前选择 "API 模型"→"OpenAI"→"GPT-4V (Vision)";中间为模型参数配置区,包含 "API 密钥"、"最大 Token 数"、"超时时间";下方为 "图片处理设置"(支持的图片格式、最大大小)。
- 配置模型参数:
-
- API 密钥:输入 OpenAI API 密钥(需确保账号已开通 GPT-4V 权限);
-
- 最大 Token 数:设置为 2048;
-
- 超时时间:设置为 60 秒(图片分析耗时较长);
-
- 支持的图片格式:勾选 JPG、PNG;
-
- 最大图片大小:设置为 10MB。
- 点击 "保存" 按钮,完成多模态模型配置。
6.2.2 2. 创建多模态应用
- 点击左侧导航栏 "应用"→"新建应用",选择应用类型为 "多模态交互",填写应用名称(图片内容分析 AI)和描述,点击 "创建",进入应用创建界面
界面包含 "应用名称"、"应用描述" 输入框,"模型选择"(已选择 GPT-4V),"交互设置"(图片上传功能开启、问题输入框配置),下方有 "创建" 按钮。
- 配置应用交互设置:
-
- 开启 "图片上传功能",设置支持的图片格式(JPG/PNG)和最大大小(10MB);
-
- 添加变量:
-
-
- image:类型为 "图片",提示用户 "请上传需要分析的图片";
-
-
-
- question:类型为 "短文本",提示用户 "请输入关于图片的问题(可选)"。
-
6.2.3 3. 设计 prompt
多模态 prompt 需要包含图片处理指令和文本生成规则,进入 "prompt 设计" 标签页:
- 系统提示:
你是一名专业的图片内容分析师,擅长分析图片中的场景、物体、文字、颜色、人物等元素。请按照以下规则处理:
1. 首先生成图片详细描述,包含:
- 场景(如室内/室外、家庭/办公/自然);
- 主要物体(名称、数量、颜色、位置);
- 人物(数量、动作、穿着、表情,若有);
- 文字(图片中的文字内容,若有);
- 整体氛围(如明亮/昏暗、温馨/严肃);
2. 若用户有提问,结合图片内容回答问题,确保回答基于图片实际内容;
3. 若图片内容不清晰或无法识别,明确告知用户;
4. 语言需简洁、有条理,分点描述(使用1.2.3.格式)。
- 用户提示:
上传的图片:{{image}}
用户问题(可选):{{question}}
6.2.4 4. 测试应用
- 点击 "测试" 按钮,进入多模态应用测试界面
界面左侧为用户交互区,包含 "图片上传" 按钮(显示 "点击上传或拖拽文件")、"问题输入框"、"提交" 按钮;右侧为 AI 响应区,显示 "等待上传图片" 提示;下方为图片预览区(上传后显示)。
- 上传测试图片(示例:一张包含 "红色苹果、黄色香蕉、绿色橙子" 的水果静物图),输入问题 "图片中有哪些水果?分别是什么颜色?",点击 "提交" 按钮。
- 等待 10-20 秒(GPT-4V 分析图片耗时较长),AI 生成分析结果:
一、图片详细描述
1. 场景:室内静物场景,背景为白色桌面,无其他装饰元素;
2. 主要物体:
- 苹果:1个,红色,位于图片左侧;
- 香蕉:2根,黄色,位于图片中间,呈弯曲状;
- 橙子:1个,绿色(未完全成熟),位于图片右侧;
3. 人物:无;
4. 文字:无;
5. 整体氛围:明亮、简洁,突出水果主体。
二、问题回答
图片中的水果及颜色如下:
1. 苹果:红色;
2. 香蕉:黄色;
3. 橙子:绿色。
- 测试其他场景:
-
- 上传包含文字的图片(如书籍封面),AI 应识别并转录文字内容;
-
- 上传人物图片,AI 应描述人物数量、动作、穿着;
-
- 上传模糊图片,AI 应提示 "图片内容不清晰,无法准确分析"。
6.2.5 5. API 集成(多模态 API 调用)
多模态 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["output"]["text"]
except requests.exceptions.RequestException as e:
return f"API调用失败:{str(e)}"
# 测试
if __name__ == "__main__":
# 图片本地路径
image_path = "/home/user/test_images/fruits.jpg"
# 用户问题
question = "图片中有几种水果?每种水果的数量是多少?"
# 调用函数
analysis_result = image_analysis(image_path, question)
# 打印结果
print("图片分析结果:")
print(analysis_result)
代码说明:
- 图片处理:使用base64库将图片文件转换为 Base64 编码,确保 API 能正确解析;
- 请求体结构:image字段包含type(base64)、data(Base64 编码字符串)、filename(文件名);
- 超时设置:图片分析耗时较长,设置 60 秒超时。
7. Dify 高级功能:工作流与插件开发
Dify 的工作流和插件功能可满足复杂业务场景需求,本节将介绍如何通过工作流设计复杂流程,以及如何开发自定义插件。
7.1 工作流设计:可视化流程编排
工作流支持拖拽式设计复杂业务逻辑,例如 "用户提问→检索知识库→调用模型→发送邮件通知" 的完整流程。
7.1.1 工作流设计步骤
- 登录 Dify 控制台,点击左侧导航栏 "工作流"→"新建工作流",进入工作流设计界面
界面左侧为节点库(包含 "触发节点"、"模型节点"、"知识库节点"、"工具节点"、"条件节点"、"输出节点");中间为画布,用于拖拽节点并连接;右侧为节点配置区,显示当前选中节点的参数配置。
- 设计 "用户提问→知识库检索→模型回答→邮件通知" 流程:
-
- 添加触发节点:拖拽 "用户输入触发" 节点到画布,配置触发参数(用户输入变量:question);
-
- 添加知识库节点:拖拽 "知识库检索" 节点,连接到触发节点,配置知识库 ID 和检索参数(Top K=5);
-
- 添加模型节点:拖拽 "模型调用" 节点,连接到知识库节点,选择模型(GPT-3.5 Turbo),配置 prompt(包含用户问题和检索到的上下文);
-
- 添加工具节点:拖拽 "邮件发送" 节点,连接到模型节点,配置邮件参数(收件人、主题、内容模板,内容包含模型回答);
-
- 添加输出节点:拖拽 "结果输出" 节点,连接到模型节点,配置输出参数(模型回答);
-
- 连接节点:用连接线将各节点按流程顺序连接,形成完整工作流。
- 点击 "测试" 按钮,输入测试问题,验证工作流是否正常执行(检索知识库→生成回答→发送邮件)。
7.1.2 工作流应用场景
- 多步骤数据处理:如 "用户上传 Excel→数据提取→数据分析→生成报告→发送报告";
- 条件分支逻辑:如 "根据用户问题类型,分支到不同知识库(产品问题→产品知识库,技术问题→技术知识库)";
- 定时任务:如 "每天定时检索行业新闻→生成摘要→推送至企业微信群"。
7.2 自定义插件开发:扩展 Dify 功能
Dify 支持自定义插件开发,若内置插件无法满足需求,可开发专属插件(如对接企业内部系统、第三方 API)。本节将开发一个 "天气查询插件",支持根据城市名称查询实时天气。
7.2.1 插件开发步骤
- 创建插件项目
插件采用 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": "实时天气信息(包含温度、湿度、风力、天气状况)"
}
]
}
- 编写插件核心逻辑(main.py)
使用第三方天气 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"城市:{weather_data['city']}\n"
f"天气状况:{weather_data['weather']}\n"
f"温度:{weather_data['temperature']}℃\n"
f"湿度:{weather_data['humidity']}%\n"
f"风力:{weather_data['winddirection']}{weather_data['windpower']}\n"
f"更新时间:{weather_data['reporttime']}"
)
return {"weather_info": weather_info}
except Exception as e:
raise Exception(f"天气查询异常:{str(e)}")
- 编写配置文件(config.py)
# 高德天气API密钥(需在高德开放平台申请:https://lbs.amap.com/)
AMAP_API_KEY = "你的高德天气API密钥"
- 在 Dify 中集成插件
-
- 登录 Dify 控制台,点击左侧导航栏 "插件"→"上传插件",选择插件项目压缩包(ZIP 格式)
界面包含 "插件压缩包上传" 区域、"插件信息预览"(显示 manifest.json 中的名称、描述、参数)、"插件测试" 区域(输入城市名称,测试插件功能)。
-
- 上传完成后,点击 "测试" 按钮,输入城市名称(如 "北京"),验证插件是否能正常返回天气信息;
-
- 测试通过后,点击 "启用" 按钮,插件即可在应用和工作流中使用。
- 插件应用
-
- 在应用中使用:创建应用时,添加 "工具调用" 节点,选择 "天气查询插件",配置输入参数(城市名称);
-
- 在工作流中使用:拖拽 "工具节点",选择 "天气查询插件",连接到其他节点(如将天气信息插入到邮件中发送)。
8. Dify 应用部署与生产优化
开发完成的 AI 应用需要部署到生产环境,并进行性能、成本、稳定性优化,确保满足企业级应用需求。
8.1 生产环境部署
8.1.1 Docker Swarm 部署(适合多节点集群)
对于生产环境,推荐使用 Docker Swarm 实现服务编排和高可用:
- 初始化 Docker Swarm
# 在管理节点执行
docker swarm init --advertise-addr 管理节点IP
- 编写 docker-compose.prod.yml 配置文件
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
- S3_REGION=ap-southeast-1
depends_on:
- db
- redis
web:
image: langgenius/dify-web:latest
deploy:
replicas: 2
restart_policy:
condition: on-failure
environment:
- REACT_APP_API_URL=https://api.your-dify-domain.com
depends_on:
- api
db:
image: postgres:14
deploy:
replicas: 1
restart_policy:
condition: on-failure
environment:
- POSTGRES_USER=dify
- POSTGRES_PASSWORD=你的复杂密码
- POSTGRES_DB=dify
volumes:
- postgres-data:/var/lib/postgresql/data
redis:
image: redis:6
deploy:
replicas: 1
restart_policy:
condition: on-failure
command: redis-server --requirepass 你的Redis密码
volumes:
- redis-data:/data
nginx:
image: nginx:latest
deploy:
replicas: 1
restart_policy:
condition: on-failure
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/conf:/etc/nginx/conf.d
- ./nginx/ssl:/etc/nginx/ssl
depends_on:
- api
- web
volumes:
postgres-data:
redis-data:
- 配置 HTTPS(Let's Encrypt 证书)
# 安装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</doubaocanvas>
更多推荐



所有评论(0)