Article
一个 If 节点引发的灾难,去年折腾到今年:在 n8n 节点路径上踩到最隐蔽的坑
实践 n8n 已经整整一个月了。从需求出发,一开始在旧手机上部署实现发送 WIFI 公网IP到飞书群的小工作流。随着了解的深入,玩法也升了级,就想用 n8n 流程来实现高清YouTube 视频的下载,只需在飞书上发一句自然语言的消息就把视频下好了,还能在多维表格查看下载历史。
这套流程用 yt-dlp 实现下载,需要用到 Python Code 节点,事情也从这里开始变得复杂,期间遇到了各种问题。上一篇我们处理了节点的超时问题后,不管多大的视频,我们都能顺利的下载。而这一篇,我们关注一个更隐蔽的问题:节点的“数据丢失”问题。
问题与处理
先描述下问题现象。飞书发送请求后,If 节点判断消息中是否包含URL,如果包括URL就清理历史,然后结合消息历史执行 AI Agent,解析出URL和指令,选择不同的工具 Tool 完成任务。
当消息包含 URL 时,AI Agent 执行没问题。
但是,消息不包含 URL,需要结合历史来执行 Tool 时,问题就出现了,Tool 执行完,继续调用 AI Agent,执行到 Memory 节点就直接报错:Key parameter is empty,也就是说,在解析 Memory 的 Key 表达式时失败了,拿不到前置节点数据。


失之毫厘谬以千里。
先给问题解决方式,或者更准确地说规避方式:确保流入 AI Agent 只有一个前置节点。

至于为什么?咱们接下来说。
好了,下面进入贴图时刻。如果你也对细节和调试过程感兴趣,咱们就一起再来一把文字 DEBUG 吧。
环境折腾
为给予挑落问题圣杯时的雀跃,把环境折腾个遍,也许是解决问题的一个必经之路。
这个问题,从去年底也跟着我跨年到了今年。
我怀疑过各种,尝试过各种:从手机到 Docker,再到 WSL VSCode 的开发环境,版本也更新到最新的 n8n@2.2.5。
当然,从最终解决问题后回看,这些折腾都是加分项。期间折腾的 internal 模式的 python 本地部署,让自己现在调试起来就更简单和顺手。
注意:WSL 必须把代码放内部系统,跨文件系统访问会很慢很慢。
思维误判
在很长一段时间内,我一直认为获取不到数据是节点输出的问题,于是排查问题围绕着节点执行路径顺序去理解,我自以为数据都是从前一个节点中获取的,一直在找节点输出是不是有问题。
为此,调整了 AI Agent 的格式化输出,换成子流程去执行等,最后发现都没用,问题依旧。
实际排查的方向是完全错的。好在,走的路都算数,在不断地修正着。
症结:是 BUG,还是约束?
昨天,把开发环境调顺了,开发环境的服务瞬间启动,老报错的日志也理解了。有条不紊。
今天,排查输出的时刻,发现报错前后 If 节点的数据不同。这让我心头一紧,又转而为一阵欣喜,感觉路在前方,曙光乍现。

正常:previousNodeOutput 有值的情况

异常可能:previousNodeOutput 没值的情况
这个不同,根源在哪里呢?
在深入追踪的过程中,条件断点打到飞起。从 Express 表达式解析的 WorkflowDataProxy,到执行上下文 ExecuteContext,再到 WorkflowExecute。

今天,把一切都准备好了,然后静下心来调试,感觉效率还是蛮高的。
Workflow 执行数据都是正确的。
正常情况,前一个节点执行后,会把后续节点添加到执行队列。节点和数据索引都来自真实结果,是没有问题。

但是,问题出在 EngineRequest 的处理上。
在处理 AI Agent Tool 执行后的 EngineRequest 时,添加任务时暴力的直接把前置节点设置成了0号输出。这样就看到前面的 previousNodeOutput 为 undefined 的情况。
这算是 BUG 一枚吧,但硬说这是设计约束,也勉强行吧。

处理 EngineRequest

暴力设置为前置0号数据

typescript的0也是false
到这里,问题已经很清楚了:
AI Agent Tool 执行后的 EngineRequest,不管不顾,直接从前置节点0号输出拿数据。
所以,只要保证 AI Agent 就一个输入,就绕过这个问题了。
写在最后
失之毫厘谬以千里。就这么一个小小的节点,困扰了我整整两个星期。
这次经历,算是定位BUG和解决问题,也是一次和 n8n 这个开源软件的深度碰撞,撞出了火花。对 n8n 有了更感性的来自代码层面的了解。
路虽绕,好在,最后还是走通了。
你来说说,这算是BUG吧?!
Related
Related posts
-
OpenClaw v2026.3.28 升级踩坑(含飞书 / 微信)
2026-03-31
-
从一个视频到一个合集:n8n + YouTube合集批量自动下载
2026-01-16
-
重构:使用 n8n+飞书 重写视频下载小工具,直接上链接
2026-01-13
-
被 n8n 任务 60s 超时反复折磨后的排查记录:从报错、堆栈到源码,理清 TASK_TIMEOUT 的真实用途与位置
2026-01-10