快速结论:该报错发生在 Dify Chatflow(高级聊天)应用开启输入审核(Input Moderation)后,用户输入触发审核规则时,流式响应未按预期正常关闭。优先排查 _handle_stop_event 中 _workflow_run_id 是否为空,以及 _save_message 或 _message_end_to_stream_response() 在输出异常时的处理逻辑。
适用环境:Dify Cloud 版(latest 版本);Chatflow 聊天流应用;启用了输入审核功能。
最快修复方案:暂无确认的一步修复方案。当前 Issue 已关闭,但需根据服务端日志中的实际异常堆栈定位具体失败位置。
注意事项:核心问题可能出现在消息保存或流式响应结束时状态不一致;若尚未定位根因,建议先严格复现并收集服务端异常日志。
问题场景
在 Dify 的 Chatflow(高级聊天)应用中,用户开启输入审核(Input Moderation)功能后,输入会触发审核规则的内容。此时,系统应正常结束流式响应,但实际表现为流以异常方式中断,服务端抛出错误。该问题在 Dify Cloud 版(latest)上可稳定复现。
报错原文
Stream is not closed properly when moderation rule hits.
原因分析
根据 Issue 中的代码追踪,当输入审核触发 ModerationError 时,runner 的 handle_input_moderation 会调用 _complete_with_stream_output,先发布 QueueTextChunkEvent(包含审核提示消息),随后发布 QueueStopEvent(stopped_by=INPUT_MODERATION)。
在 pipeline 侧的 _handle_stop_event 中,由于审核发生在工作流启动之前,_workflow_run_id 仍为空字符串,因此代码会进入 elif INPUT_MODERATION 分支,调用 _save_message(session=session)(未携带 graph_runtime_state)并输出 _message_end_to_stream_response()。理论上游标应能正常关闭,但实际异常可能发生在 _save_message 或 _message_end_to_stream_response() 期间——例如:metadata 或消息记录本身的状态因为工作流从未运行而不符合预期。
可能原因:在审核拦截路径中,消息保存或流结束阶段的某些状态(如 metadata、消息记录)未按正常流程初始化,导致二次异常抛出。此外,QueueTextChunkEvent 的处理函数调用 _handle_output_moderation_chunk(delta_text)(输出审核处理器),虽然不会对输入审核产生实际影响,但会走一遍该代码路径,也可能间接影响状态。
环境排查
- 确认 Dify 版本是否为 latest(当前 Issue 在 Cloud 版复现)。
- 检查服务端日志中
_handle_stop_event、_save_message、_message_end_to_stream_response相关调用是否抛出异常。 - 若自行部署,检查 Python 环境、Dify API 容器日志中的 traceback 堆栈信息。
- 确认 Chatflow 应用是否正确配置了输入审核(Input Moderation)规则。
解决步骤
- 收集异常堆栈:复现触发审核的操作后,从服务端日志中提取完整的 traceback,定位具体报错文件与行号,重点检查
generate_task_pipeline.py中_handle_stop_event分支(L784-L793)和app_runner.py的handle_input_moderation/_complete_with_stream_output(L294-L341)。 - 检查消息保存逻辑:确认
_save_message(session=session)在未传入graph_runtime_state时,是否对metadata等字段进行了空值处理。可优先尝试在保存前增加状态初始化或判空保护。 - 检查流结束函数:核对
_message_end_to_stream_response()的返回值是否符合 SSE 格式预期,并确认QueueStopEvent是否被_process_stream_response正确识别为终止事件(L1023-L1025)。 - 验证输出审核处理:虽然输入审核不应调用输出审核路径,但可确认
output_moderation_handler在未设置时是否会引发副作用。 - 临时规避:如无法立即定位根因,可在应用侧关闭输入审核功能,或调整审核规则避免触发,以作为临时规避方案。
验证方法
修复后,重新开启输入审核并输入触发规则的内容;确认服务端日志不再出现异常堆栈,客户端流式响应能够在审核提示后正常结束(收到完整的流结束标记,而非连接中断或异常报错)。同时,可在 Chatflow 中检查该消息记录是否正常保存且无报错。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


![[Bug] All models hang on GB300 (SM103) with FlashInfer 0.6.7](https://www.chat-gpts.plus/wp-content/uploads/2026/08/38729-54a22b97-768x403.jpg)