Chatflow hangs on non-existing conversation id

用户在 Dify Cloud 或自托管环境(v1.13.0 及以上版本)中,通过 cURL 或编程方式调用 chat-messages API,并手动修改 conversation_id 为一个不存在的 ID 时触发。该问题涉及 Chatflow、Workflow 以及 Celery 异步任务执行。

Chatflow hangs on non-existing conversation id

Chatflow hangs on non-existing conversation id

快速结论:该问题在 Dify Cloud 和 v1.13.0 及以上版本自托管环境中出现。当 API 请求传入一个不存在的 conversation_id 时,连接会挂起并无限期等待,仅收到 ping 事件。优先排查 API 调用中传递的 conversation_id 是否有效,或检查 Dify 版本是否在 v1.13.0 至 v1.14.2 之间。

问题场景

用户在 Dify Cloud 或自托管环境(v1.13.0 及以上版本)中,通过 cURL 或编程方式调用 chat-messages API,并手动修改 conversation_id 为一个不存在的 ID 时触发。该问题涉及 Chatflow、Workflow 以及 Celery 异步任务执行。

报错原文

No explicit error is returned.
The request hangs with only ping events received.
ConversationNotExistsError is raised inside Celery worker but never propagated back to SSE client.

原因分析

该问题是 v1.13.0 引入的已知回归问题。在 v1.13.0 中,Advanced Chat/Workflow 的执行被迁移至 Celery 异步 Worker。当 API 接收到一个不存在的 conversation_id 时,系统在验证对话之前就返回了 HTTP 200 并打开了 SSE(Server-Sent Events)流。随后,ConversationNotExistsError 错误在 Celery Worker 内部被抛出,但该错误未能回传给 SSE 客户端,导致连接无限期挂起。

环境排查

  • Dify 版本:v1.13.0、v1.14.0、v1.14.1、v1.14.2(所有版本均受影响)。
  • 运行环境:Dify Cloud 或自托管。
  • 组件:Celey 异步 Worker、SSE(Server-Sent Events)流。
  • API 端点:chat-messages API。

解决步骤

  1. 验证 conversation_id 的有效性(可优先尝试):在调用 API 之前,确保传入的 conversation_id 确实存在于系统中。
  2. 启动新对话(可优先尝试):如果需要开始新对话,传递空值或 null 作为 conversation_id,而非不存在的 ID。
  3. 检查修复状态:参考 PR #33274,该 PR 目标修复此问题,但截至 Issue 关闭时尚未合并。请关注该 PR 的合并状态,或在后续版本中检查是否已合并。
  4. 降级(如可接受):如果问题严重影响使用,考虑将自托管环境暂时降级至 v1.12.x 或更早版本,此版本不受该问题影响。

验证方法

使用不存在的 conversation_id 发送请求到 chat-messages API,预期应返回 4xx 错误响应,而非无限期挂起。如果修复或工作区已应用,连接应会以错误码终止。

参考来源

langgenius/dify #37197

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

celebrityanime
celebrityanime
文章: 9946

发表回复

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