Memory OS:AI Agent 不是缺记忆,而是缺一套记忆系统

上一篇文章《为什么 AI Agent 的长期记忆几乎都是错的?》讨论的是一个更表层、但也更常见的问题:为什么很多 AI Agent 的长期记忆经常出错。

结论并不复杂。问题通常不在模型"记不住",而在系统"不会记"。历史对话被切成碎片,检索出来一些相关内容,再拼回上下文,看起来像是有了记忆,但一旦进入跨时间、多条件、状态变化这些场景,错误就会很快暴露出来。

继续往下追问,一个更关键的问题就来了:

如果"聊天记录 + 检索"不等于长期记忆,那么一套真正可用的记忆系统,到底应该长什么样?

这篇文章想回答的,就是这个问题。

这不是一篇论文综述,也不是一篇框架说明书。更准确地说,这是一篇系统定义篇:试着把"长期记忆系统"这件事,从一个模糊概念,拆成几个真正可落地的工程层次。


一、从"记不住"到"不会记",问题要继续往下拆

很多团队第一次给 Agent 做长期记忆,通常会先想到两个方向:

一是把上下文拉长。 二是把历史存进向量库。

这两个方向都合理,也都能解决一部分问题。但它们解决的,本质上还是"怎么把更多历史留住",而不是"怎么把历史变成真正可用的记忆"。EverMemOS 论文就明确指出,很多现有 memory 方法把记忆当成扁平的、分散的记录集合,结果不是缺少信息,而是缺少整合:系统能找回事实,却难以形成稳定用户模型,也难以处理冲突与状态变化。

这也是为什么很多 Agent 的表现会出现一种很奇怪的反差:

  • 问一个昨天聊过的小细节,它能答对;
  • 但只要问题牵涉多个时间点、多个约束或者当前状态,它就开始摇摆、遗漏、甚至前后矛盾。

从工程角度看,这说明问题并不只是 retrieval 精度不够,而是整个系统没有形成一套像样的记忆机制。

也就是说,真正缺少的不是某个召回 trick,而是一套 Memory System

可以先把这一篇的核心判断放在这里:

AI Agent 要想真正拥有长期记忆,首先需要的不是更大的上下文,而是一套像样的 Memory OS。


二、为什么"聊天记录"不能直接当长期记忆

这是一个很容易被忽略、但几乎决定后续上限的问题。

很多系统会默认认为:只要把历史对话保存下来,记忆这件事就已经完成了一半。可实际上,原始聊天记录更像日志,不像长期记忆。

1. 原始对话太零碎

对话天然带有大量口语特征:

  • 省略
  • 跳跃
  • 代词指代
  • 情绪化表达
  • 临时性的想法

这些内容对当下交流很自然,但对长期维护并不友好。把它们原样存起来,等于把"原始噪声"和"真正有价值的信息"一起塞进记忆层。

2. 原始对话不适合直接检索

真实的长期事件,往往不会完整出现在某一轮对话里。它可能分散在几天、几周甚至几个月的多次交互中。直接检索聊天记录,很容易拿到一些相关片段,却很难还原一件完整的事。HyperMem 论文的出发点就是这个问题:长对话里的有用信息通常跨多个 episode、多个事实节点分布,传统 pairwise 或 chunk-based 检索容易把原本属于同一主题的内容打散。(arXiv)

3. 原始对话不利于更新

新信息进来之后,系统不只是要"多存一条",还要判断:

  • 这条信息是在补充旧状态,还是覆盖旧状态?
  • 是长期偏好,还是短期约束?
  • 应该升权,还是降权?

如果底层保存的只是聊天原文,那么这些更新动作几乎都只能在回答时临时做推断,系统本身没有稳定的维护对象。

所以更准确的说法是:

聊天记录更像日志,长期记忆更像经过整理后的状态数据。


三、一套真正的 Memory System,至少要回答四个问题

如果把"长期记忆系统"看成一条完整链路,而不是一个数据库接口,那么它至少要回答四个问题:

1. 什么值得记?

不是所有对话内容都应该进入长期记忆。系统需要有一套写入逻辑,判断哪些内容值得沉淀,哪些只属于短期上下文。

