
1. 引言:为什么 AI 总是“说完就忘”?
只要用过 AI 助手,多半都碰上过这种场面:聊了十几轮后,它忽然忘了你开头说的关键信息——你明明讲过"我是素食主义者",它却给你推牛排馆;你一小时前刚传了项目文档,它现在反问我"什么文档?"
这可不是模型"变笨了",而是它的记忆系统有明确的边界。
在 AI Agent 系统里,短期记忆(Short-Term Memory, STM)和 长期记忆(Long-Term Memory, LTM)的划分,决定了 Agent 能否从"一次性问答工具"长成"可长期协作的数字员工"。这篇文章会系统拆开两种记忆的本质差别,并深入讲清它们在实际工程里分别该用什么技术来存储和检索。
2. 核心区别:工作台 vs 图书馆
想弄懂两种记忆的差别,最直观的类比就是人类的认知系统:
-
短期记忆:就像你面前的工作台。桌面上摆着当前正在处理的所有材料——正在写的代码、刚翻开的参考页、脑子里记着的步骤。这个台面空间有限但拿取速度极快。一旦你起身离开(会话结束),台面就会被清空。
-
长期记忆:就像你身后的图书馆。里面存放着所有过往的经验、学到的知识和用户偏好。空间近乎无限但找一本书需要时间——你得先查目录、走到对应书架、抽出那本书。
具体区别,可以通过下表快速把握:
| 维度 | 短期记忆(STM) | 长期记忆(LTM) |
|---|---|---|
| 本质 | 工作内存 / 意识现场 | 知识库 / 经验档案 |
| 技术载体 | 大模型的上下文窗口 | 外部数据库(向量库、关系库) |
| 容量 | 有限且固定(4K ~ 1M Tokens) | 理论无限(PB 级可扩展) |
| 持久性 | 临时易失(会话结束即重置) | 永久持久(除非主动删除) |
| 访问方式 | 全局、直接(所有信息都在“眼前”) | 按需检索(基于相似性搜索) |
| 主要内容 | 对话历史、工具输出、即时推理链 | 用户画像、会话摘要、关键事实、学习成果 |
3. 短期记忆:AI 的“临时工作台”
3.1 它是什么?—— Transformer 的上下文窗口
技术上,短期记忆对应的就是大语言模型的上下文窗口(Context Window)。它是一条固定长度的 Token 序列,装着模型当前推理能"看见"的全部信息。
它的工作机制建立在 Transformer 架构的 KV 缓存(Key-Value Cache)之上。模型每生成一个新词,都会复用之前算过的注意力结果,从而保证毫秒级的响应速度。
3.2 存储与检索:直接、快速、全量
短期记忆的存法很"朴素":每次调 API 时,直接把所有内容拼进请求里。
典型的短期记忆“内容包”包括:
- 系统指令:Agent 的角色、能力和行为准则
- 对话历史:当前会话中所有交替出现的用户和助手消息
- 工具调用结果:Agent 调用外部 API 返回的数据
- 当前用户输入:最新提出的问题
至于"检索",就更简单了——压根没有检索这一步。因为所有信息都已在上下文窗口内,模型靠自注意力机制直接"看见"全部内容,无需额外查找。
3.3 核心挑战:容量天花板
短期记忆有两个绕不开的硬约束:
- 有限容量:当对话或任务超出窗口长度时,最早的信息会被“挤出”,导致 Agent 遗忘会话开头的内容。
- “迷失在中间”:即便物理空间还有余量,模型对中间位置信息的关注度会显著下降——信息“在场”但认知上可能已经“缺席”。
最新的优化方向之一是"选择性记忆压缩"——只保留对上下文有贡献的 Token,实验里把记忆利用率提了 3 倍、显存占用降了约 60%。
4. 长期记忆:AI 的“知识图书馆”
4.1 它是什么?—— 持久化的外部存储
长期记忆是 Agent 跨会话存储和积累知识的关键。它的实现不依赖模型上下文窗口,而是通过外部存储系统来构建。
4.2 存储策略:存什么?怎么存?
存什么并非所有短期记忆都值得长期保存。聪明的存储策略通常包括:
- 用户显式指令:“请记住我的生日是 X 月 X 日”
- Agent 自动摘要:会话结束时,LLM 提炼本次对话的关键要点
- 关键事实提取:从对话中抽取实体(人名、地点)和关系
- 经验与教训:任务执行成功或失败后的反思总结
怎么存主流方案采用“双轨制”:
- 结构化存储(关系数据库):用于存储会话元数据、用户信息、偏好设置等。例如 SQLite、MySQL,支持精确查询和事务管理。
- 向量化存储(向量数据库):将文本通过 Embedding 模型转换为高维向量,存入向量数据库(如 Chroma、FAISS、Milvus、Pinecone)。这是实现语义检索的基础。
4.3 检索策略:怎么“想”起来?
长期记忆的检索不是"一股脑全加载"(那会瞬间撑爆上下文),而是按需精准召回。典型流程是这样的:
- 查询向量化:将当前用户问题或对话上下文,通过同款 Embedding 模型转换为向量。
- 相似性搜索:在向量数据库中计算查询向量与所有存储向量的余弦相似度返回最相似的 Top-K 条记忆。
- 结果注入:检索到的记忆片段被动态插入到当前会话的“短期记忆”(上下文窗口)中,通常以“以下是关于用户的一些背景信息:…”的形式呈现。
以 OpenClaw 的内置记忆引擎为例,它提供三种检索模式:
- 关键词搜索:通过 FTS5 全文索引实现 BM25 评分匹配
- 向量搜索:通过任意支持的 Embedding 提供商(OpenAI、Gemini、Voyage 等)实现语义检索
- 混合搜索:同时结合关键词和向量搜索,取两者优势
索引采用分块策略(约 400 Token,重叠 80 Token),存储在 ~/.openclaw/memory/<agentId>.sqlite 中,文件变更会自动触发防抖重新索引。
5. 协同工作:一个完整的记忆链路
一个真正聪明的 Agent,不会只依赖单一类型的记忆,而是让两者无缝配合。拿 OpenClaw 来说,它的 Dreaming 机制就把这一链路完整演示了出来。
日常交互
短期记忆不断积累
Light阶段
排序并暂存近期短期材料
REM阶段
从轨迹中提取主题与反思信号
Deep阶段
加权评分,筛选高价值记忆
写入MEMORY.md
成为长期记忆
后续会话检索
从长期记忆中召回相关片段
这套系统用三个阶段完成记忆的"夜间整理":
- Light 阶段(轻睡眠):从短期召回状态和每日记忆中读取素材,去重并暂存候选条目。不写入长期记忆。
- REM 阶段(快速眼动):从近期短期轨迹中构建主题和反思摘要,产生强化信号。同样不写入长期记忆。
- Deep 阶段(深度睡眠):这才是真正“写入长期记忆”的环节。系统使用六个加权信号(相关性 0.30、频率 0.24、查询多样性 0.15、近期性 0.15、巩固度 0.10、概念丰富度 0.06)对候选条目打分,只有通过阈值门槛的才被追加到
MEMORY.md。
6. 工程实践建议
基于当下主流框架的实践,下面几条建议值得直接搬进项目:
- 存摘要而非全文:用 LLM 将长对话提炼为结构化的摘要再存入长期记忆,节省空间且提升检索质量。
- 向量检索优先于关键词:语义相似性搜索能找到表述完全不同但意思相近的历史记忆,准确率远高于传统全文匹配。
- 分层存储设计:将记忆分为“当前会话短期记忆”、“近期摘要”、“长期向量库”三层,按需逐级访问。
- 定期清理与合并:设置定时任务,合并相似记忆或删除不再有用的旧记录,避免向量库“越存越臃肿”。
7. 结语
短期记忆和长期记忆,是 Agent 认知架构的两根支柱。短期记忆保证 Agent 在当下任务里的流畅与专注;长期记忆则赋予它跨越时间的连续性与学习能力。
弄懂它们的区别,不是学术空谈,而是工程落地的必修课。在此之上,OpenClaw 的 Dreaming 机制还指出一个更前沿的方向——让 Agent 不止"存"和"取",而是像人一样,在"睡眠"中主动对记忆做巩固、提炼和升华最终实现从"记住"到"理解"的跨越。

评论0