content/03-rag/ai-memory-short-term-vs-long-term.md

短期记忆 vs 长期记忆:AI 工程师指南(2026)

译文说明:本文译自 mem0.ai 博客 Short-Term vs Long-Term AI Memory: Engineer's Guide,作者 Taranjeet Singh,发表于 2026 年 2 月 9 日。原文为 Mem0 官方技术博客,含产品宣传成分,阅读时请自行甄别。

作者:Taranjeet Singh | 2026 年 2 月 9 日

当你构建 AI 系统时,你很少会只面对单一的「记忆」问题。你需要在上下文窗口的限制、数据库延迟与隐私治理之间做出权衡。

本文面向机器学习工程师与基础设施架构师,探讨**易失性上下文(短期)持久化索引(长期)**在机制上的差异。理解不同记忆类型之间的区别,往往就是一个玩具级 Demo 与一个生产级应用之间的分水岭。

什么是 AI 记忆?

AI 记忆是一组机制,让模型能够跨越 token、对话轮次或会话来持久保存、检索和更新信息。它是无状态推理引擎与有状态用户体验之间的桥梁。正是这些机制,让 AI 应用得以在长时间跨度内有效运转。

我们可以把记忆类型组织成一个层级结构,与人类记忆相对应:

  • 感官输入缓冲区(Sensory input buffer):当下正在处理的原始 token。
  • 短期上下文(Short term context):受模型上下文窗口限制的、转瞬即逝的工作记忆。
  • 长期存储(Long term store):存在于模型权重之外、无界且持久的知识索引。
  • 整合(Consolidation):在后台将数据从短期存储迁移到长期存储的过程。

如需更深入地了解该主题,可参阅 什么是 AI 记忆 一文。

AI 中的短期记忆 vs 长期记忆

下表突出了你必须关注的、彼此独立又互为补充的角色。

维度短期记忆长期记忆
主要作用保存即时上下文与最近的 token。跨会话存储持久知识与历史数据。
典型规模小到中等(8k 到 128k token)。庞大、无界(GB 到 TB 级),用于存储海量数据。
延迟要求极低(亚毫秒级),以实现实时响应。可接受较高延迟(100ms 以上)用于检索。
表示形式原始 token 或注意力值。索引化的嵌入向量、文档、图谱。
更新模式高频、单次会话内的易失性写入。低频、持久化更新。
淘汰策略FIFO、LRU、token 裁剪。合并、摘要、归档。
失效模式内容截断、首因/近因偏差。数据陈旧、索引漂移、隐私泄露。
常见基础设施上下文缓冲区、Redis 缓存。向量数据库、搜索索引、S3。

与短期记忆不同,长期记忆会无限期地持续存在。这是一个根本性的差异,它决定了所有下游的架构选择。

记忆有哪些类型?

我们必须精确地定义术语,以避免歧义。

AI 中的短期记忆指的是大语言模型的上下文内学习(in-context learning)能力。它受到模型架构上下文窗口的约束。正如 Liu 等人的论文《Lost in the Middle: How Language Models Use Long Contexts》所详述的,模型并不会均匀地访问这部分记忆。相比放在开头或结尾的信息,置于长上下文窗口中间的信息往往会被忽略。这使得记忆成为一种有限资源,需要严格的记忆管理。

长期记忆是将状态外化到持久存储系统中的产物。Park 等人的论文《Generative Agents: Interactive Simulacra of Human Behavior》很好地诠释了这一模式——智能体维护一份完整的经历记录,以便回忆过往经验。在生产环境中,它通常表现为一个向量数据库或图存储,从而将知识保留与推理成本解耦。

  • **情景记忆(Episodic memory)**记录具体事件与过往交互(例如「用户昨天上传了一个 PDF」)。它是按时间顺序排列的。
  • **语义记忆(Semantic memory)**存储事实与概念(例如「Python 是一种编程语言」)。它往往源于积累的知识。
  • **程序性记忆(Procedural memory)**存储习得的行为与「操作方法」类知识(例如「要重启服务器,运行命令 X」)。它让 AI 智能体能够自动执行任务。

短期记忆

每当你向一次 OpenAI API 调用的 messages 数组追加一条消息时,你就在与短期记忆打交道。

AI 短期记忆的特征

