Dify 近期动态(W17–W19)
日期范围: 2026-04-15 - 2026-05-05 摘要: v1.14.0 正式发布,带来协同编辑、HITL Service API、跨 App 复制节点三大 blocker 功能;安全方面修复 GHSA-4q3w-q5mc-45rq,并有新 CVE 修复 PR 在途;代码质量大规模重构持续推进,社区热度仍偏低。
版本发布
v1.14.0(Latest Stable)
发布时间: 2026-04-28("last week") 类型: Stable 发布链接: v1.14.0 贡献者: 110+ 人;反应数 19(13 1 3 4 2)
本版本打通了 W16 Trackers #34741 中的全部 7 项 blocker,是 1.13.x 系列以来跨度最大的功能里程碑。
安全修复:
- GHSA-4q3w-q5mc-45rq:change-email 流程引入 phase-bound token 校验,防止未过期 token 被复用(PR #35425)
- IDOR 加固:data-source binding 增加 tenant_id 校验(PR #34456)、知识库 API ownership 检查(PR #34436)
- 防 cross-tenant 信息泄露(PR #34744)
新功能/亮点:
- Collaboration:工作流协同编辑,多成员实时在线编辑同一工作流,支持 presence 指示;自托管需手动配置 WebSocket(PR #30781)
- HITL Service API:Human-in-the-Loop 流程支持 Service API 程序化接入(PR #32826)
- 跨 App 复制节点:可将节点跨应用复制粘贴(PR #33273)
- MCP 修复:修复 double
/v1URL 导致 404、OAuth discovery 异常 JSON 安全处理、schema 类型映射(checkbox/json_object) - Docker Compose:新增 api/worker/worker_beat healthcheck;Celery 默认并发提升至 4;PostgreSQL max_connections 提升至 200
- 性能:graph 初始化性能优化(PR #35447,缓存 provider 配置);全局 httpx client 替换 per-request 创建(PR #34311)
- Redis:可配置 key prefix(PR #35139);新增 retry logic(PR #34566)
- Graphon 0.2.2:
dify_graph独立打包为graphon,解耦 API 内核 - 前端 UI:
@langgenius/dify-ui共享设计原语(PreviewCard、Meter);Goto Anything 增强;Prompt Editor 斜杠变量过滤;react-syntax-highlighter 替换为 shiki
热门话题
1. v1.14.0 Collaboration 功能上线
来源: GitHub Release v1.14.0 时间: 2026-04-28
摘要: 多人协同编辑工作流终于从 rc1 Preview 进入正式版。自托管用户需要配置 ENABLE_COLLABORATION_MODE=true 和 WebSocket 服务器地址,依赖 geventwebsocket.gunicorn.workers.GeventWebSocketWorker。这是 Dify 从个人工具向团队平台迈出的关键一步,但 WebSocket 配置对运维提出了新挑战。
2. 新安全漏洞修复 PR 在途:GHSA-48xc-wmw8-3jr3
来源: PR #35793 (Draft) 时间: 2026-05-05(今日,Draft 状态)
摘要: xr843 提交了一个 Draft PR 修复 GHSA-48xc-wmw8-3jr3,目前为 Draft 状态,尚未 merge。结合 v1.14.0 中已合并的 IDOR 和 change-email 安全修复,Dify 近期持续暴露并修复安全问题,自托管用户应密切关注并及时升级。
3. [carry-over] Access token 退出后仍有效 PR #31794 ── 企业渗透测试压力持续
来源: PR #31794 时间: W16 记录,状态截至 2026-05-05 未见 merge
摘要: 这个被企业渗透测试标记为 critical 的漏洞 PR 在 W16 时受 laipz8200 requested changes 阻塞,v1.14.0 的 changelog 中未见其合入。自托管用户应关注此 PR 进度;受影响的企业用户可考虑额外的 session 失效策略(如 Redis token blacklist)作为临时缓解。
4. 插件安装卡住:新增 "Stop All" 按钮 PR #35668
来源: PR #35668 时间: 2026-04-28(opened "last week",Review Required)
摘要: sawyer-shi 提交了"中止卡住的插件安装任务"功能 PR,已获 60% 进度,还未合入。这是一个高频的社区痛点——用户反映插件安装挂起后只能重启服务,此 PR 提供了 UI 层面的 graceful abort 机制,合入后可显著改善插件运维体验。
5. RAG doc_id 去重 Key 只对 Dify provider 生效
来源: PR #35759 时间: 2026-05-05(open,LGTM 待合)
摘要: ki3nd 发现 doc_id dedup key 硬编码只对 dify provider 生效,其他向量库(如 Weaviate、Qdrant)的 RAG pipeline 中文档去重逻辑存在缺陷。PR 已标 lgtm 等待合入,使用多向量库混合部署的用户可能受此影响。
6. 工作流在线用户轮询性能问题修复
来源: PR #35786 时间: 2026-05-04(opened "19 hours ago",2 approvals)
摘要: hjlarry 修复了 Collaboration 功能中工作流在线用户轮询对大 App 列表的性能问题,已获 2 个 LGTM 审批,极可能进入下一个 patch 版本。这表明 1.14.0 的 Collaboration 功能仍有 post-release 稳定性工作在进行。
7. 大规模代码质量重构:SQLAlchemy 2.0 迁移接近尾声
来源: PR #34960...#35212 系列 时间: 2026-04-15 至 2026-05-05
摘要: W17–W19 期间 RenzoMXD、wdeveloper16、carlos4s、dataCenter430 等贡献者密集推进 SQLAlchemy 2.0 select() API 迁移、TypedDict 类型标注、sessionmaker 模式替换、reqparse → Pydantic BaseModel 迁移,累计超过 100 个 PR。这是 Dify 有史以来最大规模的技术债清还行动,为后续可维护性和类型安全提供基础。
8. [carry-over] Docker 硬编码密钥 PR #34408 ── 健康检查已 merge,密钥问题仍需跟踪
来源: PR #34408 / PR #34572 时间: W16–W19
摘要: kurokobo 在 v1.14.0 中合入了 Docker Compose healthcheck 优化 PR #34572(lightened Worker healthcheck),但 kurokobo W16 时提出的 scope concern(其他硬编码密钥未处理)是否被 PR #34408 完全解决仍需核实。自托管用户升级到 1.14.0 后建议检查 docker-compose.yaml 中的 SECRET_KEY 和相关变量是否已更换为强随机值。
数据概览
| 维度 | 数据 |
|---|---|
| GitHub 活跃 Issues(开放) | 278 个 |
| GitHub PRs(开放) | 493 个 |
| v1.14.0 贡献者 | 110+ 人 |
| HN 最热讨论 | Midjourney+Suno+Veo 3.1 Dify workflow(3 pts, 0 评论) |
| 本期核心主题 | v1.14.0 发布、协同编辑、安全加固、SQLAlchemy 2.0 迁移 |
发版节律
| 版本 | 类型 | 日期 | 亮点 |
|---|---|---|---|
| v1.14.0 | Stable | 2026-04-28 | Collaboration、HITL API、跨 App 复制节点、安全修复 |
本期(3 周)1 次正式发布,发版节奏有所放缓(v1.13.x 几乎每周一个 patch),集中精力交付 1.14.0 milestone。post-release 38 commits 已在 main 堆积,预计短期内会有 v1.14.x patch。
Carry-over 状态更新
| # | 标题 | 状态变化 |
|---|---|---|
| #31794 | access token 退出后仍有效 | 仍未解决,v1.14.0 未含,企业压力持续 |
| #34321/#34408 | Docker 硬编码密钥 | 部分进展:healthcheck PR 合入,密钥 scope 仍待确认 |
| #34448 | 索引 worker OOM | v1.14.0 未见合入,待跟踪 |
| #34631/#34632 | HITL WebApp bugs | HITL Service API 已上线,但具体 WebApp UX bug 状态仍需确认 |
| #35032 | File not JSON serializable | 状态不明,建议单独核查 |
升级注意事项(v1.13.3 → v1.14.0)
- Collaboration(自托管默认关闭):需额外设置 3 个环境变量 + WebSocket 服务器
- Celery:默认 worker 并发由 2 → 4,高负载环境需评估资源影响
- Python:CI 已移除 Python 3.11 支持,正式确立 3.12 为最低版本
- pnpm workspace:前端构建引入 pnpm workspace,自编译部署需注意
- Sandbox 路径(延续自 v1.13.3):仍需手动更新 Python / Node.js 路径配置
深度分析:v1.14.0 升级注意事项全景
综合 GitHub Issues、Discussions 及社区反馈整理,覆盖已知 bug、Breaking Changes 和社区踩坑实录。
坑 1:LLM 节点结构化输出(Structured Output)在 1.14.0 中静默失效
Issue: #35789 | 严重程度: 高 | 状态: 修复已合入 main,待 1.14.1 发布
现象:
- 升级到 1.14.0 后,启用了
structured_output_enabled: true的 LLM 节点,运行结果中structured_output字段消失 completion_tokens异常暴涨(示例:44 → 1036),因为模型不再受 JSON schema 约束- 对使用结构化输出做 JSON 解析的下游节点会直接崩链
根因(dosubot 确认):
# node_factory.py 中 Pydantic model_dump() 缺少 by_alias=True
# 导致内部字段名 structured_output_switch_on 无法映射回
# 公开别名 structured_output_enabled,配置被静默丢弃
修复:PR #35747,合并于 2026-04-30(1.14.0 发布同日),但部分 Docker 镜像未包含此修复。
临时方案:
# 重新拉取最新 1.14.0 镜像(fix 已合入 main)
docker compose pull
docker compose up -d
# 或等待 1.14.1 发布
坑 2:工作流版本历史右上角"恢复"按钮会清空草稿
Issue: #35790 | 严重程度: 高 | 状态: 未修复,无临时 patch
现象:
- 在未开启 Collaboration 模式的自托管环境(默认情况)中
- 打开版本历史,点击历史版本预览 → 点击右上角"Restore"按钮
- UI 显示恢复成功,但工作流画布变为空白,草稿被清空
根因:Collaboration PR #30781 引入的 useLeaderRestore hook 在非协作模式下走了错误的本地 apply 路径,而非调用正确的 REST API:
# 错误路径(右上角按钮):本地 apply preview 数据 → sync 到 draft
# 正确路径(右键菜单):POST /apps/{id}/workflows/{wf_id}/restore
临时方案(必须记住):
不要用右上角 Restore 按钮,改用版本条目的右键菜单 "..." → "Restore"
坑 3:PostgreSQL 服务名从 db 变更为 db_postgres(跨大版本升级必踩)
来源: Discussion #33271、Discussion #32890 | 影响版本: 1.11.x → 1.13.x/1.14.x
现象:
psycopg2.OperationalError: could not translate host name "db" to address: Temporary failure in name resolution
原因:PR #29092 将 PostgreSQL 容器名从 db 改为 db_postgres,同时引入 Docker Compose profiles 机制。
必须做的操作:
# 1. 更新 .env 文件
DB_HOST=db_postgres
DB_TYPE=postgresql
COMPOSE_PROFILES=${VECTOR_STORE:-weaviate},${DB_TYPE:-postgresql}
# 2. 启动时带上 profile
docker compose --profile postgresql up -d
# 3. 手动运行数据库迁移
docker compose exec api uv run flask db upgrade
坑 4:容器切换为非 root 用户(UID 1001),文件权限需手动修复
来源: Discussion #32890 及 dosubot 多处回复 | 影响版本: v1.10.1+(升级到 1.13.x/1.14.x 时仍会触发)
现象:容器无法读写 ./volumes/app/storage 目录,出现 Permission Denied 错误。
修复:
sudo chown -R 1001:1001 ./volumes/app/storage
坑 5:跨服务器迁移 volumes 时不能在线拷贝
来源: Discussion #32890 | 状态: 社区已证实
现象:将 PostgreSQL volumes 复制到新服务器后,出现断断续续的 Internal Server Error,db upgrade 时 CREATE INDEX 卡死。
根因:在数据库运行时拷贝 PostgreSQL 数据文件,事务日志和 checkpoint 处于不一致状态,虽然文件看起来完整,但内部状态已损坏。
正确操作流程:
# 1. 先停掉源服务器的 Dify
docker compose down # 在源服务器执行
# 2. 用 tar 拷贝(不要用 zip,zip 会破坏 Python venv 软链接)
tar -czf dify-volumes-backup.tar.gz ./volumes
# 3. 传输到目标服务器,解压
# 4. 在目标服务器启动
docker compose --profile postgresql up -d
# 5. 运行迁移
docker compose exec api uv run flask db upgrade
坑 6:Collaboration 功能自托管需配置 3 个额外环境变量(否则功能不生效)
来源: v1.14.0 Release Notes | 默认状态: 关闭
# 必须在 .env 中添加以下三项才能启用 Collaboration
ENABLE_COLLABORATION_MODE=true
SERVER_WORKER_CLASS=geventwebsocket.gunicorn.workers.GeventWebSocketWorker
NEXT_PUBLIC_SOCKET_URL=wss://your-dify-domain.com # 必须是 wss:// 或 ws://
运维影响:
- 引入 WebSocket 依赖,Nginx/反向代理需额外配置 WebSocket upgrade headers
- Worker 从 gevent 切换为 geventwebsocket,内存占用有所增加
- 不配置则 Collaboration 功能显示但不起作用,且可能影响右上角 Restore 按钮行为(见坑 2)
坑 7:Celery 默认并发从 2 提升至 4,资源消耗翻倍
来源: PR #33105 | 影响: 低内存自托管环境
Celery worker 默认并发数由 2 改为 4。对于内存受限(< 4GB)的自托管环境,可能导致 worker OOM。
# 如需恢复低内存配置,在 .env 中显式设置
CELERY_WORKER_CONCURRENCY=2
坑 8:Python 版本要求正式升至 3.12,Python 3.11 不再支持
来源: PR #34164(CI 移除 Python 3.11)、PR #34419(align Python support with 3.12)
如果你的自托管环境使用自定义 Python 环境或本地源码部署,必须将 Python 升级到 3.12+,否则 SQLAlchemy 2.0 相关代码可能无法正常运行。
坑 9:前端构建引入 pnpm workspace,自编译部署需更新构建命令
来源: PR #34241(引入 pnpm workspace)、PR #35488(workspace 级别 typecheck)
如果你有自编译前端的场景:
# 旧方式(已失效)
cd web && pnpm install && pnpm build
# 新方式(必须在根目录执行)
pnpm install # 统一安装所有 workspace packages
pnpm --filter web build
升级检查清单(1.13.x → 1.14.0)
| # | 检查项 | 是否必须 | 影响 |
|---|---|---|---|
| 1 | 重新拉取 Docker 镜像(获取 structured output 修复) | 必须 | 结构化输出静默失效 |
| 2 | 更新 DB_HOST=db_postgres + 启用 postgresql profile | 必须(如有旧配置) | 服务无法启动 |
| 3 | sudo chown -R 1001:1001 ./volumes/app/storage | 必须 | 文件读写失败 |
| 4 | 运行 docker compose exec api uv run flask db upgrade | 必须 | 数据不一致 |
| 5 | 评估 Celery 并发 4 的内存影响 | 低内存环境 | Worker OOM |
| 6 | Collaboration:配置 3 个 env var + 反向代理 WebSocket | 如需启用 | 功能不可用 |
| 7 | 避免右上角 Restore 按钮,用右键菜单代替 | 必须(直到 1.14.1) | 草稿清空 |
| 8 | 升级 Python 到 3.12(本地源码部署) | 本地编译 | 运行异常 |
| 9 | 使用 dify-env-sync.sh 合并新 env 变量 | 推荐 | 避免配置缺漏 |
# 推荐使用官方 env 同步脚本
bash docker/dify-env-sync.sh
社区踩坑实录汇总
| 来源 | 问题 | 解决方案 |
|---|---|---|
| GitHub Discussion #33271 | db_postgres 解析失败,1.11.x → 1.14.x | 更新 DB_HOST + COMPOSE_PROFILES |
| GitHub Discussion #32890 | 在线拷贝 volumes 导致 CREATE INDEX 卡死 | 停服再拷,用 tar 不用 zip |
| GitHub Issue #35789 | 结构化输出字段消失,token 暴涨 10x | 重新拉取最新 1.14.0 镜像 |
| GitHub Issue #35790 | 右上角 Restore 清空工作流草稿 | 改用右键菜单"..." → "Restore" |
| GitHub Issue #33282 | Question Classifier 升级后不工作(rc1) | 已在正式版修复 |
| 多处 | 升级后 Permission Denied | chown -R 1001:1001 ./volumes/app/storage |
上次摘要: W16(2026-04-14)| 本次摘要: W19(2026-05-05)