
Working outside of application context.
快速结论:该报错通常出现在 Dify 工作流中使用并行迭代节点(Parallel Iteration)时,内部 LLM 节点在子线程中丢失了 Flask 应用上下文。优先检查工作流中的迭代节点是否开启了并行模式,并尝试关闭并行。
问题场景
用户在使用 Dify 自托管(Docker)版本 1.15.0 时,导入 DSL 工作流文件并运行。工作流中包含一个迭代节点(Iteration node),其配置为 is_parallel: true(并行模式)且 parallel_nums: 10(并行数为10),迭代内部执行了一个 LLM 节点。触发报错后,工作流中有一个节点运行异常。
报错原文
Working outside of application context.
This typically means that you attempted to use functionality that needed
the current application. To solve this, set up an application context
with app.app_context(). See the documentation for more information.
There are 1 nodes in the process running abnormally, please go to [TRACING](https://console-platform-dev-aks.dify.dev/app/0bdba5d6-1472-4501-95e7-582339d719b2/workflow#tracing) to check the logs.
原因分析
这是 Dify 工作流引擎中一个已知的 Bug 类别。当 LLM 节点在并行迭代的子线程中运行时,工作线程会丢失 Flask 应用上下文(Application Context),导致上述错误。已有多个 PR 逐步修复了此问题,包括通过 preserve_flask_contexts() 工具函数、框架无关的 capture_current_context() 上下文系统、线程本地上下文隔离以及数据库会话迁移等方法。但在 v1.15.0 版本中,可能仍存在 GraphEngine 工作线程上下文传播的遗留缺口。
环境排查
- Dify 版本:1.15.0(确认是否为问题版本,需关注后续补丁版本)
- 部署方式:Self Hosted(Docker)
- 工作流配置:检查迭代节点是否设置了
is_parallel: true以及parallel_nums数值 - 请检查工作流中所有节点的日志,特别是通过 TRACING 链接查看完整堆栈信息
解决步骤
- 临时绕过方案(可优先尝试):关闭迭代节点的并行模式。在迭代节点的配置中,将
is_parallel设置为false,这会使迭代以串行方式运行,从而避免上下文丢失问题。 - 确认版本修复:检查你的 Dify 版本是否已包含相关修复 PR,例如:
- PR #26098:修复并行迭代中 LLM 节点丢失 Flask 上下文(引入了
preserve_flask_contexts()) - PR #30607:引入框架无关的上下文系统(
capture_current_context()) - PR #31410:添加线程本地上下文隔离
- PR #35855:迁移数据库会话处理以支持线程上下文
如果版本较旧,升级到包含这些修复的较新版本。
- PR #26098:修复并行迭代中 LLM 节点丢失 Flask 上下文(引入了
- 收集完整堆栈信息:打开报错信息中提供的 TRACING 链接,查看该异常节点的完整日志和堆栈跟踪,以定位具体是哪条代码路径丢失了上下文。将日志提供给开发者或用于进一步排查。
- 简化工作流测试:创建一个最小化工作流来隔离问题,例如仅包含一个简单的迭代节点(不开并行)和一个 LLM 节点,确认问题是否仍然存在,以排除其他工作流节点的干扰。
验证方法
关闭并行模式后重新运行工作流,确认不再出现 Working outside of application context. 错误。如果升级了 Dify 版本,重新导入 DSL 并用并行模式测试,验证问题是否已修复。同时检查 TRACING 日志中该节点是否有正常运行的输出。

![[分享发现] 为什么现在的 AI 回复第一句都是 “xxx 不是 xxx,而是 xxx 的对比句”?](https://www.chat-gpts.plus/wp-content/uploads/2026/07/ai_cover_5-86-768x403.jpg)

