Qdrant Vector Store fails with Qdrant 1.19.x because bundled @qdrant/js-client-rest is outdated

这是 n8n 内置 Qdrant Vector Store 节点在 Node.js 26 环境下连接 Qdrant Server 1.19.x 时的兼容性问题:节点打包的 @qdrant/js-client-rest@^1.16.2 依赖 undici v6,与 Node 26 内置的 undici

快速结论:这是 n8n 内置 Qdrant Vector Store 节点在 Node.js 26 环境下连接 Qdrant Server 1.19.x 时的兼容性问题:节点打包的 @qdrant/js-client-rest@^1.16.2 依赖 undici v6,与 Node 26 内置的 undici v8 调度器不匹配,连接在发起阶段就被拒绝,n8n 只显示通用的 fetch failed

适用环境:Issue 已确认的环境为 n8n 2.37.10、docker 自托管、Node.js 26.5.1、Postgres、Qdrant Server 1.19.x。修复版本为 n8n 2.39.5 / 2.39.6(已内置 @qdrant/js-client-rest@^1.19.0);n8n 2.38.2 仍锁定 ^1.16.2

最快修复方案:升级 n8n 到 2.39.x(至少 2.39.5 / 2.39.6),该版本已把内置的 Qdrant 客户端升级到 ^1.19.0,修复随该版本发布。

注意事项:临时把 Qdrant 客户端版本手动覆盖到 1.19.x 属于社区推测做法,Issue 中未验证,可优先尝试但需自行验证;不要指望通过客户端兼容性开关(如关闭兼容性检查)来绕过 fetch failed,因为该检查只打印警告、不会阻断或抛出。此外,若仍运行 n8n 2.38.2 及更早版本,升级到 2.39.x 前的旧构建仍会复现。

问题场景

在 n8n(2.37.10,docker 自托管,Node.js 26.5.1)中使用内置的 Qdrant Vector Store 节点连接 Qdrant Server 1.19.x 时触发。同一套 Qdrant URL 和凭据在官方社区节点 n8n-nodes-qdrant 中可以正常列出 collection 并执行 Get Collection,但内置节点在加载 collection 下拉列表时即报错,手动填写 collection 名称后执行节点同样失败。该环境在 Qdrant 服务端版本领先于 n8n 内置客户端之前长期工作正常。

报错原文

Could not load list
fetch failed

fetch failed

原因分析

最终定位到的根因是依赖内部的调度器(dispatcher)大版本不匹配,而不是 Qdrant 客户端的版本兼容性检查:

  • n8n 内置节点打包的 @qdrant/js-client-rest@1.16.2 依赖 undici: ^6.0.0
  • Node.js 26 内置的是 undici 8,已移除旧的 handler 包装层。把 v6 dispatcher 交给全局 fetch 时会被拒绝,抛出 invalid onError method,最终被 n8n 汇总为通用的 fetch failed
  • Issue 正文推测的“客户端版本兼容性检查拒绝 1.19.x 服务端”这一解释后来被纠正:在 @qdrant/js-client-rest@1.16.2 中,该探测是 fire-and-forget 的,只会在控制台打印警告(console.warn),不会抛出、也不会阻断请求。因此兼容性警告与 fetch failed 是同一失败请求的两个症状,关闭兼容性检查无法修复已失败的请求。

该问题与 #22159(旧版因固定客户端版本导致的兼容问题)形式相似,但本次实际修复点是调度器版本不匹配,修复形态与 #37903、#37758 属同一类。

环境排查

  • n8n 版本:确认是否为 2.37.10;并核对是否已升级到 2.39.5 / 2.39.6(修复版本)。2.38.2 及更早仍锁定 @qdrant/js-client-rest: ^1.16.2
  • Node.js 版本:确认是否为 26.x(本 Issue 为 26.5.1),因为调度器冲突与该大版本相关。
  • Qdrant Server 版本:确认是否为 1.19.x。
  • 依赖版本:检查 @n8n/n8n-nodes-langchain 中声明的 @qdrant/js-client-rest 版本,以及其传递依赖的 undici 版本(v6 vs v8)。
  • 部署方式:docker 自托管、Postgres,execution mode 为 scaling(single-main)。
  • 对照组:用官方社区节点 n8n-nodes-qdrant 以相同 URL / 凭据访问同一 Qdrant Server,确认服务端与凭据本身可用。

解决步骤

  1. 确认当前 n8n 版本。若为 2.38.2 或更早,说明仍受此问题影响;若为 2.37.10,同样受影响。
  2. 升级 n8n 到 2.39.x(Issue 明确验证到 2.39.5、2.39.6)。这两个版本的 release tag 已将内置客户端 pin 到 @qdrant/js-client-rest: ^1.19.0,与 Node 26 的 undici 调度器问题一并解决。
  3. 升级后重启 n8n 服务,使新的依赖版本生效。
  4. (可选,仅作参考)若暂时无法升级,可优先尝试在自建镜像中把 @qdrant/js-client-rest 覆盖到 1.19.x。此为社区推测方案,Issue 未验证,操作前建议先备份并记录依赖来源。
  5. 不要尝试通过关闭 Qdrant 客户端的兼容性检查来修复。该检查在 1.16.2 中不阻塞请求,关闭它无法改变 dispatcher 被拒绝导致的失败。

验证方法

升级并重启后,打开 Qdrant Vector Store 节点的 collection 下拉列表:若不再显示 Could not load list / fetch failed,并能列出 Qdrant Server 1.19.x 上的 collection,说明调度器冲突已解除。随后执行一次 Vector Store 操作(例如 Get Collection 或写入/查询)确认无 fetch failed,即表示问题已解决。如仍失败,请在 Issue 下留言并提供新的 n8n 与 Node.js 版本信息。

参考来源

n8n-io/n8n #37907

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 25045

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注