Agent 中的 Memory 有哪些类型?
Agent 中的 Memory 有哪些类型?短期记忆和长期记忆分别解决什么问题?

Agent 为什么需要 Memory?这个问题先想清楚。
本质原因是:大模型的 Context 窗口是有限的,但真实场景里你需要记住的东西可能是海量的。比如用户跟 Agent 聊过的事情、之前做过的决策、积累下来的经验——这些东西没法全塞进 Prompt 里,就得靠 Memory 来管理。
Memory 在 Agent 架构里扮演的是「外部知识库」角色,它让 Agent 不是每次都从零开始,而是能记住上下文、积累经验。下面分两块来讲:两套分类体系和短长期记忆各自解决的问题。
一、Agent 记忆的两套分类体系
讲 Memory 先得分清楚两个视角——按存储形式分和按功能分,这是两个不同的维度。
存储形式:东西存在哪儿
| 存储形式 | 怎么存的 | 典型例子 |
|---|---|---|
| 词元级记忆 | 把信息转成文本,存进向量数据库 | Qdrant、Chroma、Milvus |
| 参数化记忆 | 直接编码进模型权重 | Fine-tuning 训练出来的知识 |
| 潜在记忆 | 存在 KV Cache 里,用隐变量表示 | 各种注意力机制的中间状态 |
最常见的是词元级记忆——也就是 RAG 那一套:把文本向量化,检索时算相似度召回。参数化记忆更多是预训练阶段的事,Agent 运行时主要靠前两种。潜在记忆最近研究比较多,比如让模型学会「记住」某些模式而不是显式存储。
功能分类:记忆派什么用场
| 功能类型 | 解决什么问题 | 类比 |
|---|---|---|
| 工作记忆 | 当前正在思考的内容 | 大脑正在想的事 |
| 事实记忆 | 知道的事实和知识 | 你掌握的信息 |
| 经验记忆 | 从经历中学到的教训 | 踩过的坑、下次怎么改 |
这个分类更贴近 Agent 的实际工作流程。工作记忆负责「当下」,事实记忆负责「知道」,经验记忆负责「改进」。
把这两个维度组合起来,就是一个 3×3 的记忆类型矩阵:

记住这个矩阵有啥用?面试的时候你能说清楚「我这用的是哪种记忆、在解决什么问题」,而不是笼统地说「我们用了 Memory」。
二、短期记忆解决什么问题
短期记忆解决的核心问题是:当前这轮对话里,关键信息别丢。
具体来说,它承载三样东西:
- 对话历史 —— 聊到现在说了啥
- 工具调用结果 —— 之前执行的操作和返回值
- 中间状态 —— Agent 思考到哪一步了
短期记忆的直接表现就是 Context 窗口。每次你发消息,Agent 并不是只看到你这句话,而是把之前整段对话都塞进 Prompt 里。
这个过程大概长这样:

举个例子感受一下:
用户:帮我查一下北京今天的天气
Agent:调用 weather API,返回"晴,26度"
用户:明天呢?第二句「明天呢?」单独拎出来是不知道问啥的,但加上短期记忆里的「查北京天气」,Agent 就能理解这是在问北京明天天气。这就是短期记忆的价值——保持本轮对话的连贯性。
短期记忆的天花板是 Context 窗口大小。窗口大,能记住的对话就长;窗口满了,要么截断老对话,要么 Summarize 压缩。所以短期记忆是个「用完就没」的资源。
三、长期记忆解决什么问题
长期记忆解决的核心问题是:新会话能恢复老用户的信息。
短期记忆是「用完就没」,长期记忆是「存下来以后用」。典型场景:
- 用户隔了三天又来用 Agent,Agent 能叫出他的名字、记住他的偏好
- Agent 做过一次复杂任务,下次遇到类似的能调用经验
- 多轮对话中途被打断,回来能接着干
长期记忆的实现方式就多了,常见的有这几种:
向量数据库 —— 把信息向量化存进去,检索时用语义相似度召回。比如用户说「上次我让你帮我写的那个脚本」,系统能找到之前存的代码记忆。
知识图谱 —— 用图结构存储实体关系。比如「用户A 喜欢 咖啡」这个三元组,比纯文本更结构化,推理能力更强。
文件/数据库 —— 直接用 Markdown、JSON、SQLite 存。Claude Code 的 CLAUDE.md 就是典型,存成文件,运行时读取。
这几种方案各有优劣:
| 方案 | 优点 | 缺点 |
|---|---|---|
| 向量数据库 | 语义检索强 | 精确查询弱 |
| 知识图谱 | 结构化、可推理 | 构建成本高 |
| 文件存储 | 简单直接 | 检索能力有限 |
长期记忆的典型工作流:

