切换语言
切换主题

AI Agent 记忆管理:长期记忆与知识治理实战

“上次你说帮我查的那个订单怎么样了?”

用户问出这句话的时候,我的客服 Agent 僵住了。它翻遍了当前对话的上下文,找不到任何关于”订单”的记录——因为那次查询发生在昨天下午,而在另一个会话里。

这不是 Bug。这是失忆。

说实话,我第一次遇到这个问题时挺崩溃的。Agent 明明回答得很漂亮,用户体验也不错,可一旦用户换了窗口、关了浏览器、甚至只是隔了几个小时回来,一切就归零了。Agent 不记得用户的偏好,不记得之前做过的决策,更不记得为什么那样决策。

更要命的是,我发现单纯把上下文窗口拉大并不能解决问题。反而——说出来你可能不信——会让 Agent 变得更蠢。这就是所谓的”上下文腐烂”:无关信息像噪音一样稀释了模型的注意力,检索成本指数级上涨,延迟从几百毫秒飙升到十几秒。

那 Agent 怎么才能真正”记住”?不是说把对话存进数据库那么简单,而是像人一样——记住重要的、忘掉琐碎的、在需要的时候能想起来、在决策时能追溯原因。

这篇文章会拆解 Agent 记忆系统的底层逻辑。我会讲三种记忆类型(大多数人只知道两种)、六大主流框架的选型对比、知识图谱怎么解决向量库的盲点,还有实战中踩过的坑。

为什么 Agent 需要独立的记忆系统

上下文腐烂:更大的窗口反而更糟

先看一组数据,来自 LOCOMO 基准测试(专门评测 Agent 记忆能力的权威数据集):

72.9%
Full-context 准确率
但延迟 9.87s
66.9%
Mem0 准确率
延迟仅 0.71s
13倍
Token 消耗差距
26K vs ~2K
10秒
用户等待时间
全量上下文方案
数据来源: LOCOMO 基准测试

表面上看,Full-context 准确率更高。但你愿意等 10 秒钟吗?更关键的是,Token 消耗差了 13 倍。按 GPT-4 的定价,每次对话光上下文就要烧掉几毛钱。

为什么窗口越大,效果反而可能越差?

打个比方。你在图书馆找一本书。图书馆只有 10 本书的时候,你扫一眼就找到了。图书馆有 10 万本书的时候——哪怕你可以同时看到所有书的封面——你也得花很长时间才能找到那本想要的。

模型的注意力机制也一样。上下文窗口塞进越多信息,模型分配给每条信息的注意力就越少。无关的历史对话、过时的任务状态、已经解决的问题……全都挤在一起,模型反而分不清什么才是重点。

这就是上下文腐烂。信息越多,信噪比越低。

我之前做过一个实验:让 Agent 在 100 轮对话后回答第 1 轮提到的一个细节。结果?全量上下文的准确率从 90% 掉到 60%。而用记忆系统的方案,准确率稳定在 85% 以上。

从”工具”到”伙伴”:跨越会话边界的记忆

没有记忆的 Agent,充其量是个高级工具。你用完,它就忘了你。

有记忆的 Agent,才能真正成为”伙伴”。它能记住你喜欢简洁的回答、记得你上次问过类似的问题、知道你在项目里用的是 React 而不是 Vue。这些信息不用你每次都说一遍。

Letta 团队(MemGPT 的背后公司)给过一个很好的例子:一个长期运行的编程助手。它会记住你项目的代码风格、记住你之前遇到的 bug 和解决方案、甚至记住你常用的第三方库。当你问”再帮我写一个类似的函数”时,它知道”类似”是什么意思——因为它记得你上次写的那个函数。

这种跨会话的连续性,是 Agent 从”工具”进化到”伙伴”的基础。

三种核心记忆类型:短期、长期、推理(大多数人忽略了第三种)

说到 Agent 记忆,很多人只知道短期记忆和长期记忆。但其实还有第三种——Reasoning Memory(推理记忆),而大多数系统恰恰缺失了这个。

让我一个个解释:

短期记忆(Short-term Memory):就是当前的上下文窗口。它的特点是容量有限、信息新鲜、随会话结束而消失。你可以把它理解为 RAM——断电就没了。

长期记忆(Long-term Memory):存在外部存储里的信息,可以是向量数据库、关系数据库、知识图谱。特点是容量大、持久化、支持检索。就像硬盘,随时可以读写。

