跳到正文
W Winse Blog
automation 1 min read

一个 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吧?!

在 GitHub 上讨论

欢迎通过 GitHub Issue 留言或反馈。每条讨论都会关联到对应文章的源文件路径。

2026-01-11-一个-If-节点引发的灾难,去年折腾到今年:在-n8n-节点路径上踩到最隐蔽的坑.md

Related posts