Skip to content

长期记忆写入节点

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

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

当前功能与旧文档差异

当前编辑器与旧文档中的部分产品说明已经不同:

  • 一个节点最多选择一个资源库记忆库,当前选择器没有企业记忆库或多个来源入口。
  • 输入参数固定为 messageList,类型为 Array<Object>,对象结构固定包含 String 类型的 rolecontent
  • messageList 可以引用开始节点或上游节点的 Array<Object> 变量;当前版本也提供固定 JSON 编辑器,但固定对象数组重载后可能错误回显为 [object Object],生产流程优先使用结构化上游变量。
  • 当前前端只约束 rolecontent 为 String,没有提供角色下拉框或角色枚举校验。沿用记忆消息契约时应使用 userassistantsystem,不要自行发明角色值。
  • 输出固定为 Boolean 类型的 isSuccess,不返回写入后的记忆 ID、提取结果或记忆条数。
  • 旧文档中的套餐额度、旧版记忆升级会重置数据、应用内工作流限制等属于旧环境说明;当前节点代码和界面没有这些配置或状态,本文不把它们作为现行规则。

本文只描述当前资源库工作流编辑器中的节点能力。其他工作流入口是否开放记忆节点,应以对应入口实际添加节点面板为准。

配置示例

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

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

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

选择目标记忆库

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

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

当前节点面板没有用户 ID、渠道 ID 或隔离键配置。不要仅凭旧文档中的 UID 与渠道说明,就推断所有调用方式都会自动按预期隔离;应结合实际运行入口、调用身份和记忆库权限做验证。

输入 messageList

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

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

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

运行时示例:

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

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

固定 JSON 的当前限制

属性面板允许直接输入 JSON 数组,但当前版本在保存并重载对象数组后,可能把值回显为 [object Object]。出现该情况时不要继续发布或试运行;改用上游 Array<Object> 变量引用,并在重载后确认变量标记仍然存在。

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

role 的使用建议

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

当前前端不会阻止其他字符串角色,但这不代表运行服务支持。为避免写入结果不可预测,应只使用标准角色值,并在测试记忆库中验证实际提取结果。

写入内容设计

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

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

不建议直接写入:

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

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

输出

节点固定输出:

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

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

工作流校验与发布前检查

当前节点专用校验明确检查是否选择了记忆库,但没有在同一校验函数中逐项检查 messageList 的 JSON 内容、角色枚举或空 content。因此不能只依赖“可以保存或发布”判断配置正确。

发布前至少检查:

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

推荐工作流

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

常见问题

能否直接输入一段文本?

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

为什么固定 JSON 重载后显示 [object Object]

这是当前固定对象数组回显链路的限制。优先改为引用结构化 Array<Object> 上游变量,并在保存、重载后再次确认。

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

当前界面只把 role 定义为 String,没有在前端实现枚举选择。仍应使用 userassistantsystem 标准值。

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

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

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

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