先记住这个答案
语义记忆存储去上下文的客观事实,如用户偏好、属性,通常结构化存储,可增量覆盖。情景记忆存储带时间地点的事件序列,用于回溯和模式识别,更新是追加而非覆盖。程序记忆存储如何执行任务的步骤或策略,通过执错修正或强化学习更新,多由系统固化,不直接让用户改写。
- 语义记忆存可覆盖事实,用键值或属性管理
- 情景记忆存事件序列,只追加并附带时间戳
- 程序记忆存执行策略,靠结果反馈修正
三类记忆的内容形态与更新机制
语义记忆存储用户明确所述或推理得到的普适事实,例如“用户住在北京”“偏好Python”。这类记忆剥离了原始对话的时间、情绪和语境,通常以属性表或图结构保存,写入时需经过抽取和归一化。更新是覆盖旧的冲突值,且要记录置信度和来源。读取时直接按意图或实体检索,不关心当初怎么知道。
情景记忆存储特定时间点的个人经历,例如“3月2日用户抱怨过登录慢”。它保持事件顺序和上下文细节,通常以日志或带时间戳的片段保存,写入是追加新事件,不修改旧事件,因为旧事件是历史事实。读取时用于回忆或归纳,它支撑语义记忆的抽取,但本身更近于时序数据。程序记忆则涉及“如何做”,例如“生成周报先查数据再排版”,它可以是提示模板、工具调用链或策略网络,写入来自人工设定或从成功轨迹中学习,更新通常基于执行反馈,用户直接陈述需经过验证后写入。
三类记忆可能在形式上有重叠,但读写路径根本区别:语义记忆支持随机插入和覆盖,系统关心保持一致性;情景记忆只追加,系统需要防止无限增长并设计遗忘;程序记忆则多编译为固定流程或参数,不是每一轮对话都介入。实际操作中,常把语义和情景放在向量库里,但语义查询用相似度,情景还要引入时间衰减和顺序过滤。程序记忆通常在Agent代码或配置里,不跟用户文本一起存储。
旅行规划Agent的记忆读写场景
假设一个旅行规划Agent服务同一用户多次。第一次对话用户说“我喜欢安静的海岛”,Agent将其写入语义记忆,标签为preference,值是“安静海岛”,并保留来源消息ID。之后用户分享“去年在巴厘岛浮潜时被水母蜇了”,Agent把这段完整情节存入情景记忆,事件类型为incident,含地点、时间、感受。同时,Agent在程序记忆中内置“制定行程前先检查医疗风险”的步骤。后来用户提出“再推荐海岛”,Agent从语义记忆取偏好,从情景记忆检索“被蜇”事件并在推荐中排除有水母区域,再按程序记忆的顺序执行查询与过滤,返回安全选项。
处理中,语义记忆的更新发生在用户明确表示不喜欢潜水或多次类似事件归纳出该偏好时,需覆盖旧偏好或加排斥标签;情景记忆则总是追加新事件,即使事件与旧矛盾也不删旧,因为那是实际经历。程序记忆若发现规则导致用户不满,则通过人工调整或强化学习修改流程。整个决策链条依赖三类记忆的分离读取,不能把经历当事实写入,否则“怕水母”会错误覆盖“喜欢海岛”而过度保守。
分类混淆时的失效条件与代价
若把情景记忆当语义记忆使用,比如将一次吐槽“这酒店太吵”直接存成“用户讨厌闹市区”,会丢失环境与时间限定。几天后用户在市中心订酒店时,该记忆错误触发排斥,实际那次吵闹可能只是隔音差。情景记忆应当保留原始条件,通常需要多次同类事件可归纳或用户明确表态时才升级为语义事实,否则更新过于激进。
程序记忆如果不区分语义而作为用户偏好直接写入,例如用户说“我习惯先看价格”被存成事实,但用户在不同场景可能有不同决策策略,程序记忆依赖稳定执行流程,不能接收每次临时说法。需要由评审机制或离线验证来更新。另外,当三类记忆没有独立溯源,一次改写就会污染历史,使得复盘错误决策时无法判断当时基于什么。因此必须在每条记忆上记录类型、时间戳和来源引用,哪怕存储结构统一,也要在元数据上区分。
容易答错的地方
- 三类记忆只是不同向量集合
- 错误认为都放向量库用相似度检索即可。其实语义记忆需要强一致性和覆盖,情景记忆依赖时序和顺序,程序记忆则多不是文本检索,而是模型参数或显式规则。三类读写模式与存储需求差异大,混在一个向量库处理会带来更新冲突与检索噪声。
- 情景记忆可以压缩成事实
- 把用户经历直接归纳成偏好,例如一次失败订单就存“用户讨厌物流慢”,这丢失了事件中可解释的上下文。情景记忆必须保留原始细节,以便后续跨事件归纳或纠正单一事件的误导。事实抽取应基于多次一致性或明确表态,而非单次事件。
面试官还会怎么问?
程序记忆如何从用户交互中更新?
程序记忆通常不作为用户陈述直接写入,而是通过评估Agent行为效果来调整。例如在ReAct中,某步骤成功率低则修改提示或工具选择,或用强化学习迭代策略。更新需要离线审计或延迟反馈,不能随对话即时覆盖,否则会遗忘已验证流程。
情景记忆如何防止无限膨胀?
情景记忆是追加式但需要生命周期管理,可设时间衰减或重要性评分,定期聚合旧事件为语义总结。但聚合时保留原始事件ID作为证据,避免丢失可追溯性。具体阈值需根据任务对历史细节的需求确定。
三类记忆应该分开存储吗?
物理存储可以统一在键值库或图数据库,但schema必须区分类型。语义记忆用实体-属性结构易更新,情景记忆用日志+时间戳,程序记忆存版本化策略。分开存储简化隔离和权限控制,若合库需靠类型字段强制区分读写路径。
参考资料
示例用于理解所注明的运行环境与边界;延伸学习可结合原文中的更多案例。