n8n AI 子节点为什么总读第一条?用 Loop Over Items 逐条处理

解释 n8n AI 子节点表达式的首项取值,给出 Loop Over Items 单项循环接线、两会话输入和运行上下文验证方法。

在 n8n 中,一次传入多条数据,AI 子节点里的 {{ $json.sessionId }} 却总读到第一条,可能是子节点的参数解析规则造成的。官方文档说明,普通节点通常按每项解析表达式,子节点表达式则总是解析到第一项。需要按每条数据设置独立参数时,可用 Loop Over Items 将 Batch Size 设为 1,再把包含子节点的 AI 根节点放在循环内。

本文专门排查多项输入的取值问题,面向能编辑 n8n 节点和表达式的读者。依据 2026 年 10 月 1 日读取的官方文档;没有在读者实例中复现或测量性能。下文两条会话都是虚构测试数据,不包含真实用户资料。

n8n AI 子节点为什么总读第一条?用 Loop Over Items 逐条处理

先确认出错位置,别把所有节点都加循环

Simple Memory 文档与 Structured Output Parser 文档都明确写出子节点表达式读取首项的行为。它会影响动态会话键、动态 schema 等参数;不等于所有 AI 输出必然重复,也不等于根节点只处理第一条。

先检查三点:进入 AI 根节点的 Input 是否真的有两项;取错值的表达式是否位于子节点;是否写了 .first() 或固定字符串。若上游只有一项、字段本来相同,或代码主动取第一项,加循环不能修复数据源。

用两条可区分的数据做检查

新建独立测试流程,连接 Manual Trigger → Code。Code 使用 JavaScript、Run Once for All Items,返回下面两项:

return [
  {json: {
    case_id: "A",
    sessionId: "demo-session-A",
    chatInput: "演示会话 A:记录测试颜色为蓝色,只回答记录完成。"
  }},
  {json: {
    case_id: "B",
    sessionId: "demo-session-B",
    chatInput: "演示会话 B:记录测试颜色为橙色,只回答记录完成。"
  }}
];

如果你排查的是 Simple Memory,先在已有的测试 AI Agent 中明确把 Prompt 设为 {{ $json.chatInput }},Memory 的会话键使用 {{ $json.sessionId }}。让输入来自上面的 Code,不从真实聊天入口批量拉用户消息。AI Agent 还需连接可用的 Chat Model 和至少一个 Tool;已有流程保留原来的只读工具即可。

AI Agent 文档目前要求连接模型和工具。本次的检查对象是 Memory 会话键,不需要新增写业务系统的工具,也不要为了测试调用实际退款或发消息接口。

把 AI 根节点整体放到单项循环里

  1. 在 Code 与 AI Agent 之间添加 Loop Over Items。
  2. Batch Size 设 1,Reset 保持关闭;本例输入是已知的两项,不是分页拉取。
  3. 把 Loop Over Items 的 loop 输出接到 AI Agent 的主输入。
  4. AI Agent 完成后的主输出接回 Loop Over Items 的输入,形成处理下一项的循环。
  5. 把 Loop Over Items 的 done 输出接到循环结束后的结果节点。Chat Model、Memory、Tool 仍附着于循环内的 AI Agent。

Loop Over Items 文档说明:loop 每次返回设定数量的数据,done 在循环结束后合并已处理结果。普通 n8n 节点通常已经能处理多项,无需固定增加循环;这里使用单项循环,是为了让子节点每次的“第一项”就是当前项。

只把 Memory 子节点放在循环外改线没有作用。循环边界必须包住使用该子节点的根节点。Batch Size 若设为 2,子节点仍面对两项,首项取值问题仍可能存在。

如何知道修复了取值,而不只是回答变了

  1. 执行整条测试流程,确认 Code 的输出是 A、B 两项。
  2. 分别查看循环内 AI Agent 的两次运行输入:第一次只有 demo-session-A,第二次只有 demo-session-B。
  3. 在对应运行上下文中检查 Memory 会话键表达式,确认两次分别解析到各自的 sessionId。
  4. 检查 done 分支得到两个处理结果。若只有一个,回查循环回连线和是否中途报错,不直接认定另一个结果被覆盖。

模型说“记录完成”无法证明会话隔离。取值问题修好后,可分别向两个 session 发送“之前记录的颜色是什么”,核对 A 只引用蓝色、B 只引用橙色;这属于额外的会话行为验证。两个用户即使看到同样措辞,也不能据此认定记忆混在一起,必须回看解析键和实际输入。

还不正确时检查这些地方

问题 可能原因 检查动作
第二项仍解析成 A AI Agent 不在 loop 分支内;Batch Size 大于 1;表达式引用上游整批的 first 回看当前根节点 Input 和子节点表达式,改用当前单项字段
一直循环 误开 Reset;循环输入被当成新数据重置 本例关闭 Reset,仅回连处理完的当前项
done 少一项 根节点失败或未产生输出;某个分支没有回连 按运行序号检查每次输出及最后的回连线
键正确却仍丢失记忆 运行模式与存储方式不兼容 检查实例是否使用 queue mode 和实际 Memory 实现

官方 Simple Memory 文档明确提示:在 queue mode 的活跃生产流程中,不保证每次落在同一 worker,因此不要使用该节点作为生产记忆方案。单项循环改变输入批次,不会消除这个存储限制。

修复范围与代价

Batch Size 1 会按单项处理,需要模型调用的流程仍有相应费用和延迟;它不会自动限制服务端速率,也不会自动校验 sessionId 的用户归属。真实系统必须用可信身份生成会话键,不能让任意请求指定其他用户的键。这个教程解决的是表达式对哪一项取值,完整的权限与生产存储还要另行验证。

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/31395.html

赞 (0)
AI小管家的头像AI小管家
n8n 多智能体流程怎么评估?用固定测试集核对最终分类
上一篇 1天前
n8n 智能体输出怎么转成 JSON?用独立 LLM Chain 配置结构化解析
下一篇 1天前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部