跳到主要内容
Python SaaS AI 算法
基于 Dify 低代码平台开发 AI 应用:从入门到生产部署 介绍基于 Dify 低代码平台开发 AI 应用的完整流程,包括环境搭建、文本摘要、私有知识库问答(RAG)、多模态图片分析及工作流插件开发。内容涵盖 Docker 部署步骤、Prompt 设计技巧、API 集成方法及生产环境优化方案,帮助开发者快速构建企业级 AI 应用。
神经兮兮 发布于 2026/2/28 更新于 2026/6/3 39 浏览引言
在人工智能技术飞速发展的今天,企业和开发者对 AI 应用的需求日益增长。然而,传统 AI 应用开发面临着诸多痛点:一是技术门槛高,需要掌握大模型 API 调用、prompt 工程、知识库构建等多领域知识;二是开发周期长,从需求分析到功能落地往往需要数周甚至数月;三是维护成本高,模型迭代、数据更新、权限管理等工作繁琐;四是集成难度大,不同模型、工具、数据源的整合需要大量定制化开发。
Dify 作为一款开源低代码 AI 应用开发平台,恰好解决了这些痛点。它具备以下核心优势:
低代码可视化开发 :通过拖拽式界面设计应用流程,无需复杂编码即可快速搭建 AI 应用;
多模型无缝集成 :支持 OpenAI、Anthropic、阿里云通义千问、字节跳动火山大模型等主流 API 模型,同时兼容 Llama 3、Qwen、Mistral 等开源模型的本地部署;
内置检索增强生成(RAG) :一键创建私有知识库,解决大模型 "幻觉" 问题,提升回答准确性;
灵活的工作流引擎 :支持复杂业务逻辑设计,可串联模型调用、数据处理、第三方工具集成等步骤;
完善的插件生态 :提供天气查询、数据库连接、邮件发送等常用插件,同时支持自定义插件开发;
全流程管理能力 :涵盖应用开发、测试、部署、监控、迭代的完整生命周期。
本文将以 "理论 + 实战" 的形式,带领读者从 Dify 环境搭建开始,逐步开发文本摘要、私有知识库问答、多模态图片分析三类典型 AI 应用,并讲解工作流设计、插件开发、生产部署与优化等高级内容,最终帮助读者掌握基于 Dify 快速构建企业级 AI 应用的能力。
1. Dify 核心概念与架构解析
在开始开发前,我们需要先理解 Dify 的核心概念与架构设计,这将帮助我们更高效地使用平台。
1.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、小程序)。
1.2 架构设计
Dify 采用分层架构设计,确保系统的灵活性、可扩展性和稳定性,架构分为四层:
前端层 :基于 React 开发的可视化界面,包含应用管理、知识库管理、工作流设计、插件配置等模块,提供直观的操作体验。
后端服务层 :采用 Python FastAPI 框架开发,负责处理业务逻辑,包括用户认证、应用配置管理、模型调用调度、知识库检索等核心功能。
模型集成层 :提供统一的模型调用接口,兼容 API 模型(如 OpenAI GPT-4)和本地部署模型(如 Llama 3),支持模型负载均衡、超时重试、缓存管理。
数据存储层 :采用多数据库协同存储,PostgreSQL 存储应用配置、用户数据,Redis 存储缓存数据,MinIO 存储知识库文档、图片等文件数据。
1.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。
2. Dify 环境准备:部署与初始化 Dify 提供两种部署方式:Docker Compose 快速部署(适合新手)和本地源码部署(适合二次开发),本节将详细讲解两种部署流程。
2.1 Docker Compose 快速部署(推荐) Docker Compose 部署无需复杂的依赖配置,只需几分钟即可完成 Dify 启动,适合快速体验和生产环境使用。
2.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 + 内存)
2.1.2 部署步骤
安装 Docker 与 Docker Compose
以 Ubuntu 22.04 为例,执行以下命令安装依赖:
sudo apt update && sudo apt upgrade -y
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
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
mkdir -p /opt/dify && cd /opt/dify
wget https://raw.githubusercontent.com/langgenius/dify/main/docker-compose.yml
wget https://raw.githubusercontent.com/langgenius/dify/main/.env.example -O .env
编辑.env 文件,修改关键配置(如端口、数据库密码):
PORT: Dify 访问端口,默认 8000
DB_PASSWORD: PostgreSQL 数据库密码,建议修改为复杂密码
REDIS_PASSWORD: Redis 密码,建议修改
STORAGE_TYPE: 文件存储类型,默认 local(本地存储),可改为 s3/minio
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 品牌标识和产品介绍,右侧为登录表单,包含 "邮箱" 和 "密码" 输入框,下方有 "忘记密码" 和 "注册账号" 按钮,首次访问需点击 "注册账号" 创建管理员账户。
首次访问需注册管理员账户,填写邮箱、密码后完成注册,注册成功后自动登录到 Dify 控制台主界面。
界面顶部为导航栏(包含首页、应用、知识库、工作流、插件、设置),左侧为功能菜单,中间为控制台首页,显示应用数量、知识库数量、最近访问的应用列表,右侧为快速操作按钮(新建应用、新建知识库)。
2.2 本地源码部署(适合二次开发) 若需要对 Dify 进行二次开发(如定制界面、扩展功能),可采用本地源码部署方式。
2.2.1 前置条件
软件依赖:Python 3.10+、Node.js 16+、npm 8+、PostgreSQL 14+、Redis 6+
开发工具:Git、PyCharm(或 VS Code)、WebStorm
2.2.2 部署步骤 git clone https://github.com/langgenius/dify.git
cd dify
cd api
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
vim .env
flask db upgrade
flask run --host=0.0.0.0 --port=5001
cd ../web
npm install
cp .env.example .env
vim .env
npm start
2.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 开放端口;
若为云服务器,检查安全组规则是否允许对应端口的入站流量。
3. 实战一:开发文本摘要 AI 应用(基础应用) 文本摘要应用是最基础的 AI 应用之一,功能为 "用户输入长文本,AI 自动生成简洁摘要"。本节将详细讲解基于 Dify 开发文本摘要应用的完整流程,包括应用创建、prompt 设计、模型配置、API 集成等步骤。
3.1 需求分析与设计
3.1.1 功能需求
支持用户输入任意长度的文本(如新闻、报告、文章);
AI 自动提取文本核心信息,生成简洁摘要(长度可配置);
支持摘要长度调整(短 / 中 / 长);
提供 API 接口,可集成到第三方系统。
3.1.2 技术选型
模型:OpenAI GPT-3.5 Turbo(性价比高,适合文本生成场景);
交互方式:Web 界面 + API 接口;
部署方式:基于 Dify 平台开发,无需单独部署前端。
3.2 开发步骤
3.2.1 1. 创建应用
登录 Dify 控制台,点击左侧导航栏 "应用"→"新建应用",进入应用创建界面。
选择应用类型为 "文本生成",填写应用信息:
应用名称:文本摘要工具;
应用描述:输入长文本,自动生成简洁摘要,支持摘要长度调整;
应用图标:选择默认图标或上传自定义图标。
点击 "创建" 按钮,完成应用创建,进入应用开发界面(包含 "prompt 设计"、"模型配置"、"交互设置"、"API 配置" 四个标签页)。
3.2.2 2. 设计 prompt(核心步骤) prompt 设计直接影响 AI 摘要的质量,需明确模型的角色、任务、输出格式和约束条件。
进入 "prompt 设计" 标签页,Dify 提供可视化 prompt 编辑器,支持 "系统提示" 和 "用户提示" 两部分配置:
系统提示 :定义模型的角色和任务规则;
用户提示 :定义用户输入的内容格式。
设计系统提示:
你是一名专业的文本摘要工程师,擅长提取文本核心信息并生成简洁、准确的摘要。请按照以下规则处理用户提供的文本:
1. 摘要需包含文本的核心主题、关键人物/事件、主要结论(若有);
2. 避免遗漏重要信息,同时不添加文本中没有的内容;
3. 根据用户选择的摘要长度调整内容详略:
- 短摘要(100 字以内):仅保留核心主题和关键结论;
- 中摘要(100-300 字):包含核心主题、关键事件、主要结论;
- 长摘要(300 字以上):详细描述文本结构、核心内容、关键细节、主要结论;
4. 摘要语言需与用户输入文本语言一致(如用户输入中文,摘要也为中文);
5. 输出格式:先说明摘要长度类型,再输出摘要内容,示例:
【短摘要】本文介绍了人工智能技术在医疗领域的应用现状,包括疾病诊断、药物研发等场景,指出当前技术面临的数据安全和伦理问题,建议加强行业监管。
需要摘要的文本:{{text}}
摘要长度要求:{{summary_length}}
界面左侧为 prompt 编辑器,分为 "系统提示" 和 "用户提示" 两部分,系统提示区域显示上述设计的规则文本,用户提示区域显示包含两个变量的模板;右侧为变量管理区,显示 text 和 summary_length 两个变量的配置信息(类型、提示语、默认值),下方有 "预览" 按钮可查看用户输入界面效果。
变量 1:text(文本内容),类型为 "长文本",提示用户 "请输入需要摘要的文本内容";
变量 2:summary_length(摘要长度),类型为 "下拉选择",选项为 "短摘要(100 字以内)"、"中摘要(100-300 字)"、"长摘要(300 字以上)",默认值为 "中摘要(100-300 字)"。
3.2.3 3. 配置模型
进入 "模型配置" 标签页,选择模型类型为 "API 模型",然后选择 "OpenAI"→"GPT-3.5 Turbo"。
配置模型参数:
API 密钥 :输入你的 OpenAI API 密钥(获取地址:https://platform.openai.com/api-keys);
温度(Temperature) :设置为 0.3(温度越低,输出越稳定、准确,适合摘要场景);
最大 Token 数 :设置为 1024(确保有足够的 Token 生成摘要,GPT-3.5 Turbo 支持最大 4096 Token);
超时时间 :设置为 30 秒;
频率惩罚 :设置为 0(避免模型过度避免重复内容,影响摘要完整性);
存在惩罚 :设置为 0。
点击 "测试连接" 按钮,验证模型是否能正常调用,若提示 "连接成功",则模型配置完成。
3.2.4 4. 测试应用
点击应用开发界面顶部的 "测试" 按钮,进入应用测试界面。
输入测试文本(示例:一段关于人工智能发展的新闻):
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 设计" 界面修改系统提示(如增加 "需包含各领域具体数据" 的规则),重新测试直至满足需求。
3.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_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,
"user" : "user_001"
}
try :
response = requests.post(API_URL, headers=HEADERS, data=json.dumps(payload), timeout=30 )
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__" :
summary = generate_summary(test_text, "中摘要(100-300 字)" )
print ("文本摘要结果:" )
print (summary)
运行代码,查看输出结果(与测试界面结果一致)。
其他语言调用示例(以 JavaScript 为例):
const axios = require ('axios' );
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));
3.2.6 6. 前端界面定制(可选) 若需要修改应用的前端界面(如调整颜色、添加公司 logo),可通过 Dify 的 "交互设置" 标签页进行配置:
界面标题 :修改应用在 Web 界面的显示标题;
主题颜色 :选择或自定义界面主色调;
logo 设置 :上传公司 logo,替换默认图标;
提示文本 :修改用户输入框的提示语(如 "请粘贴需要摘要的文章内容");
按钮文本 :修改 "提交"、"清空" 按钮的显示文本。
3.3 应用发布与分享 应用开发完成后,可通过 Dify 的 "发布" 功能对外提供服务:
点击应用开发界面顶部的 "发布" 按钮,选择发布环境(测试环境 / 生产环境);
配置访问权限(公开访问 / 密码保护 / 指定用户访问);
生成访问链接,用户可通过链接直接使用 Web 版应用,或通过 API 集成到第三方系统。
4. 实战二:开发私有知识库问答 AI 应用(RAG 应用) 在实际应用中,很多 AI 问答场景需要基于企业私有数据(如产品手册、内部文档、行业报告),此时需要结合检索增强生成(RAG)技术。本节将开发一个 "产品手册问答 AI 应用",支持用户基于上传的产品手册提问,AI 结合手册内容给出精准回答。
4.1 需求分析与设计
4.1.1 功能需求
支持上传产品手册(PDF/Word/TXT 格式);
自动处理文档(分块、嵌入、存储);
用户可针对产品手册内容提问;
AI 结合手册内容生成回答,并标注引用来源;
支持文档更新、删除、检索测试。
4.1.2 技术原理
文档处理 :将上传的文档分割为小文本块(避免超出模型 Token 限制);
文本嵌入 :使用嵌入模型(如 OpenAI Embeddings)将文本块转换为向量;
向量存储 :将向量存储到向量数据库(Dify 内置 Chroma 向量库);
检索过程 :用户提问后,将问题转换为向量,在向量库中检索相似度最高的文本块;
生成回答 :将检索到的文本块作为上下文,传递给大模型,生成基于私有数据的回答。
4.2 开发步骤
4.2.1 1. 创建知识库 首先需要创建知识库并上传产品手册,Dify 提供完整的知识库管理功能。
登录 Dify 控制台,点击左侧导航栏 "知识库"→"新建知识库",进入知识库创建界面。
配置知识库信息:
知识库名称:产品手册知识库;
知识库描述:存储产品手册文档,用于产品问答 AI 应用;
分块策略:选择 "按段落分块",块大小设置为 500 字符,重叠率设置为 50 字符(确保上下文连贯性);
嵌入模型:选择 "OpenAI Embeddings"(适合英文和中文,准确率高);
向量数据库:选择 "内置 Chroma"(无需额外部署,适合快速开发)。
点击 "创建" 按钮,完成知识库创建,进入知识库文档管理界面。
上传产品手册文档:
点击 "上传文档" 按钮,选择本地的产品手册 PDF 文件(示例:某款智能手机产品手册),进入文档上传与处理界面。
文档处理完成后,系统会显示 "处理成功",并列出处理后的文本块数量(如 100 个文本块)。
4.2.2 2. 创建问答应用
点击左侧导航栏 "应用"→"新建应用",选择应用类型为 "问答",填写应用名称(产品手册问答 AI)和描述,点击 "创建"。
进入应用开发界面,首先进行 "prompt 设计":
你是一款产品手册问答 AI,负责基于用户上传的产品手册内容回答问题。请按照以下规则处理:
1. 仅基于知识库中的产品手册内容回答,不添加外部知识;
2. 若问题超出手册范围,明确告知用户"该问题不在产品手册范围内,无法回答";
3. 回答需引用手册内容,在回答末尾标注引用来源(格式:【引用:文档名称,页码 X】);
4. 语言需简洁、准确,避免使用专业术语堆砌,确保用户易懂。
创建变量 question(问题内容),类型为 "短文本",提示用户 "请输入关于产品手册的问题"。
4.2.3 3. 配置 RAG(关联知识库)
进入应用开发界面的 "知识库配置" 标签页,点击 "关联知识库",选择之前创建的 "产品手册知识库"。
配置检索参数:
检索 Top K :设置为 5(检索相似度最高的 5 个文本块,确保覆盖足够的上下文);
相似度阈值 :设置为 0.7(过滤相似度低于 0.7 的文本块,避免无关信息干扰);
上下文拼接方式 :选择 "按相似度排序拼接"(将检索到的文本块按相似度从高到低拼接);
上下文最大长度 :设置为 2000 字符(避免超出模型 Token 限制)。
检索测试:
在检索测试区输入问题(如 "这款手机的电池容量是多少?"),点击 "检索" 按钮,系统会显示检索到的文本块(包含内容、相似度得分、来源),验证检索结果是否准确。
4.2.4 4. 配置模型 进入 "模型配置" 标签页,选择模型为 "OpenAI GPT-3.5 Turbo",配置参数:
API 密钥:输入 OpenAI API 密钥;
温度:设置为 0.2(问答场景需准确性,温度较低);
最大 Token 数:设置为 1500;
其他参数:默认即可。
4.2.5 5. 测试应用
点击 "测试" 按钮,进入应用测试界面。
输入测试问题:"这款智能手机支持快充吗?快充功率是多少?",点击 "提交" 按钮。
AI 生成回答(示例):
这款智能手机支持快充功能,其快充功率为 66W。根据产品手册描述,使用原装充电器时,30 分钟可充电至 80%,完全充满需约 45 分钟。
【引用:智能手机产品手册,页码 12】
回答下方会显示引用的文档片段,用户可查看原文验证准确性。
输入超出手册范围的问题(如 "这款手机的竞争对手有哪些?"),AI 应提示 "该问题不在产品手册范围内,无法回答";
输入模糊问题(如 "手机怎么充电?"),AI 应结合手册中的充电说明,给出详细步骤。
4.2.6 6. API 集成(带 RAG 的 API 调用) 与文本摘要应用相比,带 RAG 的 API 调用无需额外配置,Dify 会自动处理检索流程,只需在请求体中指定知识库 ID 即可。
import requests
import json
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"
}
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 测试界面一致。
4.2.7 7. 知识库管理
文档更新 :点击知识库中的 "上传文档",可上传新版本的产品手册,系统会自动替换旧文档;
文档删除 :选择需要删除的文档,点击 "删除" 按钮,系统会删除文档及对应的向量数据;
检索优化 :若检索结果不准确,可调整分块策略(如减小块大小)、更换嵌入模型(如使用中文优化的嵌入模型);
权限管理 :设置知识库访问权限(仅自己可见 / 团队可见 / 所有用户可见)。
4.3 高级配置:优化 RAG 效果 若 RAG 问答效果不理想(如回答不准确、引用错误),可通过以下方式优化:
对于 PDF 文档,若包含大量表格,选择 "按页面分块";
对于长文档,块大小设置为 300-500 字符,重叠率设置为 50-100 字符;
中文文档推荐使用 "通义千问 Embeddings" 或 "文心一言 Embeddings",准确率高于 OpenAI Embeddings;
若回答遗漏信息,增大 "检索 Top K"(如从 5 调整为 8);
若回答包含无关信息,提高 "相似度阈值"(如从 0.7 调整为 0.8);
在系统提示中明确 "优先使用检索到的上下文,若上下文不足,告知用户无法回答";
要求模型 "在回答中逐点引用上下文,每个引用标注具体页码和段落"。
5. 实战三:开发多模态图片内容分析 AI 应用 随着多模态模型(如 GPT-4V、Claude 3 Vision)的发展,AI 应用已从纯文本扩展到图片、音频、视频等领域。本节将开发一个 "图片内容分析 AI 应用",支持用户上传图片,AI 分析图片内容并生成描述,同时回答与图片相关的问题。
5.1 需求分析与设计
5.1.1 功能需求
支持上传图片(JPG/PNG 格式,最大 10MB);
AI 自动分析图片内容(场景、物体、文字、颜色等);
生成图片详细描述;
支持用户针对图片提问(如 "图片中的物体是什么颜色?"、" 图片中有多少人?");
支持图片历史记录查看。
5.1.2 技术选型
多模态模型:OpenAI GPT-4V(支持图片分析,准确率高);
图片存储:Dify 内置 MinIO 存储服务;
交互方式:Web 界面(支持图片上传)+ API 接口。
5.2 开发步骤
5.2.1 1. 配置多模态模型 首先需要在 Dify 中配置多模态模型(GPT-4V),确保支持图片分析功能。
登录 Dify 控制台,点击左侧导航栏 "设置"→"模型管理"→"添加模型",进入模型配置界面。
配置模型参数:
API 密钥 :输入 OpenAI API 密钥(需确保账号已开通 GPT-4V 权限);
最大 Token 数 :设置为 2048;
超时时间 :设置为 60 秒(图片分析耗时较长);
支持的图片格式 :勾选 JPG、PNG;
最大图片大小 :设置为 10MB。
点击 "保存" 按钮,完成多模态模型配置。
5.2.2 2. 创建多模态应用
点击左侧导航栏 "应用"→"新建应用",选择应用类型为 "多模态交互",填写应用名称(图片内容分析 AI)和描述,点击 "创建",进入应用创建界面。
配置应用交互设置:
开启 "图片上传功能",设置支持的图片格式(JPG/PNG)和最大大小(10MB);
添加变量:
image:类型为 "图片",提示用户 "请上传需要分析的图片";
question:类型为 "短文本",提示用户 "请输入关于图片的问题(可选)"。
5.2.3 3. 设计 prompt 多模态 prompt 需要包含图片处理指令和文本生成规则,进入 "prompt 设计" 标签页:
你是一名专业的图片内容分析师,擅长分析图片中的场景、物体、文字、颜色、人物等元素。请按照以下规则处理:
1. 首先生成图片详细描述,包含:
- 场景(如室内/室外、家庭/办公/自然);
- 主要物体(名称、数量、颜色、位置);
- 人物(数量、动作、穿着、表情,若有);
- 文字(图片中的文字内容,若有);
- 整体氛围(如明亮/昏暗、温馨/严肃);
2. 若用户有提问,结合图片内容回答问题,确保回答基于图片实际内容;
3. 若图片内容不清晰或无法识别,明确告知用户;
4. 语言需简洁、有条理,分点描述(使用 1.2.3.格式)。
上传的图片:{{image}}
用户问题(可选):{{question}}
5.2.4 4. 测试应用
点击 "测试" 按钮,进入多模态应用测试界面。
上传测试图片(示例:一张包含 "红色苹果、黄色香蕉、绿色橙子" 的水果静物图),输入问题 "图片中有哪些水果?分别是什么颜色?",点击 "提交" 按钮。
等待 10-20 秒(GPT-4V 分析图片耗时较长),AI 生成分析结果:
一、图片详细描述
1. 场景:室内静物场景,背景为白色桌面,无其他装饰元素;
2. 主要物体:
- 苹果:1 个,红色,位于图片左侧;
- 香蕉:2 根,黄色,位于图片中间,呈弯曲状;
- 橙子:1 个,绿色(未完全成熟),位于图片右侧;
3. 人物:无;
4. 文字:无;
5. 整体氛围:明亮、简洁,突出水果主体。
二、问题回答
图片中的水果及颜色如下:
1. 苹果:红色;
2. 香蕉:黄色;
3. 橙子:绿色。
上传包含文字的图片(如书籍封面),AI 应识别并转录文字内容;
上传人物图片,AI 应描述人物数量、动作、穿着;
上传模糊图片,AI 应提示 "图片内容不清晰,无法准确分析"。
5.2.5 5. API 集成(多模态 API 调用) 多模态 API 调用需要处理图片文件(二进制数据),需将图片转换为 Base64 编码或通过表单上传。Dify 支持两种方式,本节以 Base64 编码为例。
import requests
import json
import base64
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: 分析结果
"""
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 秒超时。
6. Dify 高级功能:工作流与插件开发 Dify 的工作流和插件功能可满足复杂业务场景需求,本节将介绍如何通过工作流设计复杂流程,以及如何开发自定义插件。
6.1 工作流设计:可视化流程编排 工作流支持拖拽式设计复杂业务逻辑,例如 "用户提问→检索知识库→调用模型→发送邮件通知" 的完整流程。
6.1.1 工作流设计步骤
登录 Dify 控制台,点击左侧导航栏 "工作流"→"新建工作流",进入工作流设计界面。
设计 "用户提问→知识库检索→模型回答→邮件通知" 流程:
添加触发节点 :拖拽 "用户输入触发" 节点到画布,配置触发参数(用户输入变量:question);
添加知识库节点 :拖拽 "知识库检索" 节点,连接到触发节点,配置知识库 ID 和检索参数(Top K=5);
添加模型节点 :拖拽 "模型调用" 节点,连接到知识库节点,选择模型(GPT-3.5 Turbo),配置 prompt(包含用户问题和检索到的上下文);
添加工具节点 :拖拽 "邮件发送" 节点,连接到模型节点,配置邮件参数(收件人、主题、内容模板,内容包含模型回答);
添加输出节点 :拖拽 "结果输出" 节点,连接到模型节点,配置输出参数(模型回答);
连接节点 :用连接线将各节点按流程顺序连接,形成完整工作流。
点击 "测试" 按钮,输入测试问题,验证工作流是否正常执行(检索知识库→生成回答→发送邮件)。
6.1.2 工作流应用场景
多步骤数据处理 :如 "用户上传 Excel→数据提取→数据分析→生成报告→发送报告";
条件分支逻辑 :如 "根据用户问题类型,分支到不同知识库(产品问题→产品知识库,技术问题→技术知识库)";
定时任务 :如 "每天定时检索行业新闻→生成摘要→推送至企业微信群"。
6.2 自定义插件开发:扩展 Dify 功能 Dify 支持自定义插件开发,若内置插件无法满足需求,可开发专属插件(如对接企业内部系统、第三方 API)。本节将开发一个 "天气查询插件",支持根据城市名称查询实时天气。
6.2.1 插件开发步骤 插件采用 Python 开发,需遵循 Dify 插件开发规范,项目结构如下:
weather_plugin/
├── __init__.py
├── main.py
├── config.py
└── 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("城市名称不能为空" )
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)} " )
AMAP_API_KEY = "你的高德天气 API 密钥"
在 Dify 中集成插件
登录 Dify 控制台,点击左侧导航栏 "插件"→"上传插件",选择插件项目压缩包(ZIP 格式)。
上传完成后,点击 "测试" 按钮,输入城市名称(如 "北京"),验证插件是否能正常返回天气信息;
测试通过后,点击 "启用" 按钮,插件即可在应用和工作流中使用。
插件应用
在应用中使用:创建应用时,添加 "工具调用" 节点,选择 "天气查询插件",配置输入参数(城市名称);
在工作流中使用:拖拽 "工具节点",选择 "天气查询插件",连接到其他节点(如将天气信息插入到邮件中发送)。
7. Dify 应用部署与生产优化 开发完成的 AI 应用需要部署到生产环境,并进行性能、成本、稳定性优化,确保满足企业级应用需求。
7.1 生产环境部署
7.1.1 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
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_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 证书)
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d your-dify-domain.com -d api.your-dify-domain.com
docker stack deploy -c docker-compose.prod.yml
相关免费在线工具 加密/解密文本 使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
RSA密钥对生成器 生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
Mermaid 预览与可视化编辑 基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
随机西班牙地址生成器 随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online
Gemini 图片去水印 基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online
curl 转代码 解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online