故障排查GitHub issue3 分钟阅读排错/错误码

修复FastGPT工作流多入口循环结构死锁无声结束问题

FastGPT v4.14.0及以上私有部署版本中,运行包含复杂循环拓扑的工作流时,会在极短时间(如160ms)内无声结束。此时后台无报错日志,工作流未达到maxRunTimes限制,接口直接返回。该问题通常出现在循环结构内部的节点同时接收来自外部(如IF/ELSE节点)的另一条连线的多入口循环结构场景。

现象

FastGPT v4.14.0及以上私有部署版本中,运行包含复杂循环拓扑的工作流时,会在极短时间(如160ms)内无声结束。此时后台无报错日志,工作流未达到maxRunTimes限制,接口直接返回。该问题通常出现在循环结构内部的节点同时接收来自外部(如IF/ELSE节点)的另一条连线的多入口循环结构场景。例如导入病史总结-4.json工作流文件并调试运行时,仅会执行判断器及少量后续节点,随后工作流瞬间结束;若将循环内部节点的外部多余入口剥离,工作流即可正常执行。

可能原因

该问题由引擎底层死锁导致,根因位于packages/global/core/workflow/runtime/utils.tssplitNodeEdges函数。在进行DFS深度优先遍历时,若一条连线同时满足两个条件:一是可追溯到起点节点(触发isStartNode),二是处于循环结构上(指向自身节点),当前逻辑会错误将其归类为“常规连线”(commonEdges)。后续在checkNodeRunStatus状态判定环节,这条被错误归类的循环连线仍处于waiting状态,导致目标节点无限期处于wait状态,最终引发调度队列清空,工作流异常结束。

排查步骤

  1. 确认当前使用的FastGPT版本为v4.14.0及以上的私有部署版本。
  2. 导入复现用的工作流文件(如病史总结-4.json),通过工作流调试功能运行,观察是否在极短时间内无声结束,且后台无报错日志。
  3. 检查工作流的节点连线结构,确认是否存在循环内部节点同时接收外部(如IF/ELSE节点)连线的多入口循环结构。
  4. 临时剥离循环节点的外部多余入口,验证工作流是否能正常执行,辅助定位问题是否由该多入口结构引发。

解决与验证

解决该问题需要修正splitNodeEdges函数的逻辑,正确区分循环连线与常规连线,避免将循环结构的连线错误归类。验证步骤如下:1. 完成代码修复后重新部署FastGPT服务。2. 导入原复现用的工作流文件,运行工作流,确认不再出现极短时间内无声结束的情况。3. 查看工作流执行日志,确认流程可正常执行至结束,未出现死锁异常。

来源:https://github.com/labring/FastGPT/issues/6596