Agent 记忆的「存储层级」——计算机体系结构给 Agent 记忆系统的启示

计算机的内存层级(寄存器→缓存→RAM→磁盘→磁带)解决的核心矛盾是「快的内存放不下,大的内存不够快」。Agent 记忆系统面对的是同样的矛盾——上下文窗口太小,外部存储太慢。把计算机体系结构的分层思想搬过来,你会发现很多困惑迎刃而解。

同一个问题,不同的名字

计算机体系结构里有个经典的「存储墙」问题:CPU 运算速度每年提升 60%,内存访问速度每年只提升 7%。差距越来越大,于是有了从寄存器到磁带的多级存储层次。

Agent 记忆系统面对的是同一个问题的翻版。

LLM 的上下文窗口就是「CPU 寄存器」——极快(推理时 zero-latency 访问)但极小。128K 的上下文在单次推理中看似很多,但对于一个运行了几千步的 Agent,这连最近几步的轨迹都塞不下。

外部向量存储是「磁盘」——容量可以大到百万级条目,但一次检索就要 50-200ms,还得加上 embedding 计算和 LLM 调用。

这两级之间的性能差距,不比 CPU 和磁盘的差距小。

四级存储层级

如果我们认真对待这个类比,Agent 记忆系统应该长这样:

L1:上下文窗口(几 K 到几百 K tokens)

这是 Agent 最直接能「看到」的信息。读取延迟:0(因为已经在上下文里了)。写入代价:每增加一个 token,后续推理的计算量就多一点(attention 是 O(n²) 的)。

这就是为什么把整段对话历史全塞进上下文是愚蠢的——你在用最高成本的存储层级存大量低价值的信息。

应该放什么?当前任务的完整轨迹、最新感知到的关键事件、正在进行中的推理链。其他一切,归档。

L2:工作记忆(几十到几百条条目)

这是一个结构化的短期存储。和 L1 的区别:L2 的数据不直接在 LLM 的上下文中,但可以通过一次快速检索拉入。

读取延迟:5-20ms(一次轻量级检索,不做语义重排)。
写入策略:增量更新。Agent 每步产生的结构化信息(提取的实体、关系、决策理由)先写入 L2,而不是直接塞进 L1 把上下文撑爆。

L2 应该驻留在内存中。用 Redis 或者一个简单的 dict + 向量索引就能实现。

L3:长期记忆(上千到百万级条目)

这就是大多数人说的「记忆系统」。结构化存储 + 向量索引。可以放在磁盘上,用 HNSW 或 DiskANN 做检索。

读取延迟:50-200ms(embedding + 搜索 + 重排序)。
写入延迟:200-800ms(LLM 提取 + embedding + 索引写入——昨天那篇文章说的瓶颈就在这里)。

L3 的关键设计决策不是检索快不快,而是什么时候写。答案:异步批处理。L2 积累了一定的新信息后,统一提取、压缩、去重、写入 L3。不要每步都写。

L4:归档(无限容量,极少访问)

那些几个月前的对话、已经遗忘的知识、不再活跃的用户画像。不需要建索引,压缩后存成文件或冷存储。只在特定的「回忆」或「回溯」场景下访问。

读取延迟:秒级起步。访问方式:不是向量检索,而是时间范围 + 关键词匹配的粗粒度扫描。

核心机制:预取与逐出

计算机体系结构里,Cache 的两个核心机制是预取(prefetch)和逐出(eviction)。Agent 记忆系统也需要这两个东西。

预取:当 Agent 启动一个新任务时,系统应该主动从 L3 把相关的历史记忆拉到 L2。"相关"怎么判断?看任务描述的关键词、看当前对话的 embedding 与历史记忆的相似度、看用户的身份标识。这一步是预测性的——不等检索请求到达,先把最可能用到的数据准备好。

逐出:L2 满的时候,把哪些数据放回 L3?三个策略值得关注:

  • LFU(Least Frequently Used):把最不常用的逐出——适合长期稳定的知识,比如用户的基本信息
  • LRU(Least Recently Used):把最久没访问的逐出——适合短期任务的上下文
  • 重要性加权:有些记忆虽然不常访问,但一旦需要就极其关键(比如用户的过敏信息、系统密码)。这种应该固定保留在 L2。

这个分层真正解决的问题

  1. 写入瓶颈:L2 的写入是轻量级的(结构化数据直接存入),可以走同步路径。L3 的写入走异步批处理,从关键路径上剥离。

  2. 上下文窗口压力:L1 只保留当前任务的核心信息。L2 作为缓冲层,避免了「所有记忆都要过一遍 LLM 的 attention」的愚蠢局面。

  3. 遗忘策略可解释:不再用「记忆会随时间衰减」这种模糊说法。每一层的逐出策略是明确、可量化的。忘了就是被 L2 逐出了,去 L3 检索就是。

  4. 系统可扩展:每一层的存储后端可以独立替换。L2 可以用 Redis,L3 可以用专门的向量数据库,L4 可以用廉价的对象存储。各层之间通过清晰的接口通信。

不是新想法,但值得认真对待

计算机体系结构的分层思想不新——计算机组成原理课上的内容。但把它映射到 Agent 记忆系统,意味着思维模型的变化:

从「一个巨大的记忆池」到「多级自动管理的存储层级」。

这是从手动管理到自动管理的转变,也是从单点优化到系统级优化的转变。就像现代 CPU 不需要程序员手动管理寄存器 vs 缓存的分配一样,Agent 开发者也不应该手动管理「哪些记忆放上下文,哪些放向量库」。

应该是系统来管。

评论

此博客中的热门博文

我写了半年 prompt,最后发现最好的技巧就三个