Session 1 结束时把用户偏好写入长期记忆,Session 2 开始时先检索一下有没有这个用户的历史记录——有的话捞出来塞进 Prompt,新会话就能「认识」老用户了。
四、记忆的生命周期与管理
知道了有哪些记忆类型,接下来要理解记忆不是「存进去就完事了」——它有自己的生命周期。
六阶段循环
记忆从产生到消亡会经历六个阶段:
- 编码 —— 把信息转成 Agent 能处理的格式(文本、向量、状态)
- 存储 —— 把编码后的信息持久化(写进数据库、文件、内存)
- 提取 —— 需要的时候召回相关记忆(检索、匹配)
- 巩固 —— 强化重要记忆的权重(定期复习、重新编码)
- 反思 —— 从经历中抽象出经验(总结教训、提炼模式)
- 遗忘 —— 淘汰不再需要的信息(释放空间、避免干扰)
这六个阶段形成了一个循环:

很多实现只做了前三步——编码、存储、提取。但真正好用的 Agent 会做「反思」这一步:让 Agent 定期回顾自己做过的决策,分析哪些地方可以改进,然后把结论存成经验记忆。
遗忘机制
记忆不是存得越多越好。存太多会导致检索噪音变大、推理成本上升。
常见的遗忘策略:
- 时间衰减 —— 很久没被访问的记忆,逐步降低权重
- 访问频次 —— 用得少的记忆,优先级降低
- 冲突标记 —— 新记忆和旧记忆矛盾时,标记冲突待解决
一个简单的实现是:每次访问记忆时更新 last_accessed 时间戳,定期清理超过 N 天没访问的记录。复杂一点的会用 LRU(最近最少使用)或者更高级的衰减函数。
业界方案一览
不同产品对记忆的实现思路差异挺大的:
| 产品 | 方案特点 | 适用场景 |
|---|---|---|
| Mem0 | 多层记忆(用户级、Session级、Agent级) | 通用场景 |
| LETTA | 支持记忆的增删改查,有生命周期管理 | 复杂 Agent |
| ZEP | 专注长期记忆,提供记忆搜索 API | 快速集成 |
| A-MEM | 动态记忆,按需加载/卸载 | 资源敏感场景 |
选型的时候主要看你的 Agent 复杂度程度。简单场景用一个向量库就够了,复杂场景需要完整生命周期管理的方案。

面试怎么答
基础版(100-150字)
Agent Memory 按存储形式分三类:词元级(向量库文本)、参数化(模型权重)、潜在记忆(KV Cache)。按功能分三类:工作记忆(当前思考)、事实记忆(知道什么)、经验记忆(如何改进)。
短期记忆解决「本轮对话上下文不丢」的问题,依赖 Context 窗口,存对话历史和工具调用结果。长期记忆解决「跨会话信息持久化」的问题,靠向量库、知识图谱或文件存储来记住用户偏好和历史决策。
加分版(多提到的点)
除了基础回答,可以补充:
- 记忆不是存进去就完事 —— 有完整的生命周期管理,编码→存储→提取→巩固→反思→遗忘六阶段循环
- 遗忘机制很重要 —— 用时间衰减函数避免知识过载,不是存越多越好
- 反思是关键步骤 —— 好的 Agent 会从历史经验中提炼模式,不是每次都从零学习
- Claude Code 的思路 —— 长期记忆不一定要向量检索,用 Markdown 文件+约定好的目录结构也能work,CLAUDE.md 就是例子
一句话总结
Agent Memory 的核心是:短期记忆靠 Context 窗口解决本轮对话连贯性,长期记忆靠持久化存储解决跨会话信息恢复,两者配合让 Agent 不是每次都从零开始。
