Dify 升级前必看:值不值得升、怎么备份、如何回滚全讲清楚
Dify 值得升级吗|附完整命令
在过去一年里,Dify 已经从一个“好用的 LLM 应用开发平台”,逐渐变成很多团队搭建 AI 应用、智能客服、知识库问答、工作流自动化的基础设施。随着版本持续迭代,很多已经部署了 Dify 的用户都会遇到一个问题:
Dify 到底值不值得升级?升级会不会影响现有应用?数据库、向量库、配置文件该怎么备份?有没有一套完整命令可以直接参考?
这篇文章会围绕“是否值得升级”这个问题展开,同时给出一套相对稳妥的升级流程,包含备份、拉取新版本、迁移、启动、回滚等常用命令。适合通过 Docker Compose 自部署 Dify 的用户参考。
一、Dify 值得升级吗?
先给结论:
如果你正在生产环境使用 Dify,并且当前版本稳定运行,不建议盲目追新;但如果你需要更好的模型兼容性、工作流能力、知识库效果、安全修复和性能优化,那么 Dify 是值得有计划升级的。
也就是说,Dify 值不值得升级,关键不在于“新版本一定更好”,而在于你当前的使用场景是否需要新版本带来的能力。
二、为什么很多人想升级 Dify?
Dify 的版本迭代通常会带来以下几类变化。
1. 支持更多模型和供应商
Dify 的核心价值之一就是把不同大模型统一封装,让开发者可以更方便地构建 AI 应用。
随着 OpenAI、Anthropic、Google Gemini、Azure OpenAI、通义千问、智谱、DeepSeek、Moonshot、Ollama、本地模型等不断更新,Dify 新版本往往会增强模型接入能力。
如果你当前版本存在以下问题,就比较适合升级:
- 新模型无法接入;
- 模型参数不完整;
- Function Calling / Tool Calling 支持不理想;
- 本地模型调用兼容性较差;
- 某些模型供应商配置复杂或无法使用。
对于希望快速尝试新模型的团队来说,升级 Dify 可以减少大量适配工作。
2. 工作流能力持续增强
Dify 的 Workflow 是很多人选择它的重要原因。相比简单的聊天应用,工作流可以把大模型、条件判断、代码节点、HTTP 请求、知识库检索、变量处理等串起来,做出更复杂的业务流程。
如果你当前使用 Dify 只是做简单问答,可能感受不明显。但如果你已经开始用 Dify 做:
- 智能客服分流;
- 合同审查;
- 简历筛选;
- 数据分析助手;
- 文档自动生成;
- 多步骤自动化任务;
- 企业内部流程助手;
那么新版本对 Workflow 的增强通常很有价值。
很多升级的动力,实际上来自于“旧版本做不到”或者“旧版本做起来很绕”。
3. 知识库检索效果和稳定性优化
Dify 的知识库能力是落地 RAG 应用的重要基础。一个企业内部知识库系统,真正难点不在于“能不能回答”,而在于:
- 文档切分是否合理;
- 向量检索是否准确;
- 召回内容是否相关;
- 长文档处理是否稳定;
- 重排模型是否支持;
- 多格式文档解析是否可靠;
- 知识库更新是否方便。
新版本通常会优化知识库处理流程、检索策略、文档解析、向量库兼容等问题。
如果你的应用严重依赖知识库,而且遇到了召回不准、文档处理失败、更新慢等问题,那么升级往往是值得考虑的。
4. 安全修复和依赖更新
对于生产环境来说,安全性非常重要。
Dify 本身依赖多个组件,例如:
- PostgreSQL;
- Redis;
- Weaviate / Qdrant / Milvus 等向量库;
- Celery Worker;
- API 服务;
- Web 前端;
- Sandbox;
- Nginx;
- 插件或模型供应商接口。
新版本可能会修复安全漏洞、权限问题、依赖风险和接口兼容问题。如果你将 Dify 暴露在公网,或者用于企业内部敏感业务,那么安全更新是很重要的升级理由。
5. 性能和稳定性提升
Dify 在生产环境中常见的稳定性问题包括:
- Worker 任务堆积;
- 文档索引任务慢;
- 大量并发请求时响应不稳定;
- 数据库连接数不足;
- 前端页面加载异常;
- 某些任务失败后无法恢复;
- 容器异常退出。
新版本可能会对这些问题做修复。如果你当前版本已经影响业务稳定性,那么升级新版本有可能解决问题。
三、什么时候不建议立刻升级?
虽然 Dify 值得升级,但不是所有场景都适合马上升级。
以下情况建议谨慎:
1. 当前版本运行非常稳定
如果你的 Dify 已经承载生产业务,功能也完全够用,没有明显 bug,不建议看到新版本就立即升级。
尤其是生产环境,应优先考虑稳定性。
2. 没有做备份机制
升级 Dify 不是简单地执行一条 docker compose pull 就完事了。Dify 涉及数据库、配置文件、向量库、上传文件等数据。
如果没有备份,升级失败后很难恢复。
所以,在没有备份能力之前,不建议直接升级。
3. 跨多个大版本升级
如果你的版本比较旧,比如从很早的版本直接升级到最新版本,中间可能涉及数据库结构、环境变量、服务拆分、配置变更等。
这种情况下建议先阅读官方 Release Notes,必要时分阶段升级。
4. 使用了大量自定义配置
如果你改过 Docker Compose 文件、自定义过 Nginx、接入了私有模型网关、修改过源码,升级前一定要特别小心。
因为新版本可能覆盖你的修改,或者导致配置不兼容。
四、升级前必须明确的几个问题
在正式升级之前,建议你先确认以下内容。
1. 你当前的部署方式是什么?
常见部署方式包括:
- Docker Compose;
- Kubernetes;
- 源码部署;
- 云服务器一键部署;
- 宝塔、1Panel 等面板部署。
本文主要以 Docker Compose 部署方式 为例,因为这是 Dify 自部署最常见的方式。
2. 当前版本是多少?
进入 Dify 部署目录后,可以查看当前 Git 分支和版本:
cd /opt/dify
git status
git branch
git log -1 --oneline
如果是官方仓库克隆部署,也可以查看 tag:
git tag --points-at HEAD
如果你使用的是 Docker 镜像,也可以查看当前容器镜像版本:
docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Status}}"
3. 你的数据在哪里?
Dify 的数据通常包括:
- PostgreSQL 数据;
- Redis 数据;
- 向量库数据;
- 上传文件;
.env配置文件;- Docker Compose 文件;
- 自定义 Nginx 配置;
- 自定义模型配置。
如果你不知道数据在哪,升级前一定不要着急动手。
五、Dify 升级总体流程
推荐升级流程如下:
确认当前版本
↓
阅读目标版本 Release Notes
↓
停止写入或进入维护窗口
↓
备份数据库、配置文件、向量库和上传文件
↓
拉取新版本代码
↓
对比并更新 .env 配置
↓
拉取新镜像
↓
启动服务
↓
执行数据库迁移
↓
检查服务状态
↓
验证应用、工作流、知识库
↓
保留备份一段时间
生产环境中,最重要的是两点:
- 升级前备份;
- 升级后验证。
六、升级前准备
假设你的 Dify 安装目录是:
/opt/dify
如果你的目录不同,请自行替换。
进入目录:
cd /opt/dify
查看当前目录内容:
ls -lah
一般 Docker Compose 部署的 Dify 会有类似结构:
dify/
├── docker/
├── api/
├── web/
├── README.md
└── ...
Docker Compose 文件通常在:
/opt/dify/docker
进入 Docker 目录:
cd /opt/dify/docker
查看文件:
ls -lah
常见文件包括:
.env
.env.example
docker-compose.yaml
docker-compose.middleware.yaml
nginx/
volumes/
七、升级前备份命令
升级前最重要的事情就是备份。下面给出一套完整的备份命令。
1. 创建备份目录
mkdir -p /opt/backups/dify
cd /opt/backups/dify
创建带时间戳的备份目录:
BACKUP_DIR="/opt/backups/dify/$(date +%Y%m%d_%H%M%S)"
mkdir -p "$BACKUP_DIR"
echo "$BACKUP_DIR"
2. 备份 .env 和 Compose 配置
cp -a /opt/dify/docker/.env "$BACKUP_DIR/.env.bak"
cp -a /opt/dify/docker/docker-compose.yaml "$BACKUP_DIR/docker-compose.yaml.bak"
如果你还有其他 Compose 文件,也一起备份:
cp -a /opt/dify/docker/docker-compose.* "$BACKUP_DIR/" 2>/dev/null || true
备份 nginx 配置:
cp -a /opt/dify/docker/nginx "$BACKUP_DIR/nginx.bak" 2>/dev/null || true
3. 备份 volumes 目录
如果你的 Dify 数据位于 /opt/dify/docker/volumes,可以整体打包:
tar -czf "$BACKUP_DIR/dify-volumes.tar.gz" -C /opt/dify/docker volumes
这个目录可能比较大,尤其是知识库文档、向量库数据较多时。可以先查看大小:
du -sh /opt/dify/docker/volumes
4. 备份 PostgreSQL 数据库
先查看 PostgreSQL 容器名称:
docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Status}}" | grep -i postgres
常见容器名可能是:
docker-db-1
也可能是:
dify-db-1
执行备份前,可以查看 .env 中数据库配置:
grep -E "DB_USERNAME|DB_PASSWORD|DB_DATABASE|DB_HOST|DB_PORT" /opt/dify/docker/.env
假设数据库容器名为 docker-db-1,数据库用户是 postgres,数据库名是 dify,可以执行:
docker exec docker-db-1 pg_dump -U postgres -d dify > "$BACKUP_DIR/dify-postgres.sql"
如果你的数据库用户名或数据库名不同,请替换:
docker exec <数据库容器名> pg_dump -U <数据库用户名> -d <数据库名> > "$BACKUP_DIR/dify-postgres.sql"
压缩 SQL 文件:
gzip "$BACKUP_DIR/dify-postgres.sql"
5. 备份当前 Git 版本信息
cd /opt/dify
git rev-parse HEAD > "$BACKUP_DIR/git-commit.txt"
git branch --show-current > "$BACKUP_DIR/git-branch.txt"
git status > "$BACKUP_DIR/git-status.txt"
如果当前处于某个 tag,也可以记录:
git describe --tags --always > "$BACKUP_DIR/git-version.txt"
6. 检查备份结果
ls -lah "$BACKUP_DIR"
建议至少确认以下文件存在:
.env.bak
docker-compose.yaml.bak
dify-volumes.tar.gz
dify-postgres.sql.gz
git-commit.txt
八、停止 Dify 服务
进入 Docker 目录:
cd /opt/dify/docker
停止服务:
docker compose down
如果你的系统使用的是旧版命令,也可能是:
docker-compose down
建议优先使用:
docker compose version
确认当前是否支持新版 Compose。
九、拉取 Dify 新版本代码
进入 Dify 根目录:
cd /opt/dify
查看当前状态:
git status
如果你没有改动源码,可以直接拉取:
git fetch --all --tags
查看最新 tag:
git tag --sort=-v:refname | head -20
假设你要升级到指定版本,例如:
git checkout 1.0.0
如果你要升级到最新主分支,则可以:
git checkout main
git pull origin main
不过生产环境更建议使用明确版本 tag,而不是直接跟随 main。
例如:
git checkout tags/1.0.0 -b upgrade-1.0.0
如果你之前部署时就是某个分支,也可以:
git pull
十、更新 .env 配置
升级 Dify 时,.env.example 可能会新增配置项。你不能简单覆盖原来的 .env,否则原来的密钥、数据库密码、模型配置等可能丢失。
推荐做法是对比:
cd /opt/dify/docker
diff -u .env.example .env | less
也可以查看新版本 .env.example 中有哪些新增项:
grep -v '^#' .env.example | grep '=' | cut -d= -f1 | sort > /tmp/env_example_keys.txt
grep -v '^#' .env | grep '=' | cut -d= -f1 | sort > /tmp/env_keys.txt
comm -23 /tmp/env_example_keys.txt /tmp/env_keys.txt
上面命令会列出 .env.example 中有、但你当前 .env 中没有的配置项。
你可以手动编辑 .env:
nano .env
或者:
vim .env
把新增配置项补进去。
注意:不要随意修改
SECRET_KEY、数据库密码、存储路径等关键配置,否则可能导致原有服务无法正常读取数据。
十一、拉取最新镜像并启动
进入 Docker 目录:
cd /opt/dify/docker
拉取镜像:
docker compose pull
启动服务:
docker compose up -d
查看服务状态:
docker compose ps
查看日志:
docker compose logs -f
如果只想看 API 服务日志:
docker compose logs -f api
查看 Worker 日志:
docker compose logs -f worker
查看 Web 日志:
docker compose logs -f web
十二、执行数据库迁移
Dify 新版本可能需要执行数据库迁移。通常 API 容器启动时会自动处理一部分迁移,但生产环境建议关注日志确认。
查看 API 容器名称:
docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Status}}" | grep api
进入 API 容器:
docker exec -it sh
如果需要手动执行迁移,常见命令类似:
flask db upgrade
也可以直接在宿主机执行:
docker exec -it flask db upgrade
请注意,不同版本的 Dify 启动脚本和迁移方式可能有所变化。最稳妥的方式是以官方对应版本文档为准,并结合容器日志判断。
十三、升级后检查
升级完成后,不要马上宣布完成。建议按以下步骤检查。
1. 检查容器状态
cd /opt/dify/docker
docker compose ps
确认所有核心容器都是 Up 状态。
2. 检查端口监听
ss -lntp | grep -E "80|443|3000|5001"
具体端口取决于你的配置。
3. 检查 API 健康状态
如果你配置了域名,例如:
https://dify.example.com
可以执行:
curl -I https://dify.example.com
也可以本机测试:
curl -I http://127.0.0.1
4. 检查 Web 页面
打开浏览器访问 Dify 页面,确认:
- 登录正常;
- 应用列表正常;
- 应用详情正常;
- 工作流可以打开;
- 知识库可以打开;
- 模型供应商配置仍然存在;
- API Key 没有丢失。
5. 检查知识库
建议测试以下内容:
- 上传新文档;
- 对旧知识库发起问答;
- 检查召回内容;
- 检查索引任务是否完成;
- 检查 Worker 是否有报错。
查看 Worker 日志:
docker compose logs -f worker
6. 检查应用调用
如果你有外部系统通过 API 调用 Dify,需要测试接口是否正常。
示例:
curl -X POST "https://dify.example.com/v1/chat-messages" \
-H "Authorization: Bearer app-xxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"inputs": {},
"query": "你好,请简单介绍一下你自己",
"response_mode": "blocking",
"conversation_id": "",
"user": "upgrade-test-user"
}'
如果应用是 Workflow 类型,可以测试工作流接口,具体请求体以你当前应用类型为准。
十四、常见问题与处理办法
问题 1:升级后页面打不开
先看容器状态:
docker compose ps
再看 Nginx 日志:
docker compose logs -f nginx
看 Web 日志:
docker compose logs -f web
如果是端口冲突,可以查看:
ss -lntp
问题 2:API 容器一直重启
查看日志:
docker compose logs -f api
常见原因包括:
.env缺少新配置项;- 数据库连接失败;
- Redis 连接失败;
- SECRET_KEY 配置错误;
- 数据库迁移失败。
检查环境变量:
grep -E "SECRET_KEY|DB_|REDIS_|CELERY_" .env
问题 3:知识库无法检索
查看向量库容器:
docker compose ps
查看向量库日志,例如 Weaviate:
docker compose logs -f weaviate
如果你使用 Qdrant:
docker compose logs -f qdrant
同时查看 Worker:
docker compose logs -f worker
问题 4:模型供应商配置丢失
通常不要第一时间怀疑数据丢了。先确认:
- 是否连接到了原来的数据库;
.env是否被覆盖;SECRET_KEY是否变化;- 数据库名是否变化;
- 容器是否使用了新的 volume。
检查数据库配置:
grep -E "DB_HOST|DB_PORT|DB_USERNAME|DB_PASSWORD|DB_DATABASE" .env
检查 volume:
docker volume ls
十五、如何回滚 Dify?
如果升级后出现严重问题,可以考虑回滚。
1. 停止当前服务
cd /opt/dify/docker
docker compose down
2. 回滚代码版本
进入 Dify 根目录:
cd /opt/dify
查看备份中记录的 commit:
cat /opt/backups/dify/<备份目录>/git-commit.txt
切回旧版本:
git checkout <旧commit>
或者切回旧 tag:
git checkout <旧tag>
3. 恢复 .env
cp -a /opt/backups/dify/<备份目录>/.env.bak /opt/dify/docker/.env
4. 恢复 volumes
如果需要恢复 volumes,可以先移走当前目录:
mv /opt/dify/docker/volumes /opt/dify/docker/volumes.failed.$(date +%Y%m%d_%H%M%S)
解压备份:
tar -xzf /opt/backups/dify/<备份目录>/dify-volumes.tar.gz -C /opt/dify/docker
5. 恢复 PostgreSQL 数据库
如果需要恢复数据库,先启动数据库服务:
cd /opt/dify/docker
docker compose up -d db
等待数据库启动后,找到数据库容器:
docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Status}}" | grep -i postgres
解压 SQL:
gunzip -c /opt/backups/dify/<备份目录>/dify-postgres.sql.gz > /tmp/dify-postgres.sql
执行恢复前,通常需要清空或重建数据库。示例命令如下,请务必替换为你的容器名、用户名和数据库名:
docker exec -i <数据库容器名> psql -U <数据库用户名> -d <数据库名> < /tmp/dify-postgres.sql
如果需要先删除并重建数据库,示例:
docker exec -it <数据库容器名> psql -U postgres
进入 psql 后执行:
DROP DATABASE dify;
CREATE DATABASE dify;
\q
然后再导入:
docker exec -i <数据库容器名> psql -U postgres -d dify < /tmp/dify-postgres.sql
6. 重新启动旧版本
cd /opt/dify/docker
docker compose pull
docker compose up -d
docker compose ps
查看日志:
docker compose logs -f
十六、推荐的一键升级脚本示例
如果你已经熟悉 Dify 部署结构,可以参考下面这个脚本。不过生产环境不建议无脑执行,最好先在测试环境验证。
新建脚本:
nano /opt/upgrade-dify.sh
写入以下内容:
#!/usr/bin/env bash
set -e
DIFY_DIR="/opt/dify"
DOCKER_DIR="$DIFY_DIR/docker"
BACKUP_BASE="/opt/backups/dify"
TARGET_REF="${1:-main}"
BACKUP_DIR="$BACKUP_BASE/$(date +%Y%m%d_%H%M%S)"
echo "======================================"
echo "Dify upgrade script"
echo "DIFY_DIR: $DIFY_DIR"
echo "TARGET_REF: $TARGET_REF"
echo "BACKUP_DIR: $BACKUP_DIR"
echo "======================================"
mkdir -p "$BACKUP_DIR"
echo "[1/8] Backup config files..."
cp -a "$DOCKER_DIR/.env" "$BACKUP_DIR/.env.bak"
cp -a "$DOCKER_DIR/docker-compose.yaml" "$BACKUP_DIR/docker-compose.yaml.bak"
cp -a "$DOCKER_DIR"/docker-compose.* "$BACKUP_DIR/" 2>/dev/null || true
cp -a "$DOCKER_DIR/nginx" "$BACKUP_DIR/nginx.bak" 2>/dev/null || true
echo "[2/8] Backup git info..."
cd "$DIFY_DIR"
git rev-parse HEAD > "$BACKUP_DIR/git-commit.txt"
git branch --show-current > "$BACKUP_DIR/git-branch.txt" || true
git describe --tags --always > "$BACKUP_DIR/git-version.txt" || true
git status > "$BACKUP_DIR/git-status.txt"
echo "[3/8] Backup volumes..."
if [ -d "$DOCKER_DIR/volumes" ]; then
tar -czf "$BACKUP_DIR/dify-volumes.tar.gz" -C "$DOCKER_DIR" volumes
else
echo "No volumes directory found, skip."
fi
echo "[4/8] Backup PostgreSQL..."
cd "$DOCKER_DIR"
DB_CONTAINER=$(docker ps --format "{{.Names}}" | grep -E "db|postgres" | head -n 1 || true)
if [ -n "$DB_CONTAINER" ]; then
echo "Found database container: $DB_CONTAINER"
docker exec "$DB_CONTAINER" pg_dump -U postgres -d dify > "$BACKUP_DIR/dify-postgres.sql" || {
echo "PostgreSQL backup failed. Please check DB username/database name."
exit 1
}
gzip "$BACKUP_DIR/dify-postgres.sql"
else
echo "Database container not found, skip pg_dump."
fi
echo "[5/8] Stop Dify services..."
cd "$DOCKER_DIR"
docker compose down
echo "[6/8] Update Dify code..."
cd "$DIFY_DIR"
git fetch --all --tags
git checkout "$TARGET_REF"
if [ "$TARGET_REF" = "main" ]; then
git pull origin main
fi
echo "[7/8] Pull images and start services..."
cd "$DOCKER_DIR"
docker compose pull
docker compose up -d
echo "[8/8] Show status..."
docker compose ps
echo "======================================"
echo "Upgrade finished."
echo "Backup directory: $BACKUP_DIR"
echo "Please check logs:"
echo "cd $DOCKER_DIR && docker compose logs -f"
echo "======================================"
保存后赋予执行权限:
chmod +x /opt/upgrade-dify.sh
升级到 main:
/opt/upgrade-dify.sh main
升级到指定版本,例如:
/opt/upgrade-dify.sh 1.0.0
或者:
/opt/upgrade-dify.sh tags/1.0.0
注意:脚本中的数据库用户名和数据库名默认使用
postgres和dify。如果你的环境不同,需要修改脚本中的pg_dump命令。
十七、升级 Dify 的最佳实践
1. 先测试环境,后生产环境
如果 Dify 已经用于重要业务,强烈建议准备一套测试环境,先恢复生产备份,再测试升级。
测试通过后,再在生产环境升级。
2. 固定版本,不要追 main
生产环境更推荐使用稳定 tag,例如:
git checkout tags/<版本号>
而不是一直使用:
git pull origin main
主分支可能包含尚未完全验证的变更,生产环境追 main 风险更高。
3. 升级前阅读 Release Notes
每个版本可能都有破坏性变更,比如:
- 环境变量变更;
- 数据库迁移;
- 服务拆分;
- 模型配置调整;
- 插件机制变化;
- 默认向量库变化;
- 依赖组件版本变化。
升级前阅读 Release Notes 可以减少很多排查时间。
4. 维护窗口升级
建议在业务低峰期升级,比如晚上或周末。
升级前可以提前通知团队:
Dify 将在 xx:xx - xx:xx 进行升级维护,期间可能出现短暂不可用。
5. 保留备份至少一段时间
升级后即使看起来正常,也建议保留备份至少 7 到 30 天。因为有些问题不是当天就能发现,比如:
- 某些旧工作流节点异常;
- 某类文档无法解析;
- 某个模型供应商调用失败;
- 历史会话读取异常;
- API 调用参数兼容问题。
十八、我的建议:哪些用户应该升级?
建议升级的情况
如果你符合以下情况,建议升级:
- 需要接入新模型;
- 当前版本存在明显 bug;
- 需要更强的 Workflow 能力;
- 知识库检索效果不满足需求;
- 使用公网部署,关注安全更新;
- 当前版本 API 或 Worker 不稳定;
- 官方明确修复了你遇到的问题。
可以暂缓升级的情况
如果你符合以下情况,可以暂缓:
- 当前版本稳定;
- 功能完全够用;
- 没有测试环境;
- 没有备份机制;
- 团队没有时间处理兼容问题;
- 正处于业务高峰期。
十九、总结
Dify 值不值得升级,不能简单回答“值得”或“不值得”。
更准确的判断是:
Dify 值得升级,但应该有计划、有备份、有验证地升级。
对于个人用户、测试环境或内部小工具,升级成本相对较低,可以更积极地尝试新版本。
对于企业生产环境,则应该遵循标准流程:先备份,再升级,后验证,必要时可回滚。
最后再强调一次升级顺序:
# 1. 进入目录
cd /opt/dify/docker
# 2. 备份配置、数据库和 volumes
# 3. 停止服务
docker compose down
# 4. 更新代码
cd /opt/dify
git fetch --all --tags
git checkout <目标版本>
# 5. 对比并更新 .env
cd /opt/dify/docker
diff -u .env.example .env | less
# 6. 拉取镜像并启动
docker compose pull
docker compose up -d
# 7. 查看状态和日志
docker compose ps
docker compose logs -f
如果只记住一句话,那就是:
不要为了升级而升级;但当新版本能解决你的真实问题时,Dify 非常值得升级。