在 n8n 中,一次传入多条数据,AI 子节点里的 {{ $json.sessionId }} 却总读到第一条,可能是子节点的参数解析规则造成的。官方文档说明,普通节点通常按每项解析表达式,子节点表达式则总是解析到第一项。需要按每条数据设置独立参数时,可用 Loop Over Items 将 Batch Size 设为 1,再把包含子节点的 AI 根节点放在循环内。
本文专门排查多项输入的取值问题,面向能编辑 n8n 节点和表达式的读者。依据 2026 年 10 月 1 日读取的官方文档;没有在读者实例中复现或测量性能。下文两条会话都是虚构测试数据,不包含真实用户资料。

先确认出错位置,别把所有节点都加循环
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 根节点整体放到单项循环里
- 在 Code 与 AI Agent 之间添加 Loop Over Items。
- Batch Size 设
1,Reset 保持关闭;本例输入是已知的两项,不是分页拉取。 - 把 Loop Over Items 的 loop 输出接到 AI Agent 的主输入。
- AI Agent 完成后的主输出接回 Loop Over Items 的输入,形成处理下一项的循环。
- 把 Loop Over Items 的 done 输出接到循环结束后的结果节点。Chat Model、Memory、Tool 仍附着于循环内的 AI Agent。
Loop Over Items 文档说明:loop 每次返回设定数量的数据,done 在循环结束后合并已处理结果。普通 n8n 节点通常已经能处理多项,无需固定增加循环;这里使用单项循环,是为了让子节点每次的“第一项”就是当前项。
只把 Memory 子节点放在循环外改线没有作用。循环边界必须包住使用该子节点的根节点。Batch Size 若设为 2,子节点仍面对两项,首项取值问题仍可能存在。
如何知道修复了取值,而不只是回答变了
- 执行整条测试流程,确认 Code 的输出是 A、B 两项。
- 分别查看循环内 AI Agent 的两次运行输入:第一次只有 demo-session-A,第二次只有 demo-session-B。
- 在对应运行上下文中检查 Memory 会话键表达式,确认两次分别解析到各自的 sessionId。
- 检查 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