2. 记成什么结构?

记忆不是越多越好,而是越可维护越好。原始对话、事件摘要、事实、画像、计划、约束,本来就不是同一种对象。

3. 什么现在仍然有效?

长期记忆最难的地方之一,不是"有没有历史",而是"哪部分历史在当前时间点仍然生效"。EverMemOS 在设计里专门引入了 time-bounded foresight 和 user profile,就是为了解决这一层。

4. 回答问题时该怎么取?

记忆调用不该只是固定 top-k。系统需要知道:哪些信息是必要的,哪些是充分的,哪些还需要继续补证据。EverMemOS 把这一阶段定义为 Reconstructive Recollection,强调的是"重建足够回答当前问题的上下文",而不是把所有疑似相关内容一次性塞进去。

这四个问题加在一起,才构成"长期记忆系统"的完整边界。

长期记忆系统的设计,不是"怎么存更多",而是"怎么选择、组织、更新和重建"。


四、第一层:记忆单元------不是 chunk,而是事件

真正的长期记忆,第一步通常不是"先存下来",而是"先整理成能被系统理解的单位"。

1. 为什么 chunk 不够

chunk 是一种切分技术,不是一种记忆抽象。它更适合服务 embedding 和检索效率,而不是服务长期语义维护。只要对话稍微复杂一点,就会出现两个问题:

  • 一个完整事件被切裂;
  • 多个无关内容被塞进同一个块里。

这会直接影响后续的检索、更新和推理。

2. 什么是更合适的记忆单元

长期记忆更适合的基本单位,通常是事件化、语义完整的对象。EverMemOS 在第一阶段提出 MemCell,把它作为从对话流中抽取出来的离散记忆单元,内部包含 episode、atomic facts、foresight 和 metadata;HyperMem 也采用了 topic / episode / fact 的三层记忆设计,其中 episode 是连接原始对话和长期结构的关键层。

换句话说,这一层想解决的不是"怎么更好切文本",而是:

怎么把原始对话,转成系统真正能维护的中间对象。

3. 为什么这一层很关键

只有先有稳定的记忆单元,后面的东西才站得住:

  • 画像更新要依赖它;
  • 事实抽取要依赖它;
  • 状态冲突处理要依赖它;
  • 检索重建也要依赖它。

如果底层没有稳定单元,后面所有"长期记忆"都会退化成对日志的反复扫描。

所以这一层最重要的结论其实很朴素:

长期记忆的第一步,不是存聊天记录,而是把聊天记录整理成事件。


五、第二层:状态层------长期记忆不是事实仓库,而是状态系统

这是最容易讲浅、也最容易被低估的一层。

很多系统以为,只要把事实保存得足够全,长期记忆问题自然会解决。但事实只能回答"发生过什么",不一定能回答"现在该怎么判断"。

1. facts 不够,状态才是关键

举个最典型的例子:

  • "喜欢 IPA"
  • "最近在吃抗生素,不喝酒"

这两条都是真实信息,也都值得保存。但在当前时刻,它们的作用完全不同。前者更接近长期偏好,后者更接近短期约束。EverMemOS 在引言里就用了几乎一样的例子来说明 fragment-based memory 的局限:如果系统只召回"喜欢 IPA",却没把"正在服药"纳入当前状态,就会给出明显错误的建议。

2. 什么是状态层

状态层不是把事实再存一遍,而是把事实整合成一种更接近"当前有效用户模型"的表示。通常会包括:

  • 稳定偏好
  • 当前限制
  • 正在执行的计划
  • 短期有效的前瞻信息
  • 持续变化中的身份、目标或生活状态

EverMemOS 里对应的就是 profile 与 foresight 的组合:前者沉淀相对稳定的用户画像,后者维护带时间边界的短期预测与约束。

3. 为什么偏好和约束必须分开

如果系统把所有信息都视为"事实",那调用时就只能靠模型自己在上下文里临场判断轻重缓急。短期内也许偶尔能答对,但长期看一定会越来越不稳定。

状态层存在的意义,就是把这一步提前系统化:

  • 什么是长期的;
  • 什么是临时的;
  • 什么优先级更高;
  • 什么已经过期。