推理记忆(Reasoning Memory):这个最容易被忽略。它记录的是 Agent 的决策过程——为什么选择 A 而不是 B、当时的约束条件是什么、中间推理链是怎样的。没有推理记忆,Agent 做了决策却无法解释”为什么”。这对可解释性、调试、持续学习都非常重要。

Neo4j 的技术博客里有一段话说得很到位:“一个只会执行、不会解释决策过程的 Agent,就像一个只会做事、不会复盘的员工。短期 OK,长期必然出问题。”

在我看过的框架里,只有少数几个(如 Letta、Zep)实现了推理记忆。大部分还停留在”把对话存进向量库”的阶段。

Agent 记忆的认知架构

四层记忆模型

借鉴操作系统和认知科学的设计,现代 Agent 记忆系统通常采用分层架构。最经典的是 Letta/MemGPT 的四层模型:

Layer 1: Message Buffer(消息缓冲区)
    ↓ 溢出时压缩
Layer 2: Core Memory(核心记忆)
    ↓ 主动写入
Layer 3: Recall Memory(召回记忆)
    ↓ 按需检索
Layer 4: Archival Memory(归档记忆)

Message Buffer:就是当前对话的上下文窗口,容量有限(比如 4K 或 8K Token)。当缓冲区快满的时候,系统会把老消息压缩成摘要,腾出空间给新消息。

Core Memory:一小块精心维护的”工作记忆”,存储当前任务最相关的信息。比如用户的偏好、当前的目标、最近的决策。容量大概在几百到几千 Token,保持在上下文窗口内,保证模型每次生成都能看到。

Recall Memory:历史对话的向量存储。当 Agent 需要回忆”上次用户问过什么”的时候,从这里检索。检索条件可以是语义相似度,也可以是时间范围、关键词等。

Archival Memory:长期归档存储,存放那些”以后可能有用但现在不需要”的信息。比如用户六个月前的对话、已经完成的任务记录。

这个分层设计的好处是什么?类比一下:你在写代码的时候,Core Memory 就是你的脑子和编辑器打开的几个文件,Recall Memory 是你的 Git 历史和项目文档,Archival Memory 是你电脑里的其他项目和网上的资料库。层级越近,访问越快,但容量越小;层级越远,容量越大,但访问越慢。

MemGPT 的操作系统式管理

MemGPT(现在是 Letta)的设计理念很有意思:把 Agent 的记忆管理类比成操作系统的内存管理。

在操作系统里,RAM 是有限的,硬盘是无限的。当 RAM 不够用的时候,系统会把一部分数据交换(Swap)到硬盘里,需要的时候再加载回来。

MemGPT 做了类似的设计:

  • RAM = 上下文窗口(有限、昂贵、快速)
  • Disk = 外部存储(无限、便宜、较慢)

Agent 有一个”自我管理”的机制:它会在上下文窗口里维护一个”Core Memory Block”,就像操作系统维护页表一样。当 Core Memory 满了,Agent 会主动把一部分信息”驱逐”到外部存储;当需要用到归档的信息时,Agent 会主动从外部存储”召回”。

这种设计的关键是:Agent 自己决定什么该留、什么该删、什么该查。不是靠规则硬编码,而是让 Agent 根据当前任务动态调整。

举个具体例子。Core Memory Block 的数据结构是这样的:

{
  "label": "user_preferences",
  "description": "用户的偏好设置",
  "value": "喜欢简洁的回答,偏好中文,常用 React 技术栈",
  "limit": 2000
}

当 limit 快到的时候,Agent 可以选择:压缩(提取关键信息)、分割(拆成多个 Block)、或者驱逐(移到 Archival Memory)。

Sleep-time Compute:异步记忆处理,不阻塞响应

这是 Letta 提出的一个很聪明的设计。

传统做法:每次对话结束后,立刻处理记忆——提取关键信息、更新向量索引、生成摘要。这会阻塞响应,用户得等。

Sleep-time Compute 的做法:对话进行时,先把原始数据丢到队列里,立刻返回响应。等 Agent “空闲”(sleep)的时候,再慢慢处理记忆。

好处很明显:

  1. 用户感知的延迟大幅降低
  2. 可以做更复杂的记忆处理(比如知识图谱构建),不用担心超时
  3. 批量处理效率更高,成本更低

