Memory 短期长期记忆区别存储检索 整理
Memory_短期长期记忆区别存储检索
问题
Memory_短期长期记忆区别存储检索
标准回答
解释「短期记忆」和「长期记忆」在 Agent 系统中的区别,分别适合怎么存储和检索?
短期记忆:在当前会话或最近几轮对话中临时存储的信息,容量有限,生命周期短(通常一个会话)。长期记忆:跨会话持久化存储的用户偏好、事实知识或历史决策,需要主动写入和检索。
| 维度 | 短期记忆 | 长期记忆 |
|---|---|---|
| 生命周期 | 单次会话或最近N轮 | 跨会话持久 |
| 容量 | 受模型 Context Window 限制 | 理论无限 |
| 存储方式 | 内存或会话缓存 | 向量数据库、关系库或文件 |
| 检索方式 | 顺序读取或滑动窗口 | 语义搜索或关键词匹配 |
| 典型应用 | 多轮对话上下文 | 用户画像、知识库 |
存储与检索建议:
- 短期记忆:存储在 Redis 或内存缓存中,按会话 ID 隔离,使用 LRU 淘汰策略。检索时按时间顺序拼接进 Prompt。
- 长期记忆:写入向量数据库(如 Milvus、Qdrant)或关系库。检索时对用户查询做 Embedding,召回 Top-K 相关条目,再注入上下文。
扩展知识
1. 记忆的生命周期管理
- 短期→长期沉淀:通过定时任务或会话结束时,让 Agent 自动总结本次对话的关键信息,调用
memory_upsert_longterm工具写入长期库。 - 记忆衰减:对长期记忆可按时间衰减权重,避免过时信息干扰(如半年前的用户偏好可能已改变)。
2. 记忆检索的时机
- 主动检索:每轮对话前,用当前用户输入作为查询,去长期记忆库捞取相关条目,与短期记忆一起注入。
- 按需检索:只有当用户明确问“还记得我之前说过…吗”或任务明显依赖历史信息时才触发检索。
3. 常见框架的实现
- LangChain:
ConversationBufferMemory(短期)+VectorStoreRetrieverMemory(长期)。 - Spring AI:可自定义
Advisor在每次调用前加载记忆,或用@PostConstruct初始化记忆组件。
面试官追问
Q1:短期记忆超出 Context Window 怎么办?
A:采用滑动窗口,只保留最近 N 轮对话。更激进的策略是调用 LLM 对早期对话做摘要压缩(Compaction),用摘要替代原始消息。
Q2:长期记忆写入时如何避免重复或冲突?
A:写入前先做相似度去重,若已有相似条目则合并或更新。业务上可要求用户显式确认覆盖。
Q3:如何确保 Agent 不把敏感信息写入长期记忆?
A:在写入前加一层过滤:用规则或小模型检测密码、身份证等敏感字段,或让 Agent 在写入前询问用户“是否记住这条信息”。
总结
短期记忆服务于当前会话的连贯性,长期记忆沉淀跨会话的价值信息。两者结合可让 Agent 既有“鱼”的短期缓存,又有“渔”的长期知识库。实现时需关注生命周期管理、检索时机与隐私安全。
关键点
短期记忆:在当前会话或最近几轮对话中临时存储的信息,容量有限,生命周期短(通常一个会话)。
- 长期记忆:跨会话持久化存储的用户偏好、事实知识或历史决策,需要主动写入和检索。
- | 维度 | 短期记忆 | 长期记忆 | |------|----------|----------| | 生命周期 | 单次会话或最近N轮 | 跨会话持久 | | 容量 | 受模型 Context Window 限制 | 理论无限 | | 存储方式 | 内存或会话缓存 | 向量数据库、关系库或文件 | | 检索方式 | 顺序读取或滑动窗口 | 语义搜索或关键词匹配 | | 典型应用 | 多轮对话上下文 | 用户画像、知识库 |
存储与检索建议:
- 短期记忆:存储在 Redis 或内存缓存中,按会话 ID 隔离,使用 LRU 淘汰策略。
- 检索时按时间顺序拼接进 Prompt。
备注
Memory_短期长期记忆区别存储检索
短期记忆:在当前会话或最近几轮对话中临时存储的信息,容量有限,生命周期短(通常一个会话)。长期记忆:跨会话持久化存储的用户偏好、事实知识或历史决策,需要主动写入和检索。
- | 维度 | 短期记忆 | 长期记忆 | |------|----------|----------| | 生命周期 | 单次会话或最近N轮 | 跨会话持久 | | 容量 | 受模型 Context Window 限制 | 理论无限 | | 存储方式 | 内存或会话缓存 | 向量数据库、关系库或文件 | | 检索方式 | 顺序读取或滑动窗口 | 语义搜索或关键词匹配 | | 典型应用 | 多轮对话上下文 | 用户画像、知识库 |
存储与检索建议:
- 短期记忆:存储在 Redis 或内存缓存中,按会话 ID 隔离,使用 LRU 淘汰策略。检索时按时间顺序拼接进 Prompt。
-
- 长期记忆:写入向量数据库(如 Milvus、Qdrant)或关系库。检索时对用户查询做 Embedding,召回 Top-K 相关条目,再注入上下文。
-
短期→长期沉淀:通过定时任务或会话结束时,让 Agent 自动总结本次对话的关键信息,调用
memory_upsert_longterm工具写入长期库。 -
本文已做格式统一与噪声清理,保留原始语义。
-
短期记忆:在当前会话或最近几轮对话中临时存储的信息,容量有限,生命周期短(通常一个会话)。长期记忆:跨会话持久化存储的用户偏好、事实知识或历史决策,需要主动写入和检索。
-
| 维度 | 短期记忆 | 长期记忆 |
-
|------|----------|----------|
-
| 生命周期 | 单次会话或最近N轮 | 跨会话持久 |
-
| 容量 | 受模型 Context Window 限制 | 理论无限 |
-
本文已做格式统一与噪声清理,保留原始语义。
Share Article
If this article helped you, please share it with others!