n8n 智能体“第二句话不知道第一句话在说什么”,通常要先检查会话记忆,而不是直接换模型。Simple Memory 可以把当前会话的一段历史交给 Agent;能否正确区分不同会话,则取决于 Session Key 和触发器传来的会话标识。
本教程面向已可单轮聊天的 n8n 用户,依据 2026 年 10 月 1 日官方文档编写。测试对话为虚构样本,未在真实 n8n 实例执行。Simple Memory 适合入门验证,不能据此承诺跨进程长期保存、生产备份或多人账号权限。

先区分三件容易混淆的事
| 能力 | 解决的问题 | 本例是否覆盖 |
|---|---|---|
| 会话上下文 | 同一次对话知道上一轮的条件 | 覆盖,用 Simple Memory |
| 用户长期资料 | 新会话还能取回经过授权保存的偏好 | 不覆盖,需要独立存储与读取规则 |
| 知识库检索 | 从文档查到外部事实并给依据 | 不覆盖,聊天历史不等于知识库 |
n8n 的记忆原理文档把 Simple Memory 描述为保存当前会话可配置长度的历史,另提供 Redis、Postgres 等记忆服务节点。给 Agent 加记忆并不会训练模型,也不会自动把聊天中出现的一切保存成可靠事实。
1. 为 Agent 添加 Simple Memory
- 打开已有的 Chat Trigger → AI Agent 工作流,确认模型与所需工具仍然有效。
- 点击 AI Agent 的 Memory 接口,添加 Simple Memory 子节点。
- 在 Chat Trigger 输入或输出数据中找到本次聊天的
sessionId,查看它在同一对话的下一条消息里是否保持一致。 - Simple Memory 的 Session ID 选择 Connected Chat Trigger Node,使用直接相连的触发器提供的 sessionId。需要手动映射时,选择 Define below,把 Key 设为
{{ $json.sessionId }},并在表达式预览中确认不是 undefined 或空串。旧版界面可能显示 Session Key 或 Session ID 文本框。 - Context Window Length 先设为 5,作为本例的起点;它表示考虑多少次之前的交互,不是 5 个 token,也不是保存永久历史。
字段名称和取值要以你的触发器实际输出为准。若上游字段不叫 sessionId,先在主流程做明确映射,再接入记忆;不要为了消除空值直接把 Session Key 改成全局固定字符串。近期节点的 Session ID、Define below 和 Key 配置可在官方项目字段定义中核对。
Simple Memory 官方说明规定 Session Key 与上下文窗口,并特别指出该节点不适合 queue mode 的生产工作流,因为每次调用不保证落到同一 worker。
2. 需要恢复聊天界面历史时,连接同一个记忆节点
只让 Agent 读取前文,与聊天界面重新显示旧消息不是一件事。若使用 Hosted Chat 并希望载入之前会话,在 Chat Trigger 的 Options 中把 Load Previous Session 设为 From Memory;这时触发器会出现 Memory 接口。
将 Chat Trigger 的 Memory 接口也连接到前面同一个 Simple Memory 节点。官方推荐触发器与 Agent 共用一个记忆节点,避免聊天界面显示的历史和模型读取的历史来自不同来源。若只测试 Agent 的连续对话,可以先保持加载旧会话功能关闭。
有关 Load Previous Session 及共享连接的要求见Chat Trigger 文档。保存后先在测试面板检查,再把已经验证的配置发布到正式入口。
3. 测同一会话能否延续上下文
为免混入已有聊天,开始一段新的测试会话。给 Agent 加一条规则:“回答个人偏好时只使用本会话提供的信息,没有信息就说未提供;不猜测。”然后依次发送:
第一条:这是虚构测试,我的项目代号是松果,我喜欢蓝色。
第二条:我的项目代号和喜欢的颜色是什么?
预期第二条能回答“松果、蓝色”。但只看最后答案还不够:打开两次执行的 Chat Trigger 数据,核对 sessionId 相同;查看 Agent 的记忆相关输入或执行信息,核对包含前一条测试消息。某些界面不展示完整历史时,至少保存触发器标识与响应,继续排查实际传递路径,不能把模型猜中当成记忆验证。
若第二条不知道答案,按顺序看 Memory 连线、Session Key 表达式预览、两次 sessionId 是否一致,再看 Context Window Length 是否太小。不要先把窗口无限调大,更多历史也会增加上下文长度和模型用量。
4. 测另一会话是否真的隔离
新建另一段对话,或用另一个浏览器会话打开聊天入口。先查看 sessionId 是否与第一段不同;若没有变化,就不能当作隔离测试。
在第二段新会话直接问:“我的项目代号和喜欢的颜色是什么?”它应说明当前会话没有提供这些信息,不能回答松果和蓝色。然后在第二段写“项目代号是溪流,喜欢绿色”,回到第一段再询问;第一段应仍对应松果和蓝色。
这组双向测试能发现固定 Session Key 或会话标识复用造成的串话。若串话,先停止把真实用户资料送进该流程,检查是否用了 shared-session 这类固定键、是否把用户 ID 误当作所有对话共用的会话 ID、前端是否每次都发送同一 sessionId。
Session Key 不是身份认证
Session Key 负责把历史归到某段会话,不证明发送者有权访问这段会话。接自建前端时,需要由受信的后端确认登录用户与会话归属;不能允许请求随意填别人的 sessionId 就读取历史。Basic Auth 共享密码也不等于逐用户的数据权限。
同时注意,Simple Memory 是子节点。官方文档指出子节点表达式通常解析第一条输入 item;不要把多个不同用户的消息一次性作为一批 items送进同一个 Agent,就认为记忆会按每条自动隔离。
窗口变小、重启和跨 worker时,怎样理解结果?
- 窗口变小:较早交互可能不再提供给本次模型上下文,不表示已经完成了所有存储中的删除。需要删除历史时单独设计清理和验证。
- 重启或进程变化:本例不验证永久保存。需要可靠保存、备份和生命周期管理时,选合适的数据库记忆节点并明确保留策略。
- queue mode:按官方限制不要将 Simple Memory 用在其活动生产工作流中,改用适合部署结构的外部记忆服务,再复测同会话与跨会话行为。
- 不同模型接口:如果模型服务本身还配置了持久会话 ID,应检查它是否与 n8n 会话正确对应,避免两套历史各自复用。
完成这篇教程后,你应能证明同一 sessionId 延续上下文、不同 sessionId 不串话,并清楚知道这份验证覆盖的是会话历史。长期记忆、数据删除和身份授权需要各自的实现与验收。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/30192.html