当然,代价是记忆更新有延迟。对于大多数场景(客服、助手、编程伙伴),几秒到几分钟的延迟是可以接受的。但对于需要实时记忆的场景(比如实时对话中的情感识别),就不太适用。

记忆驱逐与递归摘要:保留 70% 确保连续性

当上下文窗口满了,怎么决定删掉什么、留下什么?

一个简单的策略是:递归摘要。把老的对话压缩成一段摘要,保留核心信息,丢弃细节。

但问题来了:压缩多少合适?压缩太狠,关键信息丢了;压缩太少,空间还是不够。

Letta 团队的实验数据给出一个参考值:保留 70% 的信息量,是连续性和压缩率的最佳平衡点。

具体怎么做?假设当前上下文窗口有 100 条消息,满了:

  1. 把前 50 条消息压缩成一段 500 Token 的摘要
  2. 摘要保留:用户目标、关键约束、重要决策、待解决问题
  3. 原始数据移到 Archival Memory,以后需要可以查
  4. 新的上下文窗口 = 摘要 + 后 50 条消息 + 新消息

这样既保证了连续性(Agent 知道之前发生了什么),又释放了空间(可以继续对话)。

知识治理:记忆的生命周期管理

记忆不是”存进去就完事”的。它有生命周期:捕获、压缩、存储、检索、衰减、清理。每一步都需要策略。

三类记忆的 TTL 策略:用户偏好 vs 任务状态 vs 操作日志

TTL(Time To Live,生存时间)是记忆管理的核心参数。不同类型的记忆,TTL 完全不同。

用户长期记忆:TTL 无限或极长(数年)。比如用户的姓名、偏好、常用工具、技术栈选择。这些信息很少变化,应该长期保留。

任务记忆:TTL 可配置(小时到天)。比如当前项目的上下文、最近的 bug 记录、正在进行的决策。任务结束,记忆就可以清理或归档。

事件记忆:TTL 短(分钟到小时)。比如当前的对话轮次、临时的计算结果、刚检索到的信息。用完就可以丢弃。

我见过不少项目,把所有记忆都存到同一个向量库里,没有任何 TTL 区分。结果就是:向量库越来越大,检索越来越慢,而且会召回一堆过时、无关的信息。

合理的做法是:用三个不同的存储,分别设置不同的 TTL 和清理策略。

用户长期记忆 → 向量数据库(无 TTL,定期压缩)
任务记忆 → 关系数据库 + 向量(TTL 按任务周期)
事件记忆 → 内存或 Redis(TTL 短,自动过期)

摘要压缩的艺术:200 字结构化摘要

把 100 轮对话压缩成一段摘要,听起来简单,做起来有很多细节。

摘要太简单,丢信息。摘要太复杂,模型读不懂。

Letta 的实践给出一个结构化模板,效果不错:

{
  "goals": ["用户想要完成什么"],
  "constraints": ["用户的约束条件"],
  "decisions": ["Agent 做了哪些决策"],
  "open_questions": ["还没解决的问题"],
  "evidence_index": ["重要信息的来源索引"]
}

每段对话结束,Agent 会生成这样一个约 200 字的结构化摘要。这样做的好处:

  1. 结构清晰:模型读取时知道每部分是什么
  2. 信息密度高:只保留核心,丢掉废话
  3. 可追溯:evidence_index 指向原始数据,需要细节可以查

我之前尝试过非结构化的摘要,比如”这是一段关于用户订单查询的对话……”。效果差很多。模型在读取时很难快速定位关键信息,检索时也不好用。

检索注入策略:何时主动注入、何时被动检索

记忆检索有两种模式:主动注入和被动检索。

主动注入:每次生成前,自动把相关记忆塞进上下文。适合记忆量不大、对实时性要求高的场景。缺点是如果记忆太多,会挤占上下文空间。

被动检索:只在需要的时候查询。模型会生成一个”检索请求”,然后去向量库或知识图谱里找。适合记忆量大、对延迟敏感的场景。缺点是增加了一次检索延迟。

Letta 的建议是:Core Memory 主动注入,Recall/Archival Memory 被动检索。

什么意思?Core Memory 里的信息(用户偏好、当前目标)是每次生成都必须知道的,所以主动注入到上下文里。Recall 和 Archival 里的历史信息,只在模型判断”我需要回忆一下”的时候才检索。