所以这一层真正想解决的,不是"怎么保存更多用户信息",而是:

怎么把历史事实整合成当前有效状态。


六、第三层:组织层------记忆必须有层次,不能平铺

当记忆从"聊天记录"升级为"事件、事实、画像、计划、约束"之后,下一个问题自然就来了:

这些东西应该怎么组织?

答案很简单:不能平铺。

1. 为什么不能混在一起

事件、事实、画像、约束,本来就不是同一个层级的对象。如果把它们都塞进同一个 memory bucket,系统后面几乎一定会遇到三个问题:

  • 更新逻辑混乱;
  • 检索粒度混乱;
  • 优先级判断混乱。

2. 一个可用的层次结构长什么样

可以先用非常朴素的方式理解:

text 复制代码
原始对话
→ 记忆单元(episode / event / MemCell)
→ 事实层(facts / logs)
→ 状态层(profile / constraint / foresight)
→ 检索与重建

HyperMem 则把这种层次进一步结构化成 topic / episode / fact 三层,并用超图来建模多节点间的高阶关联;EverMemOS 虽然不强调超图,但同样强调从 episodic trace 到 semantic structure 的逐层组织。两者路线不同,但共识是一样的:长期记忆必须从平铺记录转向分层结构。

3. 分层之后的收益是什么

一旦分层,系统会立刻获得几个非常实际的好处:

  • 更新更容易做
  • 检索更容易控噪
  • 状态判断更容易稳定
  • 上下文重建更容易做到"少而够用"

反过来说,如果没有分层,系统最终还是会退回到"在一堆历史文本里靠相似度碰运气"。

长期记忆一旦没有分层,系统最终就只能退回到语义相似度碰运气。


七、第四层:重建层------记忆不是存着等查,而是面向当前问题重建

很多长期记忆系统最后体验不行,不是因为前面完全没做,而是因为最后这一步还停留在"粗暴 top-k"。

这一步其实最接近用户真正感受到的"记忆能力"。

1. 为什么不能一次 top-k 结束

不少问题不是找一条答案,而是找一组足以支持当前判断的证据。第一次检索通常只能找到线索,未必能直接找到完整上下文。

EverMemOS 在第三阶段提出 Reconstructive Recollection,并显式引入 necessity and sufficiency 原则:不是把所有可能相关内容都丢给模型,而是围绕当前问题主动重建足够、但不过量的上下文。论文还提到其系统会进行 query rewrite、scene match、episode rerank 和 sufficiency check,必要时触发下一轮检索。

2. 什么叫"重建"

重建不是"原样返回历史",而是:

  • 先找相关状态;
  • 再找关联事件;
  • 必要时补充事实和时间线;
  • 最后拼成一个面向当前问题的最小回答上下文。

这和"找几段相关文本回来"有本质差别。

3. 为什么这一层决定体验上限

前面写得再好、存得再多,如果最后调用还是固定 top-k,系统依然会出现:

  • 证据不完整;
  • 当前约束被忽略;
  • 相关但无用的信息过多;
  • 回答缺乏状态一致性。

所以从用户体验角度看,长期记忆的最后一步,其实不是检索,而是重建

长期记忆的最后一步,不是检索,而是重建。


八、把这些拼起来,Memory OS 到底是什么

写到这里,其实已经可以给出一个更完整的定义了。

Memory OS 不是一个单独模块,也不是一个"接在大模型旁边的向量库服务"。它更像一条完整的系统链路:

  1. 对话进入系统
  2. 被整理成稳定记忆单元
  3. 从中抽取事件、事实、前瞻信息和用户状态
  4. 这些对象再被组织成分层结构
  5. 当问题到来时,系统按当前需求重建足够回答的上下文
  6. 最后才交给模型生成

EverMemOS 把这条链路概括为三个阶段:Episodic Trace Formation、Semantic Consolidation、Reconstructive Recollection;HyperMem 则从数据结构角度把长期记忆组织成 topic / episode / fact 的层级超图。无论具体实现细节如何不同,它们都在说明同一件事:长期记忆不是存储问题,而是运行时系统问题。

所以可以把本文的核心定义收束成一句话:

Memory OS,本质上是一套把对话转化为长期状态,并在需要时正确重建出来的系统。


