Memory / Persistence
这一节解决什么问题
Memory / Persistence 解决的是 Agent 如何记住信息、保存状态、跨轮次延续任务的问题。
普通聊天机器人主要依赖对话历史;工程化 Agent 不能只靠历史消息。真实任务需要区分当前会话状态、长期用户偏好、工具执行结果、任务中间产物和可复用经验。如果这些信息都混在上下文里,系统会越来越难维护。
Memory 不等于聊天历史
聊天历史只是 Memory 的一种来源,不是 Memory 本身。
Memory 更准确地说,是 Agent 系统对“可复用信息”的结构化管理。它关注:
- 什么信息值得保存;
- 保存到哪里;
- 什么时候取出来;
- 取出来后如何压缩和注入上下文;
- 什么时候更新或删除。
如果不做筛选地保存所有历史,Memory 会变成噪声仓库。
常见 Memory 类型
Short-term Memory
短期记忆用于当前任务,例如本轮对话目标、当前步骤、中间结果、工具返回摘要。
它通常和 Session / State 绑定,任务结束后可以归档或丢弃。
Working Memory
工作记忆用于任务执行过程中的临时信息,例如待办清单、当前计划、已完成步骤、失败原因。
它比短期记忆更结构化,适合被 Runtime 频繁读写。
Long-term Memory
长期记忆保存跨会话稳定信息,例如用户偏好、长期项目背景、常用约束、历史经验。
长期记忆不能随意写入。写入前应该判断它是否稳定、是否可复用、是否会过期。
Episodic Memory
情景记忆保存一次完整任务经历,例如某次执行的目标、步骤、结果和失败原因。
它适合用于复盘、相似案例召回和经验沉淀。
Semantic Memory
语义记忆保存知识型内容,例如文档片段、概念解释、业务规则、技术资料。
RAG 知识库可以看作 Semantic Memory 的一种实现。
Persistence 解决什么
Persistence 是持久化层,负责把状态和记忆保存到外部系统中。
常见持久化对象:
- Conversation:对话记录
- Session:当前会话状态
- Task:任务状态和阶段
- Trace:执行轨迹
- Artifact:文件、中间产物、报告
- Memory:长期偏好和可复用经验
- Evaluation:评测结果和失败样本
Persistence 的重点不是“存下来”,而是“能恢复、能查询、能审计”。
Context Compression
长任务会导致上下文膨胀。Memory 系统必须配合上下文压缩,否则模型会被历史噪声淹没。
压缩时优先保留:
- 用户目标和硬约束
- 已确认的关键事实
- 当前任务状态
- 已完成步骤和未完成步骤
- 工具调用结果摘要
- 失败原因和避免重复的提醒
可以压缩或丢弃:
- 重复寒暄
- 已过期的计划
- 低价值中间推理
- 超长原始工具输出
- 和当前任务无关的历史内容
Memory 写入原则
不要让 Agent 把所有内容都写进长期记忆。推荐使用写入门槛:
- 稳定性:这条信息未来是否仍然成立?
- 复用性:未来任务是否会用到?
- 可验证性:信息来源是否可靠?
- 安全性:是否包含隐私、密钥或敏感信息?
- 粒度:是否足够简洁,避免整段原文污染记忆?
只有满足这些条件的信息,才适合进入 Long-term Memory。
常见误区
误区一:上下文越多越好
上下文越多,模型不一定越聪明。无关信息会稀释关键约束,增加成本,也可能引入冲突。
误区二:把 Memory 当向量库
向量库适合语义检索,但 Memory 还包括结构化状态、任务进度、用户偏好和执行经验。Memory 不是单一技术,而是一套信息管理策略。
误区三:长期记忆自动写入
自动写入容易污染记忆。高价值长期记忆应该经过规则判断,必要时需要用户确认。
误区四:没有遗忘机制
Memory 需要更新和遗忘。过期偏好、错误事实、临时决策如果长期保留,会影响后续任务。
面试表达
可以这样表达:
> 我不会把 Memory 简单理解成聊天历史或向量数据库。工程化 Agent 里,Memory 应该分层:短期记忆维护当前任务,工作记忆支撑执行过程,长期记忆保存稳定偏好和经验,语义记忆承载外部知识。持久化层要保存 Session、Task、Trace 和 Artifact,让任务可恢复、可审计。关键是控制写入和召回,不把所有历史无脑塞进上下文。