这需要模型有”自我意识”——知道自己什么时候需要查资料。GPT-4 和 Claude 在这方面表现不错,可以通过 Prompt 引导。小模型就需要更明确的规则了。

记忆衰减与清理:避免”记忆膨胀”

记忆膨胀是个实际问题。用户用得越久,记忆越多,检索越慢,召回的信息越杂。

解决方法是:衰减和清理。

衰减:每条记忆有一个”重要性分数”,随着时间推移逐渐降低。如果长期没被检索或使用,分数会降到某个阈值,触发归档或删除。

清理:定期扫描记忆库,删除过期的、重复的、低价值的记忆。

具体实现可以参考记忆索引的设计:

{
  "memory_id": "mem_001",
  "content": "用户偏好 React 技术栈",
  "importance": 0.85,
  "last_accessed": "2026-04-12",
  "access_count": 23,
  "decay_rate": 0.01
}

每天凌晨跑一个清理任务:

  • importance < 0.2 → 删除
  • 重复记忆 → 合并
  • expired TTL → 归档

这样做的好处是:记忆库保持在可控规模,检索效率稳定,不会随着时间推移而膨胀。

技术选型:向量库 vs 知识图谱

向量库的优势与局限:语义搜索无法还原关系

向量数据库是当下最主流的记忆存储方案。Pinecone、Weaviate、Milvus、Qdrant……你肯定听过这些名字。

它的核心能力是:语义相似度搜索。把文本转成向量,找最近的邻居。

“用户喜欢简洁的回答”和”用户偏好简短回复”——这两句话在向量空间里靠得很近,可以互相召回。这是向量库的强项。

但向量库有个致命盲点:它找不到”关系”。

举个例子。对话历史里有:

  • “我在做一个电商项目”
  • “项目用的是 Next.js”
  • “后端是 Supabase”
  • “最近在处理支付模块”

向量搜索”项目技术栈”,可能只召回”用的是 Next.js”,但漏掉”后端是 Supabase”——因为这两句话语义上不够相似。但实际上它们是有关联的:都是项目的技术选型。

这就是知识图谱的用武之地。

Graph RAG:让 Agent 理解连接

知识图谱存储的是实体和关系。

上面的例子,在知识图谱里是这样的:

(用户) --[正在做]--> (电商项目)
(电商项目) --[前端]--> (Next.js)
(电商项目) --[后端]--> (Supabase)
(电商项目) --[当前模块]--> (支付模块)

当 Agent 问”项目的技术栈是什么”,它可以沿着图谱遍历,找到所有关联的技术选型。

Neo4j 的技术博客给过一个完整的 Agent 记忆实现方案,核心是三种图:

  1. 用户图:用户画像、偏好、历史行为
  2. 任务图:当前任务、子任务、依赖关系
  3. 知识图:领域知识、概念关联

图查询的威力在于多跳检索。向量只能找”相似”的,图可以找”相关”的。

比如查询”用户在这个项目里遇到过什么问题”,图可以:

  • 从”用户”节点出发
  • 找到”参与的项目”
  • 找到项目相关的”问题”
  • 找到问题的”解决方案”

这种多跳关联,向量库做不到。

Reasoning Memory:决策追踪的关键

再说说推理记忆——这是被大多数框架忽略的关键能力。

推理记忆记录的不是”发生了什么”,而是”为什么这么做”。

比如:

  • 用户问:“帮我写一个登录页面”
  • Agent 问:“需要第三方登录吗?”
  • 用户答:“不需要,只做邮箱登录”
  • Agent 决定:使用 NextAuth,不集成 OAuth

推理记忆会记录:

{
  "decision": "使用 NextAuth,不集成 OAuth",
  "reasoning": "用户只需要邮箱登录,不需要第三方登录",
  "constraints": ["不引入 OAuth"],
  "alternatives_considered": ["Clerk", "自定义认证"],
  "chosen_because": "NextAuth 轻量,符合需求"
}

这个记忆的价值在哪?

  1. 可解释性:用户问”为什么不用 Clerk?“,Agent 能回答
  2. 调试:出问题能追溯决策链
  3. 持续学习:下次遇到类似情况,可以参考之前的决策

Neo4j 的实现中,推理记忆被建模为”决策节点”,连接到相关的”约束节点”和”结果节点”。这样就能完整追溯一个决策的前因后果。

混合方案:向量 + 图谱 + 结构化存储

说了这么多,到底该选哪个?

答案是:混合方案。

