记忆架构
记忆不是上下文窗口的无限扩展,也不是把所有日志放进向量数据库。记忆是经过选择、评价、编码、存储、检索、使用和遗忘的经验。
记忆与其他数据的区别
| 数据类型 | 目的 | 是否直接影响未来决策 |
|---|---|---|
| 原始日志 | 记录系统活动 | 否,需要解释和筛选 |
| 事件记录 | 描述已发生事实 | 可能,是记忆候选来源 |
| 快照 | 恢复一致状态 | 是,但不等于经验 |
| 上下文 | 支持当前推理 | 是,通常短期有效 |
| 记忆 | 保存可复用经验 | 是,需要来源和适用范围 |
| 知识库 | 提供外部参考资料 | 是,但不属于 Agent 自身经历 |
把日志直接称为记忆,会丢失“为什么值得记住”和“未来何时适用”两个关键问题。
五层记忆模型
| 层级 | 回答的问题 | 典型内容 | 默认生命周期 |
|---|---|---|---|
| Working Memory | 我正在处理什么? | 当前目标、计划、局部推理、临时变量 | 任务或会话级 |
| Episodic Memory | 我经历过什么? | 事件、过程、结果、参与者、评价 | 中长期,允许压缩 |
| Semantic Memory | 我知道什么? | 从多次经验或可信来源抽取的事实与规律 | 长期,需更新和冲突处理 |
| Procedural Memory | 我会怎样做? | 已验证技能、流程、策略和适用条件 | 版本化长期保存 |
| Self Memory | 我如何变化? | 能力表现、失败模式、偏差、限制、成长历史 | 长期且高敏感 |
这五层可以采用不同存储技术,但必须通过稳定引用互相关联。
记忆生命周期
Experience
-> Candidate Selection
-> Evaluation
-> Encoding
-> Storage
-> Retrieval
-> Use and Outcome
-> Reinforce / Revise / Decay / Forget
经验形成
经验由一组带时间和因果关系的事件组成。单个工具返回值通常不足以成为经验;至少需要目标、动作、结果和评价上下文。
候选选择
以下情况可以提升记忆价值:
- 结果显著优于或差于预期;
- 发现了新的稳定规律;
- 出现高风险故障或恢复成功;
- 人类显式要求保存;
- 经验可以泛化到多个未来场景;
- 经验改变了自我模型或能力判断。
频繁、低价值、可从权威数据重新计算的内容通常不应进入长期记忆。
评价与编码
记忆编码至少保存:
MemoryRecord
├── memory_id
├── agent_id
├── type
├── summary
├── source_refs
├── observed_at / encoded_at
├── scope and applicability
├── confidence
├── sensitivity and visibility
├── evaluator and evaluation_method
├── version / supersedes
├── retention_policy
└── usage_stats / last_used_at
摘要不能替代来源。任何抽取或压缩后的记忆都应能追溯到原始事件或权威资料。
检索模型
检索不是只按向量相似度排序。一个可解释的候选评分可以综合:
score = relevance
× confidence
× applicability
× permission
× freshness
× historical_utility
- contradiction_penalty
- sensitivity_cost
具体公式是实现选择,但以下约束必须成立:
- 权限不满足的记忆不能因相关性高而被返回;
- 已过期或被新版本替代的记忆必须降权或隐藏;
- 冲突记忆不能被静默合并为单一事实;
- 检索结果应说明为什么命中以及来自哪里;
- 使用后的实际效果应反馈到记忆效用评价。
冲突与更新
当新经验与旧记忆冲突时,不应直接覆盖。处理流程应为:
- 保存新观察及其来源。
- 标记冲突范围和受影响记忆。
- 比较来源权威性、时间、环境和适用条件。
- 选择确认、修订、限定适用范围或保留不确定性。
- 建立
supersedes或冲突关系。 - 重新评价依赖旧记忆的程序性策略。
遗忘、降权与压缩
遗忘是资源治理和认知质量机制,不是简单删除。可以采用:
- 时间衰减:长期未使用且低价值的记忆降低权重;
- 结果衰减:多次使用未产生正向效果时降低权重;
- 摘要压缩:将大量相似情景合并为保留来源的模式;
- 版本替代:隐藏已被新事实或新流程明确替代的内容;
- 策略删除:根据隐私、合规或所有者请求删除;
- 冷归档:退出在线检索但保留审计能力。
删除必须考虑派生数据:删除原始记忆后,基于它生成的语义结论、程序性策略和自我模型也可能需要重新评估。
共享与隔离
记忆可见范围至少包括:
private:仅所属 Agent;relationship:指定协作关系内可见;team:团队或任务空间内可见;tenant:租户内受策略控制地可见;public:允许公开检索。
共享需要同时满足:原始来源允许共享、内容敏感度允许共享、接收方有用途授权、派生使用受同等或更严格约束。
“共享摘要”也可能泄露原始敏感信息,不能因为经过模型总结就自动降低安全等级。
自我记忆的特殊风险
Self Memory 会直接影响 Agent 对自身能力和限制的判断,因此需要更严格的证据:
- 模型自述不能单独证明能力;
- 一次成功不能证明稳定熟练;
- 一次失败不能永久定义能力上限;
- 能力评分需要明确任务分布、评价方法和样本规模;
- 更新自我模型应保留旧版本和回退原因。
记忆安全
主要风险包括提示注入被长期保存、隐私数据跨 Agent 泄露、错误摘要覆盖事实、过期策略继续被使用,以及攻击者通过重复输入提高错误记忆权重。
防护要求:
- 进入长期记忆前进行来源和内容检查;
- 将外部指令与系统授权分离存储;
- 对敏感字段分类、加密和最小化;
- 检索时重新执行权限检查;
- 对高影响程序性记忆设置人工或自动验证门禁;
- 记录每次记忆使用对决策的影响。
记忆质量指标
| 指标 | 含义 |
|---|---|
| Precision | 被检索的记忆中实际有帮助的比例 |
| Recall | 需要的关键记忆是否被找到 |
| Provenance coverage | 有完整来源引用的记忆比例 |
| Contradiction rate | 检索结果中未处理冲突的比例 |
| Staleness | 使用已过期记忆的频率 |
| Utility | 记忆使用后对任务结果的实际改善 |
| Leakage | 越权或跨边界暴露次数 |
只优化相似度或检索速度,不能证明记忆系统有效。
验收场景
- 同一事实出现互相冲突的来源时,结果保留冲突和来源,而不是随机选一个;
- 权限被撤销后,缓存或索引不能继续返回受限记忆;
- 删除敏感情景记忆后,派生摘要和程序性记忆被识别并处理;
- 旧流程被新版本替代时,执行面不会继续检索旧版本;
- 一次异常成功不会立即提升长期能力评分;
- 快照恢复后,记忆索引游标和权威存储保持一致。