短期记忆位于应用的「热」路径上。它是严格同步的。如果你的记忆检索出现延迟,你的首 token 响应时间(time-to-first-token)也会随之延迟。由于它直接处于活动上下文中,你所使用的每一个字节的短期记忆,都会在每一次推理过程中产生成本。它默认是易失的——当正在进行的对话结束时,这部分记忆便会消失,除非你显式地将其保存下来。

常见实现

  • 上下文滑动窗口(Context sliding windows):你保留最近 N 轮对话历史的固定缓冲区。新消息会把最旧的消息挤出去。
  • Token 预算(Token budgeting):你主动统计 token 数量,并基于启发式规则裁剪消息。
  • KV 缓存(KV Cache):在推理服务器一侧,键值(Key-Value)缓存存储注意力矩阵以加速生成。

应用场景

  • 槽位填充(Slot filling):在多轮对话中为某个进行中的任务收集参数。
  • 指代消解(Reference resolution):理解用户输入「现在就买它」中的「它」指代什么。
  • 指令遵循(Instruction adherence):维持系统提示中定义的人设或规则,以确保回应连贯。

挑战

主要的失效模式是上下文截断。当一段对话超出窗口时,你必须删除相关信息。这常常导致单次会话内的「灾难性遗忘」。另一个问题是**注意力沉没(attention sink)**现象——无关的开场白消耗了本应分配给用户最新提问的注意力预算。

长期记忆

长期记忆是你构建关系而非仅仅是单次交易的方式。它让 AI 系统能够在数月乃至数年的跨度内识别模式。

AI 长期记忆的特征

这种记忆是异步且可索引的。它不存在于推理链路之中。相反,你使用检索机制(RAG),仅在需要时才把相关细节拉入上下文窗口。它实际上为你的模型提供了无限的背景信息存储能力,但代价是检索的复杂性。这一基础方法在 Lewis 等人的论文《Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks》中有详细阐述。

常见实现

  • 向量数据库(Vector databases):将文本块的稠密嵌入向量存储在 Qdrant 或 Pinecone 之类的数据库中。
  • 知识图谱(Knowledge graphs):存储实体及其关系(例如「用户」→「偏好」→「Python」),以捕捉结构化事实。
  • 文档存储(Document stores):保存用户画像的原始 JSON 数据块。

应用场景

  • 个性化(Personalization):记住用户偏好与个人习惯,例如编码风格或饮食限制。
  • 基于事实的问答(Grounded QA):基于企业知识库回答问题。
  • 智能体规划(Agentic planning):自主智能体利用过往经验,避免在多步骤任务中重蹈覆辙。

挑战

检索精度是这里的硬性瓶颈。如果你的搜索返回了无关的文本块,你就会用噪声污染上下文,从而提高幻觉率。数据陈旧则是另一个无声的杀手。如果用户更新了地址,而你的记忆系统仍保留旧的嵌入向量,模型就会自信地生成错误答案。

AI 智能体如何结合短期记忆与长期记忆?

大多数生产系统两者都需要。你既需要短期记忆带来的即时连续性,也需要长期记忆带来的深度回忆能力。这两者在实现最优性能上扮演着互补的角色。

架构模式

标准的模式是「写穿透(write-through)」缓存。

  1. 接收(Ingest):用户发送一条消息。
  2. 短期写入(Short term write):消息追加到会话缓冲区。
  3. 检查(Check):系统查询长期索引以获取相关信息,并将其注入上下文。
  4. 生成(Generate):模型作出回应。
  5. 整合(Consolidate):一个异步工作进程分析对话历史。如果发现有价值的事实(「我叫 Sarah」),它会将其提取出来并写入长期索引。

Mem0 如何解决 AI 记忆问题?

Mem0 是一个通用的 AI 记忆层,负责处理上述编排工作。你无需编写自定义的胶水代码在 Redis(短期)与向量数据库(长期)之间搬运数据,Mem0 提供了单一的 API。它会自动管理情景存储的「热」能力与语义记忆的「冷」存储,帮助你维持上下文并记住用户偏好。

Mem0 还采用了**图记忆(Graph Memory)**架构,捕捉实体之间的关系,超越单纯的向量相似度,从而理解结构化知识。

如何为 AI 智能体实现记忆?

在构建你的智能体记忆子系统时,请使用以下检查清单。

