Dify 近期动态(W17–W19)

33 阅读12分钟

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 /v1 URL 导致 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.2dify_graph 独立打包为 graphon,解耦 API 内核
  • 前端 UI@langgenius/dify-ui 共享设计原语(PreviewCard、Meter);Goto Anything 增强;Prompt Editor 斜杠变量过滤;react-syntax-highlighter 替换为 shiki

v1.14.0 四大亮点


热门话题

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.0Stable2026-04-28Collaboration、HITL API、跨 App 复制节点、安全修复

本期(3 周)1 次正式发布,发版节奏有所放缓(v1.13.x 几乎每周一个 patch),集中精力交付 1.14.0 milestone。post-release 38 commits 已在 main 堆积,预计短期内会有 v1.14.x patch。


Carry-over 状态更新

#标题状态变化
#31794access token 退出后仍有效仍未解决,v1.14.0 未含,企业压力持续
#34321/#34408Docker 硬编码密钥部分进展:healthcheck PR 合入,密钥 scope 仍待确认
#34448索引 worker OOMv1.14.0 未见合入,待跟踪
#34631/#34632HITL WebApp bugsHITL Service API 已上线,但具体 WebApp UX bug 状态仍需确认
#35032File not JSON serializable状态不明,建议单独核查

升级注意事项(v1.13.3 → v1.14.0)

  1. Collaboration(自托管默认关闭):需额外设置 3 个环境变量 + WebSocket 服务器
  2. Celery:默认 worker 并发由 2 → 4,高负载环境需评估资源影响
  3. Python:CI 已移除 Python 3.11 支持,正式确立 3.12 为最低版本
  4. pnpm workspace:前端构建引入 pnpm workspace,自编译部署需注意
  5. 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 #33271Discussion #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 upgradeCREATE 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必须(如有旧配置)服务无法启动
3sudo chown -R 1001:1001 ./volumes/app/storage必须文件读写失败
4运行 docker compose exec api uv run flask db upgrade必须数据不一致
5评估 Celery 并发 4 的内存影响低内存环境Worker OOM
6Collaboration:配置 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 #33271db_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 #33282Question Classifier 升级后不工作(rc1)已在正式版修复
多处升级后 Permission Deniedchown -R 1001:1001 ./volumes/app/storage

上次摘要: W16(2026-04-14)| 本次摘要: W19(2026-05-05)