单独用向量库,会丢关系。单独用知识图谱,构建成本高,语义检索弱。单独用关系数据库,灵活性和召回能力都不够。

实践中的最佳组合:

  • 向量数据库:存储对话文本,做语义检索
  • 知识图谱:存储实体关系,做多跳推理
  • 关系数据库:存储结构化数据(用户信息、任务状态)

三者的协作模式:

  1. 用户问题先走向量检索,召回语义相关的对话片段
  2. 从片段中提取实体,去图谱查询关联信息
  3. 结构化数据直接查关系数据库

这样既保留了语义检索的灵活性,又获得了图谱的关联能力,还有结构化数据的高效查询。

六大框架实战对比

说了这么多理论,来看看实际框架怎么选。

Mem0:快速集成、多级记忆

Mem0 是目前最流行的 Agent 记忆框架之一。它的定位是”记忆即服务”——你不需要自己管理记忆存储和检索,直接调用 API 就行。

核心特点:

  • 托管式服务,无需自己搭建基础设施
  • 支持 21 种框架集成(LangChain、LangGraph、LlamaIndex、CrewAI 等)
  • 自动记忆提取、更新、检索
  • 支持多租户、多会话

LOCOMO 准数据:

  • 准确率:66.9%
  • 延迟:0.71s
  • Token 消耗:~2K

适用场景:

  • 快速原型开发
  • 语音 Agent(对延迟敏感)
  • 需要多框架集成的项目

不足:

  • 托管服务,数据不在自己手里
  • 高级功能(如推理记忆)支持有限
  • 自定义能力不如自建方案

代码示例:

from mem0 import Memory

m = Memory()

# 添加记忆
m.add("用户喜欢简洁的回答", user_id="user_001")

# 检索记忆
results = m.search("用户偏好", user_id="user_001")

# 返回:["用户喜欢简洁的回答"]

简单到离谱。这也是 Mem0 最大的优势:上手成本低。

Letta:长期运行 Agent 的首选

Letta(前身是 MemGPT)走的是另一条路线:它把记忆管理设计成操作系统式的层级架构,强调 Agent 的”自我管理”能力。

核心特点:

  • OS 式层级记忆:RAM(上下文)+ Disk(外部存储)
  • Agent 自主决定记忆的读写、驱逐、召回
  • Sleep-time Compute 异步处理
  • 完整的推理记忆支持

适用场景:

  • 长期运行的 Agent(如编程助手、个人助理)
  • 需要完整决策追溯的项目
  • 对自主性要求高的场景

不足:

  • 学习曲线较陡
  • 需要自己部署和管理
  • 对模型能力有要求(小模型可能无法很好地”自我管理”)

架构示意:

┌─────────────────────────────────────┐
│          Agent (LLM)                │
│  ┌───────────────────────────────┐  │
│  │      Core Memory (RAM)        │  │
│  │  - Self Block: 我是...         │  │
│  │  - User Block: 用户喜欢...      │  │
│  │  - Task Block: 当前任务...      │  │
│  └───────────────────────────────┘  │
└─────────────────────────────────────┘
         ↓ 主动管理
┌─────────────────────────────────────┐
│    External Storage (Disk)          │
│  - Recall Memory (向量库)           │
│  - Archival Memory (归档存储)        │
└─────────────────────────────────────┘

如果你在做一个需要长期陪伴用户的 Agent,Letta 是目前最成熟的选择。

Zep:对话记忆专家

Zep 专注于对话场景的记忆管理。它的核心能力是”渐进式摘要”——随着对话进行,不断压缩历史,保持上下文窗口的可用性。

核心特点:

  • 渐进式摘要:对话越长,摘要越精炼
  • 语义 + 时间混合检索
  • 事实提取:自动从对话中提取实体和关系
  • 支持多模态(文本、图像)

适用场景:

  • 客服机器人
  • 对话式 AI 应用
  • 需要长对话历史的场景

不足:

  • 更偏对话场景,通用 Agent 场景支持有限
  • 开源版本功能有限,企业版价格较高

Zep 的一个亮点是:它能自动检测对话中的”事实”,比如”用户叫张三”、“用户住在北京”,并存储为结构化数据。这样下次对话时,不用翻历史记录就能直接用。

Cognee:知识图谱方案

Cognee 是专门做知识图谱记忆的框架。如果你需要强大的关系推理能力,它是首选。

