TypeError: Cannot read properties of undefined (reading ‘tracing’)

该报错出现在 Dify 1.13.0 的 Chatflow 工作流调试或运行场景,由于 SSE 流中 `workflow_started` 事件因 Redis Pub/Sub 竞争条件被丢弃,前端收到不完整的事件流后抛出 `TypeError: Cannot read properties of u

快速结论:该报错出现在 Dify 1.13.0 的 Chatflow 工作流调试或运行场景,由于 SSE 流中 `workflow_started` 事件因 Redis Pub/Sub 竞争条件被丢弃,前端收到不完整的事件流后抛出 `TypeError: Cannot read properties of undefined (reading ‘tracing’)`。优先排查 API 与 Worker 分离部署下的 Redis 订阅时序,或升级到包含修复的版本。

适用环境:Dify 1.13.0,Self Hosted(Kubernetes 或 Docker Compose),dify-api 与 dify-worker 分离部署,使用 Advanced Chat (Chatflow) 应用。

最快修复方案:暂无确认的一步修复方案。Issue 中已定位根因,修复需等待官方 PR 合并并发布新版本;在此之前可尝试降低 Redis 网络延迟或减少 API/Worker 负载以降低触发概率。

注意事项:后端工作流实际执行成功,LLM 响应正常,仅 SSE 流前几个事件丢失,因此问题不影响后端任务完成,仅影响前端事件渲染;该问题为间歇性,负载越高越易复现。

问题场景

在 Dify v1.13.0 中以 Self Hosted(Kubernetes)方式部署,dify-api 和 dify-worker 作为独立 Pod 运行。创建 Advanced Chat(Chatflow)应用,工作流包含 LLM 和工具节点等非平凡逻辑。在 workflow 编辑器中点击 “Preview” 打开调试聊天面板并发送消息时,SSE 流中 `workflow_started` 事件被静默丢弃,前端收到的事件流从 `node_finished` 或更晚的事件开始,导致浏览器报错并显示 “Application error: a client-side exception has occurred”。

报错原文

TypeError: Cannot read properties of undefined (reading 'tracing')

Application error: a client-side exception has occurred

原因分析

根本原因是 api/services/app_generate_service.py_build_streaming_task_on_subscribe() 方法存在竞争条件(race condition)。该方法使用一个 200ms 的 fallback 定时器来兜底启动 Celery 任务,但定时器可能在 API 服务器成功订阅 Redis Pub/Sub 主题(stream_topic_events())之前就触发了。时序如下:

  1. 定时器在 200ms 时触发,dify-worker 中的 Celery 任务开始执行;
  2. Worker 立即向 Redis 主题发布 workflow_started 事件;
  3. API 服务器尚未完成订阅,该消息丢失(Redis Pub/Sub 为 “at most once” 模式);
  4. API 完成订阅后,on_subscribe() 回调触发,但任务已启动,API 只能接收到订阅之后发布的事件,workflow_started 已经丢失。

高 Redis/网络延迟(容器化环境中常见)、Gunicorn/gevent worker 资源竞争会加剧该问题。Issue 评论中还提到 v1.13.0(Docker Compose)下存在频繁的 message_end 事件丢失问题,可能涉及同一代码路径。

环境排查

  • 确认 Dify 版本为 1.13.0(docker compose ps 或 helm 查看镜像 tag);
  • 确认 dify-api 和 dify-worker 是否为独立部署(独立 Pod/容器);
  • 检查 Redis 网络延迟:redis-cli ping 的 RTT 是否偏高;
  • 确认使用了 Advanced Chat(Chatflow)应用类型;
  • 确认工作流中包含 LLM 节点和工具节点等非平凡逻辑(简单工作流不易复现);
  • 检查系统负载:高负载下复现率显著提升(>50%),低负载可能需要 10-20 次尝试才能复现。

解决步骤

  1. 确认 Dify 是否已发布修复版本(关注官方 Release 或 PR 合并状态)。虽然 Issue 中未明确新版版本号,但修复已定位到 _build_streaming_task_on_subscribe() 方法,可优先升级尝试。
  2. 若无法升级,作为临时缓解措施,可尝试降低 Redis 与 API/Worker 之间的网络延迟(例如确保 Redis 与 Dify 服务在同一可用区内)。可优先尝试。
  3. 降低系统负载或增加 worker 资源(但 Issue 中未验证,属于推测性缓解)。
  4. 如条件允许,考虑将 dify-api 与 dify-worker 合并部署(不分离),减少跨进程时序问题。可优先尝试。
  5. 若问题严重影响使用,可在 GitHub Issue 中补充复现信息,帮助维护团队加速修复。

验证方法

在修复后的环境中,重复打开 Chatflow 调试面板并发送消息,观察浏览器网络面板中 SSE 流的第一个事件是否为 workflow_started。前端不再出现 “Application error” 错误,工作流执行进度能正常渲染。若后端已完成任务但仍复现前端崩溃,则说明问题未完全解决。

参考来源

langgenius/dify #32518

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 18940

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注