这个坑值得记一笔。n8n 1.60 自托管,AI Agent 节点接 Chat Trigger,保存时提示 memory 子节点未连接,运行时每轮都当新会话,用户说「刚才那个订单」agent 完全接不上,容器日志里没有报错,社区版没装额外节点包。
刚开始盯着「社区版缺少对应版本的 langchain 节点包」,折腾了半个多小时,排掉了。
排查方向其实有限,先把可能性排一排。Agent 节点的 memory 是必填子连接,画布上没有连;连了 Window Buffer Memory 但 session key 用了固定值;工作流从别的实例复制过来,连接 id 已失效。
动手时先看容器里加载了哪些 langchain 节点
docker exec n8n n8n list:nodes | grep -i memory
随后导出工作流检查 memory 连接是否存在
docker exec n8n n8n export:workflow --id=1 --output=/tmp/wf.json && cat /tmp/wf.json | python -m json.tool | grep -A3 memory
然后把 session key 改成按用户 id 取值
python -c "print({'sessionKey':'={{ $json.userId }}'})"
剩下的就是用同一个 userId 连发两轮验证记忆
curl -s -X POST http://localhost:5678/webhook/chat -H 'Content-Type: application/json' -d '{"userId":"u1","message":"刚才那个订单"}'
怎么算真的好了,看的是同一批现象。同一个 userId 的第二轮请求能引用第一轮的订单号,画布上 memory 节点显示已连接,执行记录里会话 id 保持一致。
这里还有个坑。n8n 的 memory 是子节点而不是参数,复制工作流时最容易丢连接;session key 写死会让所有用户共享一份记忆,必须按用户维度取。这类问题最好一次改到位,反复小改反而容易把原因搅混。