核心特点:

  • 自动知识图谱构建
  • 支持多种图数据库(Neo4j、NetworkX 等)
  • 实体提取 + 关系抽取管道
  • 支持增量更新

实体提取成本对比:

方法延迟质量成本
spaCy~5ms
GLiNER2~50ms
LLM~500ms最高

适用场景:

  • 知识密集型 Agent(如研究助手、知识库问答)
  • 需要多跳推理的场景
  • 对关系网络有要求的场景

不足:

  • 构建成本高,尤其是用 LLM 做实体提取
  • 需要图数据库基础设施
  • 对于简单场景可能过度设计

选型决策矩阵

说了这么多,怎么选?我整理了一个决策矩阵:

场景推荐框架理由
快速原型 / MVPMem0上手最快,无需基础设施
语音 AgentMem0低延迟,托管服务稳定
长期陪伴型 AgentLettaOS 式管理,推理记忆完整
企业客服Zep对话记忆专业,事实提取自动
知识密集型 AgentCognee图谱能力强,关系推理强
自建基础设施Letta + 自选向量库最灵活,成本可控

如果让我给一个通用建议:

  • 先用 Mem0 跑通原型
  • 有长期记忆需求时,迁移到 Letta
  • 有复杂关系推理需求时,加 Cognee 或 Neo4j

实战案例与最佳实践

语音 Agent 记忆方案

语音 Agent 对延迟极其敏感。用户说完话,200ms 内没反应,就会觉得卡顿。

这意味着记忆检索必须在 100ms 内完成(留 100ms 给语音合成和传输)。

Mem0 的方案:

  1. 预加载 Core Memory:用户偏好、常用设置,在会话开始时一次性加载到内存
  2. 被动检索 Recall Memory:只在明确需要时查询,使用高效的向量索引
  3. 异步更新:对话结束后异步更新记忆,不阻塞响应

ElevenLabs 的语音 Agent 集成 Mem0 的实测数据:端到端延迟控制在 300ms 以内,用户感知良好。

企业客服 Agent

企业客服的核心需求是:长期记住用户,能解释决策过程。

一个典型的架构:

用户消息

意图识别

┌─────────────────┬─────────────────┐
│  Core Memory     │  Recall Memory  │
│  (用户画像)       │  (历史对话)      │
└─────────────────┴─────────────────┘

知识库检索(RAG)

生成回答

推理记忆记录(为什么这么回答)

Zep 在这个场景表现不错:自动事实提取能记住用户的基本信息,渐进式摘要能处理长对话。

个人助理:跨会话学习

个人助理的核心能力是:学习用户偏好,跨会话保持连续性。

关键设计:

  1. 用户画像记忆:长期存储,记录用户的偏好、习惯、常用工具
  2. 项目上下文记忆:按项目隔离,切换项目时加载对应上下文
  3. 推理记忆:记录为什么推荐某个方案、为什么放弃某个选项

Letta 的设计很适合这个场景:Core Memory 存用户画像,Recall Memory 存项目历史,Archival Memory 存归档项目。

避坑指南

踩过的坑,分享给你:

坑 1:把所有记忆都塞进向量库

问题:向量库只擅长语义检索,不擅长精确查询和关系推理。

解决:混合存储。结构化数据(用户 ID、项目状态)用关系数据库,语义记忆用向量库,关系记忆用图谱。

坑 2:没有 TTL 策略

问题:记忆越来越多,检索越来越慢,召回一堆过期信息。

解决:按记忆类型设置 TTL。事件记忆几小时过期,任务记忆任务结束清理,用户画像长期保留。

坑 3:忽略推理记忆

问题:Agent 做了决策,但无法解释为什么。调试困难,用户质疑。

解决:显式记录决策链。每个重要决策记录:选择了什么、为什么、放弃的选项是什么。

坑 4:过度依赖 LLM 做记忆管理

问题:让小模型自己决定什么该记、什么该删,效果很差。

解决:对于小模型,用规则辅助。比如:明确的实体提取规则、固定的记忆模板、预设的重要性权重。

结论

说了这么多,核心就几条:

第一,记忆是 Agent 的”第二大脑”,不是可选功能,是核心架构。 没有 memory 的 Agent,就像没有硬盘的电脑——断电就失忆,每次都从零开始。想让 Agent 从”工具”进化到”伙伴”,记忆系统是绕不过去的坎。

