Dify 版本追踪 — 2026-W10

0 阅读7分钟

覆盖时间:2026-02-24 → 2026-03-03
数据来源:GitHub Issues / PRs / Releases · HN · Reddit r/LocalLLaMA


🚀 发版动态

版本状态时间摘要
v1.14.0-rc1Pre-release~2週前发布Agent × Skills、Skill Editor、Sandbox、协作 Beta — 本周无新版本
v1.13.0✅ 最新稳定版约3週前Human-in-the-Loop + Celery 架构,当前推荐自部署版本

⚠️ 本周要点:1.14.0 稳定版仍未发布。RC1 期间暴露出 CORS bug(#32816),正式版发布节奏可能进一步推迟。


🐛 Bug 报告(本周新增)

#标题严重程度状态
#328161.14.0-rc1:Skill 创建 CORS 到 api:5001 失败,产生幽灵记录后编辑时 500 FileNotFoundError🔴 高Open (RC1 专属)
#32870Tongyi 插件 v0.1.30 空闲时 plugin_daemon CPU 占用 65%+🟠 中Open
#32856Chatflow API 中 MessageEnd 事件丢失🟠 中Open
#32850Workflow/Chatflow 恢复时 workflow_runs.started_at 字段被覆盖🟠 中Open(PR #32851 修复中)
#32839v1.13.0:Chatflow 注释回复在输出响应后卡在 loading 状态🟡 低Open
#32837通过 API 上传文档后 /datasets 页面崩溃🟡 低Open
#32864输入包含图片时知识库检索结果为空🟠 中Open
#32867Notion MCP 工具调用失败🟡 低Open

🔨 重构 / 架构进展

🌊 dify_graph 大迁移(本周主线)

背景:什么是 dify_graph?

dify_graph 是 Dify 后端正在构建的新一代图执行引擎包,目标是将所有与工作流/Agent 图执行相关的代码集中到一个结构清晰、边界明确的顶层包中,取代原来散落在 api/core/ 各子模块的组织方式。这一重构的驱动力有三:

  1. 可测试性 — 消除模块间对 dify_config(全局配置)的隐式依赖,改为显式注入,便于单元测试
  2. 可维护性 — 用 import-linter 合约强制执行模块边界,防止循环依赖蔓延
  3. 为 Agent × Skills 铺路 — 1.14.0 引入的 Skill Editor、Sandbox、协作等功能需要更稳固的图执行基础

已完成的迁移(本周合并)

PR迁移内容规模状态
#32844api/core/workflowapi/dify_graph/workflowL✅ 已合并
#32858api/core/model_runtimeapi/dify_graph/model_runtimeL✅ 已合并

#32858 的迁移影响面可见一斑:552 行新增 + 584 行删除,涉及后端数十个文件的 import 路径从 core.model_runtimedify_graph.model_runtime。同时移除了已经冗余的 model-runtime-no-internal-imports import-linter 合约,更新了 .github/CODEOWNERSapi/.ruff.tomlapi/.importlinter

进行中的迁移

PR内容状态
#32873统一 workflow 中 invoke 和 user 枚举的来源Open (4/5 任务)
#32780统一 NodeConfigDict.dataBaseNodeData(消除双重数据结构)Draft (3/5 任务)

#32780 是迁移中技术含量最高的部分——当前节点配置在 NodeConfigDict.data(TypedDict)和 BaseNodeData(Pydantic)两套数据结构之间存在重复,统一后可消除大量序列化/反序列化样板代码。

对插件开发者和贡献者的影响

  • 插件开发者(目前) :RC1 的插件 SDK 尚未受影响,dify_graph 不是对外 API 的一部分
  • 自托管贡献者:如果你 fork 了仓库并做了自定义修改,注意 core.model_runtimecore.workflow 的 import 路径已失效,需更换为 dify_graph.*
  • 时间线预判:按当前迁移节奏,dify_graph 整合预计在 1.14.0 正式版或 1.15.0 里程碑前基本成形

✅ HTTP 请求节点重构落地(Watch Item 关闭)

PR标题状态
#32365refactor(workflow): inject http request node config through factories and defaults已合并 (上周)

此 PR 将 HTTP 请求节点的配置(SSL 验证、超时、重试等)从直接读取全局 dify_config 改为通过工厂模式注入,引入 HttpRequestNodeConfig dataclass。这是 #26531(SSL 禁用不生效)问题的根本架构修复。


⚡ 性能优化

PR标题状态
#32847perf: optimize dataset api query speed✅ 已合并
#32851fix(api): fix workflow_runs.started_at overwritten while resumingOpen (LGTM, 待合并)

🧪 测试 / 工程质量

本周测试 PR 密度持续高位(延续 W08 的测试冲刺):

PR覆盖范围规模
#32859base UI 原始组件单元测试XXL
#32648api/services: retention、enterprise、plugin 测试XXL
#32512core token buffer memory + model runtimeXXL
#32577core helper folder 剩余单元测试XL

💡 新功能请求 / 社区需求

#标题优先级感知
#32831HITL 的 Service API 支持(hjlarry 提出,内部团队成员)🔥 高关注
#32817Endpoint plugin 支持 handler 返回 HTTP 响应后的 async session 续期🟡 中
#32827开发环境增加 Celery concurrency 配置(QuantumGhost 提出)🟡 中
#32868Chat App 的 Description 在用户界面可见🟡 中
#32829Hologres 向量 + 全文检索数据库集成🟡 中

📋 Good First Issues(本周新开)

适合新贡献者上手:

#标题
#32863[Refactor] migrate to TypedDict
#32860[Refactor] use db_session_with_containers in containers test
#32855[Refactor] add TypedDict related prompt to AGENTS.md

📊 关注项追踪(Watch Items 更新)

项目上周状态本周进展
1.14.0 正式版发布进度RC1 发布中❌ 未发布,RC1 暴露 CORS bug (#32816),推迟概率增加
HTTP 请求节点重构 PR #32365Draft 审核中已合并 — 配置 DI 注入完成,架构修复落地
Human-in-the-Loop 用户反馈1.13.0 发布后观察中🆕 #32831 提出 HITL Service API 需求,社区关注上升
类型注解重构 good-first-issue 批次进行中➕ 本周新增 TypedDict 迁移三个 good-first-issue
workflow_runs.started_at 覆盖 BugN/A(新发现)🆕 #32850 新发现,PR #32851 修复中(已获 LGTM)

🛡️ 1.14.0-rc1 部署踩坑指南

以下均基于 #32816 社区反馈整理。RC1 仅建议非生产环境使用。


坑一:Skill 创建时 CORS 错误(前端直调 http://api:5001

现象:在浏览器控制台看到如下报错,Skill 创建 UI 提示失败:

Access to XMLHttpRequest at 'http://api:5001/files/storage-files/...' has been blocked by CORS policy
net::ERR_FAILED

根因:RC1 的文件上传逻辑将 FILES_URL 直接暴露给浏览器端,而默认值是 Docker 内部主机名 http://api:5001,浏览器无法访问。

修复:在 .env 中显式设置面向浏览器的外部 URL(替换为你的实际 IP 或域名):

CONSOLE_API_URL=http://your-external-ip-or-domain
APP_API_URL=http://your-external-ip-or-domain
FILES_URL=http://your-external-ip-or-domain:5001
INTERNAL_FILES_URL=http://api:5001   # 保持内部地址

# 同时放开 CORS
WEB_API_CORS_ALLOW_ORIGINS=*
CONSOLE_CORS_ALLOW_ORIGINS=*

同时确认 docker-compose.yamlapi 服务暴露了 5001 端口:

services:
  api:
    ports:
      - "5001:5001"

⚠️ 即使按上述配置,部分用户报告仍失败(#32816 评论),说明 rc1 内还有其他代码路径未修复,官方正排查中。


坑二:Skill 创建失败后留下「幽灵记录」

现象:Skill 创建失败,但 Skill 列表中仍出现该条目;点击编辑触发 500 FileNotFoundError

File "/app/api/services/app_asset_service.py", line 226, in get_file_content
    return asset_storage.load_once(key)
  File "/app/api/extensions/storage/opendal_storage.py", line 49, in load_once
    raise FileNotFoundError: File not found

根因:Skill 创建时先写 DB 记录,再写 skill.md 文件;文件写入失败时 DB 事务未回滚。修复 PR(#31829#31805)已存在但未合入 rc1

临时处理:手动从数据库删除孤立记录(agent_skills 或对应表)。


坑三:点击 Skill 后报 WebSocket 配置错误

现象:点击已创建的 Skill,API 日志报:

The gevent-websocket server is not configured appropriately

根因:RC1 协作功能依赖 WebSocket,但默认 Docker Compose 未设置对应 Gunicorn worker 类。

临时修复:在 docker-compose.yamlapi service 中添加环境变量:

services:
  api:
    environment:
      SERVER_WORKER_CLASS: geventwebsocket.gunicorn.workers.GeventWebSocketWorker

坑四:必须从 feat/support-agent-sandbox 分支部署

RC1 的所有 Agent/Skill 功能均在 feat/support-agent-sandbox 分支,不在 main。Docker Compose 升级步骤:

git checkout feat/support-agent-sandbox
cd docker && docker compose down
docker compose up -d

坑五:沿用 1.13.0 升级陷阱(仍有效)

从 1.12.x 升级时需确保 Celery 配置包含新增队列:

  • workflow_based_app_execution(HITL 恢复必须)
  • api_token(如开启 ENABLE_API_TOKEN_LAST_USED_UPDATE_TASK=true


ℹ️ 升级提示

维持 v1.13.0 部署的用户:

  • 注意新发现的 workflow_runs.started_at 覆盖 bug(#32850),影响 HITL 恢复后的时间戳记录精度
  • PR #32851 修复已获 LGTM,预计下个 patch 版本或 RC2 中包含

尝鲜 v1.14.0-rc1 的用户:

  • 参考上方「部署踩坑指南」逐项检查
  • 仅建议用于非生产环境评估