2026 年 9 月 8 日,n8n 发布了 2.39.0(预发布)。这个版本值得单独写一篇教程,原因有两个:一是它顺手修掉了两个 HIGH 级安全漏洞,自托管用户应当尽快升;二是它给 Instance AI 补上了持久对话记忆,并让后台子智能体可以继承父智能体的工作区沙箱——这两条直接改变你能搭出什么样的工作流。下面按「先保命、再解锁新能力」的顺序走。
先理解:这个版本改了什么
把 2.39.0 的变更按「你该关心什么」重新排一下,比逐条读 release notes 有用:
| 变更 | 实质影响 | 优先级 |
|---|---|---|
| 修复 CVE-2026-86076(表达式沙箱逃逸) | 表达式编译器的清洗逻辑可被绕过,进而触达 Function 构造器,导致后端代码执行与编辑器预览中的 JS 执行 | 高 |
| 修复 CVE-2026-86082(模型搜索端点域名限制缺失) | OpenAI Chat Model 节点的模型下拉会绕过凭据的允许域名限制,把 API Key 发到任意主机(SSRF) | 高 |
| Instance AI 持久对话记忆 | 助手可以检索自己此前的会话、浏览整个工作区目录,不必每次从零解释 | 中高 |
| 子智能体继承父智能体沙箱 | 父 Agent 布置好的工作区状态,后台子智能体可直接沿用,不用再插节点传数据 | 中高 |
| 公共 API 新增 source control 三端点 | push / pull / 状态查询,外部 CI 可在不开编辑器的情况下做 GitOps | 中 |
| Anthropic 相关可靠性修复 | Agent 线程不再因单次运行报错永久损坏;错误在编辑器里保持可见 | 中 |
Step 1:先判断你有没有暴露在漏洞下
两个漏洞的修复版本是同一组:1.123.76、2.37.7、2.38.2。也就是说,只要你的版本低于这三条线中的对应分支,就属于受影响范围。
# 查当前版本(Docker 部署)
docker exec -it n8n n8n --version
# 或在宿主机上(npm / pnpm 安装)
n8n --version
# 看 compose 里锁的是哪个镜像 tag
grep -n "image:" docker-compose.yml
2.39.0 是预发布(pre-release)。如果你跑的是生产环境,稳妥做法是先把两个安全补丁所在的稳定版本线(2.38.2 / 2.37.7 / 1.123.76)升级到位,再评估是否跟进 2.39.0 的新特性。两件事别混在一次变更里做——出问题时你分不清是补丁还是新特性造成的。
Step 2:升级前的备份清单
1. 数据库备份
docker exec -t n8n-db pg_dump -U n8n n8n > n8n_backup_$(date +%Y%m%d).sql
2. 数据卷备份(包含加密密钥,丢了凭据全废)
docker run --rm -v n8n_data:/data -v $(pwd):/backup alpine \
tar czf /backup/n8n_data_$(date +%Y%m%d).tar.gz -C /data .
3. 记录当前镜像 tag 与 compose 文件
cp docker-compose.yml docker-compose.yml.bak
Step 3:执行升级
# 改 docker-compose.yml 里的镜像 tag
# image: docker.n8n.io/n8nio/n8n:2.39.0
docker compose pull
docker compose up -d
docker compose logs -f n8n # 观察迁移日志,等出现 "Editor is now accessible"
如果你的工作流用了 LDAP 节点,这个版本要优先升。2.39.0 给 LDAP 节点的 Custom Filter 字段加上了表达式输出转义,此前该字段存在注入路径。这类修复越早到位越好,因为它不需要你改任何配置。
Step 4:升级后的五分钟冒烟检查
□ 能登录编辑器,工作流列表完整
□ 打开一个复杂工作流,节点没有变成红色报错
□ 手动跑一个含表达式的工作流(重点验 Set / Code 节点)
□ 触发一个定时工作流,确认调度器正常
□ 调一次 AI 节点(OpenAI / Anthropic),确认凭据可用
□ 用到 Qdrant 的话,跑一次向量检索
本版更新了 Qdrant 客户端并移除 undici v6 依赖,
目的是恢复 Node 26 运行时下的 AI 请求兼容性
Step 5:打开 Instance AI 的持久记忆
此前 Instance AI 的会话上下文在编辑器标签页关闭时就没了。2.39.0 给它补上两项能力:
1. 会话搜索
助手能检索自己此前的会话,处理「以前见过的」工作流时
可以直接取回上下文,不用你重新解释凭据布局与失败历史。
2. 工作区文件夹浏览
助手的视野从「当前打开的工作流」扩展到整个工作区目录。
同一版本还新增了一个可选的并发上限,用来控制单个实例上同时运行多少个 Instance AI 任务,以及一个针对 AI 活动的分析报告模块。前者在多人都用助手时特别必要——否则一次误操作就能把实例打满。
工作区文件夹浏览是有代价的。助手的可读范围扩大后,工作区里任何明文存放的密钥、测试数据、客户样本都会进入它的可读面。上线前先做一遍清理:把不该被读到的文件移出工作区,或确认它们本身不含敏感信息。
Step 6:用子智能体沙箱共享改造父子工作流
这是本版对「链式 Agent」工作流影响最大的改动。此前每个子智能体跑在各自隔离的上下文里,父 Agent 想把自己的工作区状态交给子 Agent,只能靠节点显式传递。现在后台子智能体继承父 Agent 的工作区沙箱:
改造前:
父 Agent ──(写文件)──> 传递节点 ──(读文件)──> 子 Agent
改造后:
父 Agent ──(布置工作区状态一次)──> 子 Agent 直接沿用
判断标准:如果你的父子工作流里,有一半节点只是为了
「把父级的中间结果喂给子级」,那就是这次改造的候选对象。
共享沙箱意味着共享状态,也就意味着共享风险。子智能体现在能直接改到父级看到的工作区。请为写操作设置明确边界:给子 Agent 只读或限定目录的权限,并在关键步骤后加一个校验节点,否则一次失败的子任务会污染整个工作流的状态。
Step 7:用 source control API 做 GitOps
公共 API 新增了三个 source control 端点:把项目 push 到 Git、从 Git pull、查询当前 source control 状态。编辑器侧也新增了一个 UI 控件,用来选择「哪些工作流变更要提升(promote)」。两者对应的是同一组操作。
典型 GitOps 闭环:
1. 开发者在 n8n 里改工作流
2. CI 通过 API 调「状态查询」,判断有无待提升变更
3. 通过 API 调「push」,把变更推到 Git 仓库
4. 代码评审 + 合并
5. 目标环境通过 API 调「pull」,把变更拉下来
这样外部流水线不必再人工打开 n8n 编辑器,
此前那个手工步骤正是 GitOps 断链的地方。
常见问题速查
| 你遇到的现象 | 大概率原因 & 解决 |
|---|---|
| 升级后登录不进编辑器 | 检查数据卷是否挂对;加密密钥缺失会导致凭据解密失败 |
| Agent 线程跑一次报错后就废了 | 这是 2.39.0 之前的已知问题,升级后错误会保持可见且线程可恢复 |
| Claude 节点返回空内容 | 本版修复了 content-block 解析,升级后重测 |
| Node 26 下 AI 请求失败 | 本版移除 undici v6 依赖并更新 Qdrant 客户端,升级即可 |
| 多人用助手时实例变慢 | 打开 Instance AI 的并发上限,限制同时运行数 |