第二,三种记忆类型缺一不可。 短期记忆撑上下文,长期记忆撑持久化,推理记忆撑可解释性。大多数框架只做了前两种,推理记忆是被严重低估的能力。

第三,框架选型看场景,没有银弹。 语音 Agent 选 Mem0(低延迟),长期任务选 Letta(OS 式管理),知识密集选 Cognee(图谱强),客服场景选 Zep(对话专业)。

第四,向量库不是万能的。 语义检索找”相似”,知识图谱找”关系”,结构化存储找”精确”。三者结合才是正解。

第五,记忆需要治理,不是存进去就完事。 TTL 策略、衰减机制、定期清理,缺一不可。否则记忆库会膨胀成垃圾场。

给你的行动建议:

  1. 从 LOCOMO 基准测试数据开始,理解记忆系统的性能指标
  2. 用 Mem0 或 neo4j-agent-memory 快速搭个原型,跑起来再说
  3. 关注 Reasoning Memory——这是下一阶段 Agent 能力竞争的核心差异点

Agent 的未来,不只是”更聪明的模型”,更是”更持久的记忆”。当 Agent 能记住你一个月前说的话、理解你为什么做那个决定、并在下次对话中延续上下文——那才是真正的”智能”。


参考资料

常见问题

AI Agent 为什么需要独立的记忆系统?上下文窗口不够用吗?
上下文窗口有限且成本高。LOCOMO 基准显示,全量上下文方案准确率虽高(72.9%),但延迟达 9.87 秒,Token 消耗是记忆系统的 13 倍。更严重的是上下文腐烂:窗口越大,无关信息越多,模型注意力被稀释,反而效果变差。独立的记忆系统通过分层管理(短期/长期/推理记忆)解决了这个问题。
短期记忆、长期记忆、推理记忆有什么区别?
三种记忆各司其职:

• 短期记忆:即上下文窗口,容量有限、随会话结束消失,类似 RAM
• 长期记忆:外部存储(向量库/图谱),容量大、持久化,类似硬盘
• 推理记忆:记录决策过程(为什么选 A 不选 B),用于可解释性和调试

大多数框架只实现前两种,推理记忆是被严重低估的能力。
Mem0、Letta、Zep、Cognee 四个框架怎么选?
按场景选择:

• Mem0:快速原型、语音 Agent(低延迟 0.71s)
• Letta:长期陪伴型 Agent(OS 式管理、推理记忆完整)
• Zep:企业客服(渐进式摘要、事实提取)
• Cognee:知识密集型 Agent(图谱强、多跳推理)

建议先用 Mem0 跑通原型,再根据需求迁移到 Letta 或 Cognee。
向量数据库和知识图谱应该怎么配合使用?
向量库擅长语义相似度搜索(找相似的内容),知识图谱擅长关系推理(找关联的内容)。混合方案是:向量库存对话文本做语义检索,知识图谱存实体关系做多跳推理,关系数据库存结构化数据做精确查询。三者结合才能覆盖所有场景。
记忆系统会导致记忆膨胀吗?如何治理?
会。用户用得越久,记忆越多,检索越慢。治理策略:

• TTL 策略:按类型设过期时间(事件记忆几小时、任务记忆按周期、用户画像长期)
• 衰减机制:重要性分数随时间降低,低于阈值触发归档
• 定期清理:删除过期、重复、低价值记忆

Letta 建议保留 70% 信息量,是连续性和压缩率的最佳平衡点。
什么是 Reasoning Memory?为什么大多数框架没有实现?
Reasoning Memory(推理记忆)记录的是决策过程:为什么选择这个方案、放弃了哪些选项、当时的约束条件是什么。它对可解释性、调试、持续学习至关重要。实现难度在于需要结构化记录推理链,而非简单存储对话文本。目前只有 Letta、Zep 等少数框架支持。

25 分钟阅读 · 发布于: 2026年4月13日 · 修改于: 2026年4月15日

当前属于系列阅读 第 19 / 19 篇

AI 开发实战

如果你是从搜索进入这篇文章,建议顺手补上上一篇或继续下一篇,这样更容易把同一主题读完整。

查看系列总览

相关文章

BetterLink

想持续收到这个主题的更新?

你可以直接关注作者更新、订阅 RSS,或者继续沿着系列入口往下读,避免下次又回到搜索结果重新找。

关注公众号

评论

使用 GitHub 账号登录后即可评论