知

模块三 · Agent 内核

第 9 / 14 节19 分钟阅读型

状态与记忆:三种记忆别混成一个向量库

对话记忆、工作流状态、长期记忆,生命周期完全不同。混着存的结果是又贵又乱,还查不出问题。

读完这一节,你能做到

  1. 分清三种记忆各自解决什么问题、该存在哪。
  2. 让长任务在中途失败后能续跑,而不是重头再来。
  3. 设计一套"能召回、不被污染、可删除"的长期记忆。
  4. 说清记忆与 RAG 在权限和更新上的本质区别。

一、三种记忆,三种生命周期

类型解决什么生命周期存在哪
对话记忆这轮在聊什么分钟到小时对话历史 + 摘要
工作流状态任务做到哪了小时到天业务库,结构化字段
长期记忆这个人是谁月到年用户画像表 + 向量

混用的代价

  • 把任务进度塞进对话:一断线就丢,重跑还重复副作用。
  • 把用户偏好塞进对话:每次都要重讲,跨会话消失。
  • 三者塞进一个大向量库:召回不稳定,成本还高。

判断方法:这个信息失效后,谁会出错?只影响当前对话 → 对话记忆;影响任务继续 → 工作流状态;影响下次来访 → 长期记忆。

二、对话记忆:留最近的,压早先的

策略

  1. 最近 3-5 轮原样保留。
  2. 更早的对话压缩成"事实与结论",不要留过程。
  3. 已经确认的关键事实抽出来,变成结构化字段,不再依赖对话历史。

摘要里该有什么

  • 已确认的信息(地址、金额、时间)
  • 已达成的决定(选了哪个方案)
  • 未解决的问题(还需要确认什么)

不该有什么

寒暄、情绪表达、重复的确认、模型自己的推测。

三、工作流状态:长任务的命门

四件套

  1. 状态落库:任务 id、当前步骤、每步输入输出、失败原因。
  2. 步骤幂等:同一步重复执行不产生额外副作用。
  3. 检查点:每步完成即提交,而不是全做完才写一次。
  4. 恢复逻辑:启动时读状态,从最后未完成的步骤继续。

恢复时的三个坑

  • 上一步"已发出但结果未知",必须查状态而不是重做。
  • 中断期间外部数据变了,恢复前要重新校验前置条件。
  • 恢复后不要重新规划整条链路。

判断标准

一个任务如果超过几十秒、跨多个外部系统,就该用状态机或工作流引擎,而不是指望一次模型调用跑完。

四、长期记忆:存、取、清

存什么

  • 结构化字段:语言、时区、套餐、明确确认过的偏好。
  • 半结构化 + 向量:零散事实与历史结论,带时间戳与来源。

不存什么

  • 身份证、银行卡、密码、完整手机号。
  • 模型的推测("用户可能预算有限")。
  • 易变事实(余额、库存、订单状态)。
  • 一次性噪声(寒暄、试探性提问)。

怎么召回

  • 每次只取 3-5 条,按相关性与时间衰减排序。
  • 优先取"用户明确说过"的,其次才是"系统总结的"。
  • 冲突时以更新的为准,旧记录保留以便追溯。

怎么防污染

  1. 来源标记:user_said / inferred / system。
  2. 写入审核:模型提出的记忆候选先落候选表,命中规则或人工确认后才正式入库。
  3. 过期与冲突:给记忆设有效期,冲突时走覆盖或合并策略。
  4. 可查看可删除:用户能看到系统记住了什么,并能删掉。

一个反模式

每轮对话后让模型"自动总结并写入记忆"。几轮之后库里全是模型的自我复述,真实信息被稀释。

五、记忆和 RAG 不是一回事

维度RAG记忆
数据归属共享文档/知识库单个用户或租户
来源上传、同步、爬取对话中产生、用户确认
更新文档更新后重建索引每次交互可能增量写
权限按文档权限过滤严格按用户隔离

技术上两者都可能用向量检索,所以常被混为一谈。但"谁的数据、谁能看、什么时候失效"完全不同。

混用的典型后果:把用户偏好写进共享文档库,轻则召回串味,重则数据泄露。

六、常见坑

  1. 把任务进度存在对话里。 一断线全丢。
  2. 三种记忆共用一个向量库。 召回不稳定,权限也说不清。
  3. 让模型自动写记忆。 库会被自我复述污染。
  4. 记忆只增不删。 过期偏好会一直影响输出。
  5. 敏感信息入库。 这是合规问题,不是技术问题。
  6. 记忆与知识库不隔离。 租户串数据。

七、动手任务:自写 → AI 写 → 对比 → 取舍

四步不跳:① 自己写(限时,关掉补全)→ ② 让 AI 写同一题 → ③ 逐条比对 → ④ 说出保留谁的写法。

① 自己写

  1. 为你的场景画一张记忆分层表:哪些进对话、哪些进状态库、哪些进长期记忆,各自的失效条件是什么。
  2. 写一份长期记忆的字段设计:字段名、来源标记、有效期、是否可删除。

② 让 AI 写同一题

把第 1 题交给 AI,补一句 三个层次分别给“写入时机 / 读取时机 / 失效条件”,不要只列字段。

③ 对比要盯的点

  • 它有没有把任务进度错放进对话记忆?
  • 长期记忆有没有来源标记与有效期?
  • 敏感信息它有没有明确排除?

④ 一句话取舍

如果只能保留一种记忆,你会保留哪种?为什么。

八、自测

  1. 三种记忆分别解决什么问题?生命周期多长?
  2. 判断某个信息该放哪一层,你问哪个问题?
  3. 摘要里应该保留什么、删掉什么?
  4. 长期记忆防污染有哪四个手段?
  5. 记忆与 RAG 的四个差别是什么?
  6. 为什么不让模型每轮自动写记忆?

参考答案要点:对话/工作流/长期,分钟到年;失效后谁会出错;事实与结论,删寒暄;来源标记、写入审核、过期冲突、可删;归属、来源、更新、权限;会被自我复述污染。

配套题目

★ 越多越该先背;点题目可看完整答案与深入版。

提示:读完可以顺手做几道对应题目,检验是否真的理解