Appearance
长期记忆写入节点
长期记忆写入节点把一组对话消息写入一个资源库记忆库,供后续长期记忆检索使用。它适合保存相对稳定、确有后续价值的信息,例如用户偏好、称呼、工作习惯和已经确认的业务背景。
长期记忆不是完整聊天记录的替代品。不要把每轮对话无差别写入;应优先保留跨会话仍然有用、并且允许长期保存的内容。
当前功能与旧文档差异
当前编辑器与旧文档中的部分产品说明已经不同:
- 一个节点最多选择一个资源库记忆库,当前选择器没有企业记忆库或多个来源入口。
- 输入参数固定为
messageList,类型为 Array<Object>,对象结构固定包含 String 类型的role和content。 messageList可以引用开始节点或上游节点的 Array<Object> 变量;当前版本也提供固定 JSON 编辑器,但固定对象数组重载后可能错误回显为[object Object],生产流程优先使用结构化上游变量。- 当前前端只约束
role和content为 String,没有提供角色下拉框或角色枚举校验。沿用记忆消息契约时应使用user、assistant、system,不要自行发明角色值。 - 输出固定为 Boolean 类型的
isSuccess,不返回写入后的记忆 ID、提取结果或记忆条数。 - 旧文档中的套餐额度、旧版记忆升级会重置数据、应用内工作流限制等属于旧环境说明;当前节点代码和界面没有这些配置或状态,本文不把它们作为现行规则。
本文只描述当前资源库工作流编辑器中的节点能力。其他工作流入口是否开放记忆节点,应以对应入口实际添加节点面板为准。
配置示例
示例工作流在开始节点中定义 messageList:类型为 Array<Object>,对象包含 role 和 content 两个 String 子字段。长期记忆写入节点引用该变量,并把消息写入 PLCAgent 记忆库。

截图工作流只用于验证节点配置,没有执行写入,因此不会向现有记忆库增加演示数据。
选择目标记忆库
点击“选择记忆库”,从当前工作空间的资源库记忆库中选择一个目标。一个节点最多选择一个记忆库。
记忆库是长期数据的边界。多个智能体或工作流需要共享记忆时,应明确选择同一个受控记忆库;需要隔离不同产品、租户或数据敏感等级时,应拆分记忆库,而不是只依赖提示词约束。
当前节点面板没有用户 ID、渠道 ID 或隔离键配置。不要仅凭旧文档中的 UID 与渠道说明,就推断所有调用方式都会自动按预期隔离;应结合实际运行入口、调用身份和记忆库权限做验证。
输入 messageList
| 字段 | 类型 | 说明 |
|---|---|---|
messageList | Array<Object> | 必填的消息列表;参数名称和类型不可修改。 |
messageList[].role | String | 消息角色。使用 user、assistant 或 system。 |
messageList[].content | String | 消息内容。应是完整、可理解且允许长期保存的文本。 |
推荐:引用结构化上游变量
在开始节点、输入节点或其他上游节点中定义 Array<Object> 类型变量,并为列表项配置 role、content 两个 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。这能减少噪声和互相矛盾的记忆。
输出
节点固定输出:
| 输出 | 类型 | 说明 |
|---|---|---|
isSuccess | Boolean | 本次长期记忆写入操作是否成功。 |
下游应根据 isSuccess 设计成功与失败分支。当前节点不会返回具体保存了哪些记忆,也不能根据 true 推断每条消息都生成了一条独立记忆;需要验证内容时,应在写入成功后使用长期记忆检索节点查询,并结合业务语义判断结果。
工作流校验与发布前检查
当前节点专用校验明确检查是否选择了记忆库,但没有在同一校验函数中逐项检查 messageList 的 JSON 内容、角色枚举或空 content。因此不能只依赖“可以保存或发布”判断配置正确。
发布前至少检查:
- 已选择正确的目标记忆库。
messageList是 Array<Object>,不是普通 String。- 列表项包含非空的
role和content。 role使用标准值,消息顺序正确。- 写入内容符合数据权限、隐私和保留期限要求。
- 保存并重载工作流后,变量引用仍然正确,没有显示
[object Object]。
推荐工作流
- 从当前对话或业务事件中取得候选信息。
- 过滤临时内容和敏感信息,必要时让用户确认。
- 生成结构正确的
messageList。 - 写入目标记忆库并判断
isSuccess。 - 对失败进行可见记录;不要在未知错误下无限重试。
- 在测试场景中通过长期记忆检索验证召回效果,再发布到正式流程。
常见问题
能否直接输入一段文本?
不能。节点需要 Array<Object> 类型的 messageList。单条文本也应包装成包含 role、content 的对象数组。
为什么固定 JSON 重载后显示 [object Object]?
这是当前固定对象数组回显链路的限制。优先改为引用结构化 Array<Object> 上游变量,并在保存、重载后再次确认。
为什么角色输入框没有下拉选项?
当前界面只把 role 定义为 String,没有在前端实现枚举选择。仍应使用 user、assistant、system 标准值。
写入成功后为什么检索不到预期内容?
先确认检索节点选择了同一个记忆库,并检查运行身份和查询语义。isSuccess 只表示写入调用成功,不说明记忆一定按预期摘要或一定能被当前 Query 召回。
可以把整段聊天记录全部写入吗?
技术上可以传入多条消息,但不建议无差别保存。先提取稳定、已确认且有长期价值的信息,能减少噪声、冲突和隐私风险。