先定义记忆要改善什么决策
“提高个性化”不是可验收目标。应明确决策、受益对象和坏结果,例如:减少用户重复提供项目约束;让跨会话任务恢复未完成事项;在重复故障中优先检查曾被验证的根因。每个目标都应有无 Memory 基线,否则 Memory 命中率再高也不能证明有业务价值。
有些信息不应成为 Memory:实时余额由业务系统读取;一次情绪表达不能自动升级为长期偏好;模型推测的身份和健康信息不应在无确认时持久化;完整聊天归档属于记录,不等于已提炼 Memory。
| 目标 | 应该记 | 不应该替代 | 主要负效应 |
|---|---|---|---|
| 延续长期任务 | 已确认目标、产物位置、未完成项 | Run Checkpoint 与副作用账本 | 从过期计划错误恢复 |
| 减少重复输入 | 用户确认且稳定的偏好/约束 | 当前订单或表单字段 | 偏好变更后继续套用 |
| 复用工程经验 | 环境、症状、证据、修复与反例 | Runbook 的正式版本 | 把偶然相关当因果 |
按用途区分记忆类型
认知科学术语只能帮助提出问题,不能直接决定数据库表。工程分类的价值在于让不同信息采用不同写入、召回、验证和遗忘策略。MemGPT 用操作系统式分层 Memory 探索有限 Context 之外的信息移动,但这是一种架构思路,不是生产存储治理规范。
工作记忆
当前 Run 的事实、计划、局部变量和未完成项,生命周期最短,通常属于 Runtime State。它需要精确恢复和并发控制,不适合只做相似度搜索。
情景记忆
记录“在什么条件下发生了什么,结果如何”。一条可用的情景包含时间、参与对象、环境版本、动作、观察和结果。只有一句“上次修好了”无法迁移,因为缺少适用条件与证据。Generative Agents 展示了从观察记录中按相关性、时效和重要性召回并生成更高层反思的架构,但其“行为可信度”实验不等于企业事实正确性证明。
语义记忆
跨事件提炼出的较稳定事实或偏好,例如用户确认的语言偏好。它不是事件的简单摘要,需要合并重复证据、保留反例和置信来源。
程序性记忆
经过验证的操作策略、Playbook、Prompt/Skill 引用或失败规避规则。它必须绑定工具、模型、环境和版本;未经回归就把一次成功轨迹升级为全局程序性规则,会把偶然行为制度化。
写入要经过价值、真实性和权限判断
写入流水线至少做四次判定:未来是否复用;信息是事实、偏好、推断还是模型猜测;主体是否允许保存;影响等级是否要求确认。高影响 Memory(健康、身份、授权、安全规则)不应依赖模型一次抽取自动生效。
// 可执行的 Schema 示例;真实系统仍需数据库约束和服务端鉴权
type MemoryRecord = {
id: string
tenantId: string
subjectId: string
kind: 'episodic' | 'semantic' | 'procedural'
statement: string
factStatus: 'observed' | 'user-confirmed' | 'inferred'
sourceRefs: string[]
confidence: number
validFrom: string
expiresAt?: string
supersedes?: string[]
policy: { sensitivity: 'normal' | 'sensitive'; requiresConfirmation: boolean }
}
function eligible(record: MemoryRecord) {
if (!record.sourceRefs.length) return false
if (record.factStatus === 'inferred' && record.policy.requiresConfirmation) return false
return record.confidence >= 0.75
}
LangGraph 的 Memory 文档把写入区分为热路径与后台路径。热路径可以立即生效,但增加响应延迟并把写入决策暴露在同一轮模型错误中;后台提炼降低交互延迟、可跨多次事件整合,却存在生效延迟。默认建议:高价值且用户明确确认的信息同步写入;模式归纳与去重在后台完成;两者都通过同一权限和 Schema 门禁。
从事件到稳定记忆需要整合
整合不是压缩字数,而是建立证据关系。重复事件可以提高置信,反例可以缩小适用条件,新事实可以替代旧事实。保留 derivedFrom 与 supersedes,让系统能够解释一条语义 Memory 为什么成立,并在源记录删除时重新计算。
把自然语言摘要覆盖写入同一个字段,会丢失变化历史并放大漂移。Profile 适合少量稳定字段,集合式 Memory 适合多条可独立检索事件;两者应分别测试合并冲突和召回噪声。
召回后仍需判断能否使用
Memory 搜索不是“Top-K 语义相似度”。先按租户、主体、Memory 类型、有效期和敏感策略过滤,再综合语义相关性、时效、重要度、置信和多样性排序。相似结果应去重,冲突结果成组返回,而不是只保留分数最高的一条。
进入 Context 时标明“这是历史派生 Memory,不是实时业务事实”。如果 Memory 会触发副作用,例如自动选择收货地址,应重新询问或读取权威系统。模型可以使用 Memory 形成建议,但服务端策略决定它能否影响动作。
遗忘与纠错是核心能力
时效衰减与过期。衰减不等于物理删除。它降低默认召回权重,适合可能随时间变化的偏好;安全规则和已确认过敏信息不能仅因时间自动降低,应由明确来源更新。
替代关系。新事实替代旧事实时,旧版本停止生效但保留审计边。查询默认只取当前版本,事故调查可沿关系回溯。
删除传播。删除不仅清除文本,还包括 Embedding、索引项、缓存、派生 Profile、后台任务输入和可能的 Eval 副本。使用 Tombstone 防止异步重建把已删记录重新写回。
错误经验的隔离。一次错误修复被写入程序性 Memory 后,可能跨会话持续伤害。发现后应立即停用、标记失败证据、定位所有派生规则并回归相关任务,而不是在末尾加一句“谨慎使用”。
评估“有记忆”是否比“无记忆”更好
离线测试至少包含应记、可记、不应记、已过期、相互冲突和已删除样本;分别测写入 Precision/Recall、召回正确率、冲突识别、删除有效性和敏感信息违规。端到端再比较无 Memory、原始历史、受治理 Memory 三种系统的任务成功、用户重复输入、错误影响和成本。
长期评测需要时间轴:先写入偏好,再改变偏好;先记录成功经验,再升级工具版本;删除后触发索引重建。只在同一轮对话问“你记得吗”无法覆盖漂移和纠错。
主动提取:为什么写入 Precision 往往比 Recall 更重要?
边界辨析:完整保存对话历史,为什么仍然不等于拥有长期 Memory?
迁移判断:语义相似度很高的旧故障经验,何时不能复用?
实践证据:一个 Memory Demo 怎样升级为可评审系统?
资料与事实边界
以下以官方文档、标准、论文和原始工程资料为主。厂商 API、价格、限额与模型能力会变化,落地时仍需按目标版本做能力探测和回归。
- Park et al.:Generative Agents — 观察、检索、反思和规划的实验性 Memory 架构;实验目标是行为可信度,不应外推为企业正确性结论
- Packer et al.:MemGPT — 分层 Memory 与有限 Context 之间的数据移动思路
- LangGraph:Memory overview — 短期线程状态、长期命名空间与热/后台写入的框架实现例证
- Anthropic:Effective context engineering for AI agents — 长时 Agent 的 Context 策划、压缩与外部 Memory 思路