Skip to content

长期记忆写入节点 ​

长期记忆写入节点把一组对话消息写入一个资源库记忆库,供后续长期记忆检索使用。它适合保存相对稳定、确有后续价值的信息,例如用户偏好、称呼、工作习惯和已经确认的业务背景。

长期记忆不是完整聊天记录的替代品。不要把每轮对话无差别写入;应优先保留跨会话仍然有用、并且允许长期保存的内容。

配置要点 ​

  • 一个节点最多选择一个资源库记忆库,不支持多个记忆库合并写入。
  • 输入参数固定为 messageList,类型为 Array<Object>,列表项包含 String 类型的 role 和 content。
  • messageList 可以引用开始节点或上游节点的结构化变量;推荐使用变量引用,便于保持列表项的类型与层级。
  • 角色值使用 user、assistant、system,不要自行发明角色值。
  • 输出固定为 Boolean 类型的 isSuccess,不返回记忆 ID、提取结果或记忆条数。

配置示例 ​

示例工作流在开始节点中定义 messageList:类型为 Array<Object>,对象包含 role 和 content 两个 String 子字段。长期记忆写入节点引用该变量,并把消息写入 PLCAgent 记忆库。

长期记忆写入节点及完整配置面板

截图工作流只用于验证节点配置,没有执行写入,因此不会向现有记忆库增加演示数据。

选择目标记忆库 ​

点击“选择记忆库”,从工作空间的资源库记忆库中选择一个目标。一个节点最多选择一个记忆库。

记忆库是长期数据的边界。多个智能体或工作流需要共享记忆时,应明确选择同一个受控记忆库;需要隔离不同产品、租户或数据敏感等级时,应拆分记忆库,而不是只依赖提示词约束。

节点面板不提供用户 ID、渠道 ID 或隔离键配置。应结合运行入口、调用身份和记忆库权限设计数据隔离。

输入 messageList ​

字段类型说明
messageListArray<Object>必填的消息列表;参数名称和类型不可修改。
messageList[].roleString消息角色。使用 user、assistant 或 system。
messageList[].contentString消息内容。应是完整、可理解且允许长期保存的文本。

推荐:引用结构化上游变量 ​

在开始节点、输入节点或其他上游节点中定义 Array<Object> 类型变量,并为列表项配置 role、content 两个 String 子字段,再通过“引用变量”绑定到 messageList。

运行时示例:

json
[
  {
    "role": "user",
    "content": "我偏好深色主题,技术文档请使用中文。"
  },
  {
    "role": "assistant",
    "content": "已记录你的界面与语言偏好。"
  }
]

数组应保持真实对话顺序。只写入一条已经确认的用户偏好时,可以只提供一条 user 消息;需要让记忆服务结合上下文判断时,再提供对应的 assistant 消息。

固定值与变量引用 ​

属性面板支持直接配置列表值,也支持引用上游 Array<Object> 变量。对来自对话、表单或业务事件的数据,优先使用结构化变量引用,并在保存后确认变量标记仍然存在。

不要用字符串化 JSON 代替 Array<Object>。即使字符串内容看起来像数组,其类型仍然不符合节点契约。

role 的使用建议 ​

角色适合内容
user用户明确表达的偏好、身份信息或已经确认的事实。
assistant助手的确认、总结或与用户消息配套的回答。
system确有必要参与记忆提取的系统上下文;不要把普通工作流指令当作用户事实。

应只使用标准角色值,并在测试记忆库中验证实际提取结果。

写入内容设计 ​

适合长期保存的内容通常具备以下特征:

  • 后续多次对话仍然有用。
  • 已由用户明确表达或确认。
  • 内容足够具体,脱离当前对话仍能理解。
  • 不与现有记忆明显冲突,或已经说明发生变化的事实。

不建议直接写入:

  • 临时问题、一次性任务步骤和即时状态。
  • 未确认的模型猜测或推断。
  • 密钥、令牌、支付信息、证件号码等敏感数据。
  • 大段原始对话、日志或文档全文。

如果输入来自长对话,先使用大模型、文本处理或代码节点提取确有长期价值的事实,再组成简短的 messageList。这能减少噪声和互相矛盾的记忆。

输出 ​

节点固定输出:

输出类型说明
isSuccessBoolean本次长期记忆写入操作是否成功。

下游应根据 isSuccess 设计成功与失败分支。节点不会返回具体保存了哪些记忆,也不能根据 true 推断每条消息都生成了一条独立记忆;需要验证内容时,应在写入成功后使用长期记忆检索节点查询,并结合业务语义判断结果。

配置检查 ​

保存前至少检查:

  1. 已选择正确的目标记忆库。
  2. messageList 是 Array<Object>,不是普通 String。
  3. 列表项包含非空的 role 和 content。
  4. role 使用标准值,消息顺序正确。
  5. 写入内容符合数据权限、隐私和保留期限要求。
  6. 保存并重新打开工作流后,变量引用仍然正确。

推荐工作流 ​

  1. 从当前对话或业务事件中取得候选信息。
  2. 过滤临时内容和敏感信息,必要时让用户确认。
  3. 生成结构正确的 messageList。
  4. 写入目标记忆库并判断 isSuccess。
  5. 对失败进行可见记录;不要在未知错误下无限重试。
  6. 在测试场景中通过长期记忆检索验证召回效果,再发布到正式流程。

常见问题 ​

能否直接输入一段文本? ​

不能。节点需要 Array<Object> 类型的 messageList。单条文本也应包装成包含 role、content 的对象数组。

为什么推荐引用结构化上游变量? ​

结构化变量能保留 Array<Object> 类型与 role、content 子字段,适合由开始节点、对话输入或上游处理节点持续传递。

为什么角色输入框没有下拉选项? ​

role 是 String 类型。应使用 user、assistant、system 标准值。

写入成功后为什么检索不到预期内容? ​

先确认检索节点选择了同一个记忆库,并检查运行身份和查询语义。isSuccess 只表示写入调用成功,不说明记忆一定按预期摘要或一定能被 Query 召回。

可以把整段聊天记录全部写入吗? ​

技术上可以传入多条消息,但不建议无差别保存。先提取稳定、已确认且有长期价值的信息,能减少噪声、冲突和隐私风险。