九、如果现在就做一个 Memory System,最小落地版本应该是什么

写到这里,很容易让人觉得这件事太大、太复杂。但现实里,真正有用的升级,往往并不是从最重的方案开始。

如果现在就要给一个 Agent 做 Memory System,最小可用版本其实可以很朴素:

1. 先把原始对话整理成事件级单元

哪怕暂时没有复杂的边界检测,先做一层 episode summary,也会比直接存聊天原文强很多。

2. 从事件中抽取 facts,并维护基础状态层

先把 profile 和 constraint 分开。长期偏好是一类对象,短期限制是另一类对象。只要这两层开始分离,很多错用记忆的问题就会明显下降。

3. 检索不要停在固定 top-k

哪怕暂时没有完整的 agentic retrieval,也应该引入最基础的:

  • hybrid retrieval
  • rerank
  • 二次补检
  • 或简单的 sufficiency 判断

这几步看起来不大,但它们决定的不是"性能能不能多涨 2 个点",而是记忆系统会不会从"能存"跨到"能用"。

从这个角度看,Memory System 的升级往往不是从最复杂的模型开始,而是从最基本的数据结构、状态建模和调用链路开始。


十、结尾:下一篇为什么必须讲"结构"

这一篇试图讲清的,不是某篇论文里的技巧,而是一个更底层的系统认知:

长期记忆不是"日志存储 + 检索增强",而是一条从写入、组织、更新到重建的完整链路。

但讲到这里,其实还剩下一个非常关键的问题没有展开:

如果记忆真的需要组织,那这种组织到底应该长什么样?

事件之间怎么连? 主题和事实之间怎么关联? 为什么有些问题只靠 episode 还不够,必须要有更强的结构表达?

这就是下一篇要继续往下拆的内容。

因为当记忆不再只是"存储",结构就会成为长期记忆系统里最关键的能力之一。


引用论文

  1. Hu, C., Gao, X., Zhou, Z., Xu, D., Bai, Y., Li, X., Zhang, H., Li, T., Zhang, C., Bing, L., & Deng, Y. EverMemOS: A Self-Organizing Memory Operating System for Structured Long-Horizon Reasoning. arXiv:2601.02163, 2026.
  2. Hu, C., Gao, X., Xu, D., Zhou, Z., Li, X., Bai, Y., Li, T., Zhang, H., Zhang, C., Bing, L., & Deng, Y. HyperMem: Hypergraph Memory for Long-Term Conversations. arXiv:2604.08256, 2026. (arXiv)
  3. Hu, C., Gao, X., Xu, D., Zhou, Z., Bai, Y., Li, X., Zhang, H., Li, T., Zhang, C., Bing, L., & Deng, Y. MSA: Memory Sparse Attention for Efficient End-to-End Memory Model Scaling to 100M Tokens. arXiv:2603.23516, 2026. (arXiv)
相关推荐
ting94520002 小时前
Wan2.1-1.3B 深度技术指南:架构、能力、部署与实战全解析
人工智能·架构
ApachePulsar2 小时前
演讲回顾|Apache Pulsar: 现代数据架构的消息底座
人工智能·架构
Agent产品评测局2 小时前
混合云架构适配:企业级智能体灵活部署完整方案与最佳实践 | 2026企业自动化选型硬核指南
运维·人工智能·ai·chatgpt·架构·自动化
Cosolar2 小时前
🚀本地大模型部署指南:16G/32G/64GB内存配置全解析(附最新模型速查表)
人工智能·后端·llm
tonydf2 小时前
一次由组件并发引发的类“缓存击穿”问题排查与修复
redis·后端·架构
绿算技术2 小时前
从 DGX Spark + GP Spark 融合架构说起!!!
架构
龙侠九重天2 小时前
Token是什么?深入理解计费与上下文窗口
人工智能·ai·大模型·llm·token
花千树_0102 小时前
MCP + Function Calling:让模型自主驱动工具链完成多步推理
agent
不会敲代码12 小时前
MCP 实战第二弹:集成高德地图、文件系统、Chrome DevTools,打造能看能写能操控浏览器的超级 Agent
langchain·llm·mcp