数据模型与 Schema

不要只是堆砌原始文本。把每一个记忆条目都包装成结构化格式(JSON),其中包含:

  • content:文本负载。
  • created_at:UTC 时间戳。
  • learned_patterns:用于行为分类的标签。
  • embedding:向量表示。

向量化流水线

尽早标准化你的嵌入模型。如果之后你从 OpenAI 切换到 Cohere,就必须重新索引海量数据。批量发送嵌入请求以避免触发速率限制。如果使用点积相似度,请对向量进行归一化,以高效处理数据。

索引策略

对于较大的数据集(10 万条向量以下),扁平索引(flat index)既快又准。对于更大规模(100 万条以上),使用 HNSW(分层可导航小世界)索引。它们以微小的精度损失换取巨大的速度提升与能效改善。

淘汰与整合策略

不要什么都留着。为短期缓冲区实现「最近最少使用」(LRU)策略。对于长期存储,使用「相关性评分」来定期裁剪低价值的记忆。如果一段记忆 6 个月内都未被检索,就把它移到冷存储。

一致性与并发

你会遇到竞态条件。如果两个用户请求同时到达,它们可能都会尝试更新会话状态。使用乐观锁或原子数据库操作(如 Redis 的 WATCH),确保你不会覆盖数据。

成本与可观测性

监控你的「上下文利用率」。如果你持续地用检索到的记忆填满 90% 的上下文窗口,成本将会爆炸式增长。通过记录在使用了记忆的情况下用户拒绝模型答案的频率,来追踪「检索相关性」。

如何评估检索机制与记忆性能?

无法度量,就无法改进。

  • 延迟 P99(Latency P99):追踪检索记忆所需的时间,应保持在 200ms 以内。
  • 召回率 @K(Recall at K):如果答案确实在你的数据库中,它是否出现在了前 5 个结果里?
  • 精确率 @K(Precision at K):前 5 个结果中有多少是真正有用的?
  • 事实性(Factuality):使用一个经过微调的二级评分 LLM,来验证生成的答案是否与检索到的事实相符。

如何在记忆系统中处理用户偏好与隐私?

记忆是一种负债。存储用户数据会带来隐私风险。

  • 访问控制(Access control):实现行级安全(RLS)。确保用户 A 永远无法检索到属于用户 B 的向量。Mem0 通过用户命名空间原生地处理这一点。
  • 数据最小化(Data minimization):只存储回答未来问题所必需的内容。
  • 被遗忘权(Right to be forgotten):当用户要求删除其数据时,你必须同时删除原始日志向量嵌入。如果你没有追踪数据血缘(lineage),这一点会很难做到。

对话式 AI 与智能体记忆架构是什么样的?

  • 最简架构(Minimal architecture):一个简单的 Python 脚本,用本地字典保存历史、用本地 FAISS 索引做检索。适合对话式 AI 的原型验证。
  • 生产架构(Production architecture):一个 FastAPI 服务,用 Redis 保存短期会话状态、用 Qdrant 做长期存储。一个异步 Celery 工作进程处理已完成的会话,以提取事实(使用 Mem0)并更新图谱。
  • 研究引领者(Research leaders):关注 Google DeepMind 和 OpenAI 在「无限上下文」与「神经记忆」方面的工作。它们往往为未来一年的工程模式指明方向。

常见的记忆管理陷阱有哪些,如何避免?

  • 「全部保存」陷阱:存储每一句「你好」和「谢谢」会稀释你的索引。使用过滤器,只保存与具体任务相关的实质性内容。
  • 粗暴淘汰(Naive eviction):盲目地砍掉对话上下文的开头部分,会删掉系统提示。务必固定(pin)住提示词。
  • 忽视隐私:将 PII(个人可识别信息)存入向量,会使审计变得困难。在嵌入之前对数据进行匿名化处理。

结论

将易失性上下文与持久化索引分离开来,是构建能够长期保持连贯性的 AI 应用的唯一途径。短期记忆赋予你单次会话内的对话流畅度;长期记忆则赋予你跨越长时间跨度识别模式、运用知识的能力。两者结合,构成了现代智能体 AI 所需的完整「AI 记忆」。从一个稳固的短期缓冲区起步,但要在用户触及上下文上限之前,就规划好你的长期策略。

评论