Documentation Index
Fetch the complete documentation index at: https://ce101.ifuryst.com/llms.txt
Use this file to discover all available pages before exploring further.
4.1 基础理论
我们先来灵魂一问,为什么需要这个东西?最大的原因是没有记忆模块的话,大模型会是一个记不住任何东西的模型,没有办法解决复杂任务,也没办法长期持续运行。 这篇文章里这样描述的:Imagine hiring a brilliant co-worker. They can reason, write, and research with incredible skill. But there’s a catch: every day, they forget everything they ever did, learned or said. This is the reality of most Agents today. They are powerful but are inherently stateless.中文是:
想象一下你雇了一位才华横溢的同事:他们逻辑清晰,文笔出色,研究能力惊人。但有个致命问题——每天一觉醒来,他们就会忘记所有曾做过、学过或说过的事情。这正是当今大多数 AI Agent 的真实写照:虽然强大,却天生“无记忆”。因此我们可以发现记忆对于走向 AI Agent,甚至是 AGI 都是不可或缺的一部分。本章节针对记忆系统的描述我会以 AI Agent 为主体,因为 Agent 是目前最常见的应用场景,在实践中也以不同的程度配备了记忆系统。 记忆系统在探讨和研究的其实是从简单数据存储到智能知识管理的根本性转变。在 MemGPT 里就将记忆类比成操作系统中的虚拟内存管理机制


- 从交互模式中学习
- 维护显式的结构化知识
- 协调动态上下文组装
4.1.1 记忆
记忆分类
最直接的记忆分类分为:- 短期记忆(Shor-Term Memory),也有称上下文记忆(Contextual Memory),可以类比留驻在内存里的数据
- 长期记忆(Long-Term Memory),也有称持久化记忆(Persistent Memory),可以类比保存到磁盘里的数据

Claude Code 里其实有指明了 Memory files 部分,其实 Messages 部分也可以算是记忆的一部分,这样就共同构成了记忆。但是如果从广义的角度来说,其实整个上下文空间都应该算作是记忆的一部分(包括系统提示词部分可以认为是永久记忆),只不过为了区分内容性质方便进行不同程度和方向上的研究和演进,通常不会这样去处理。
这里也涉及到一个比较怪诞的点,人类倾向于将 AI 打造成和人类“类似”的存在,但是其实很多时候只是在模仿和类比,本质却是不同的东西。就好像人类有记忆,大模型也需要有记忆是一个道理,里面其实就会有很多错配的情况。就好比人类的长期记忆其实是没办法很准确的 Recall 的,会随着时间流逝而丧失很多记忆,这种自然的记忆淘汰机制也给了我们有限的脑容量在一个长时间纬度的运作提供了支撑。虽然现在 AI 延续人类记忆机制这个方向在研究和发展,但是我们很难说未来的上限也会在这里,毕竟 AI 是可以做到不忘记任何事情,这件事情本身也是一个双刃剑,在技术或解决方案还没有发展到足够可靠的情况下。
回过头来看,其实现在可见的方案在记忆和持久化上的实现方案都比较相似,基本原理是利用大模型来从对话里提取对应的记忆,然后存储到存储里。这里提取的记忆有可能是:
- 一条客观描述的事实,比如:Leo 喜欢 AI
- 也可能会进一步拆解成实体和关系,比如两个实体分别是 Leo 和 AI,而这两者之间的关系是喜欢

Semantic Memory (“What”): Retaining specific facts, concepts, and structured knowledge about users, e.g. user prefers Python over JavaScript. Episodic Memory (“When” and “Where”): Recall past events or specific experiences to accomplish tasks by looking at past interactions. Think of few-shot examples, but real data. Procedural Memory (“How”): internalized rules and instructions on how an agent performs tasks, e.g. “My summaries are too long” if multiple users provide feedback to be shorter.整理后:
- 语义记忆(Semantic Memory,是什么):指的是保留关于用户的具体事实、概念以及结构化知识。例如:Leo 在写 CE101 这本书。
- 情节记忆(Episodic Memory,何时与何地):能够回忆过去的事件或具体的互动经历,并借此完成任务。可以类比为“few-shot 示例”,但是真实发生过的对话或行为数据。比如:Leo 这周写了第四章内容
- 程序性记忆(Procedural Memory,如何做):指 Agent 内化的规则和操作方式,其实就类似提示词里的人设部分,比如:以好友 Sam 的口吻与 Leo 对话,避免让我知道、请告诉我这种机械回复
挑战和难点
记忆的原理不难,不过要把记忆做好,也不容易,甚至是有挑战性的!这里我依然还是要引用 philschmid 的这篇文章:Relevance Problem: Retrieving irrelevant or outdated memories introduces noise and can degrade performance on the actual task. Achieving high precision is crucial. Memory Bloat: An agent that remembers everything eventually remembers nothing useful. Storing every detail leads to “bloat” making it more, expensive to search, and harder to navigate. Need to Forget: The value of information decays. Acting on outdated preferences or facts becomes unreliable. Designing eviction strategies to discard noise without accidentally deleting crucial, long-term context is difficult.翻译转化后:
- 相关性问题:检索到不相关或过时的记忆会引入噪音,反而削弱 Agent 在当前任务上的表现。因此,确保高精度的检索至关重要。
- 记忆膨胀:一个什么都记住的 Agent,最终反而什么有用的都记不清。存储过多细节会导致“记忆膨胀”,不仅增加搜索成本,还让记忆体系难以管理和使用。
- 遗忘的必要性:信息的价值会随时间衰减。基于过时的偏好或事实采取行动是不可靠的。如何设计出既能有效清除噪音,又不会误删关键长期上下文的“遗忘机制”,是一个棘手的挑战。
记忆和 RAG
最后我想讨论一下记忆和 RAG 的关系。很多人会觉得记忆系统和 RAG 是相似的东西,没有错,其实两者有很多地方重叠了,甚至是底层实现原理和机制都是一样或类似的,其实这也是人为的划分,侧重点不同。记忆系统更加侧重在运行时产生的信息持续更新到记忆系统中(可以理解成一个特殊的 RAG),而 RAG 则更加侧重在预先处理文档,后续通过查询来做语义搜索。所以两者其实没有分得那么细,我们也可以在下面看到一些 SOTA 记忆系统的实现方式会有 GraphRAG、AgenticRAG 的影子在里面。因此在学习记忆系统和 RAG 的时候,可以结合一起来看和学习。4.1.2 持久化
关于持久化,几乎就是沿袭了传统存储领域,存储媒介无外乎就是:- 简单的磁盘文件
- 数据库:Redis、关系数据库、向量数据库和图数据库
grepsearch_filesopenclose


4.1.3 基准测试(Benchmark)
在开始了解一些 SOTA 技术之前,我们有必要先了解一下长期记忆相关的基准测试,因为这个是各类记忆系统评估效果的一个重要来源,有点类似 SWE 之类的基准测试之于大模型。虽然大家现在慢慢发现大模型的基准测试已经开始不太符合实际的应用情况,也就是目前流行的基准测试已经在慢慢丧失其原本的作用了,但是针对记忆系统这种垂类的方向,基准测试还是能提供一些参考。不过实际上基准测试还是应该结合业务和使用场景进行设计,才可以最大程度去评估记忆系统的效果。Needle In A Haystack
NeedleInAHaystack 是一个专注于从一些内容中找出对的句子,我们在第二章有提到过这个,放几张图回顾一下:
LongMemEval
LongMemEval 是发布在 ICLR2025 上的一个用于长期记忆的基准测试,关注 5 个方面:- 信息抽取(Information Extraction):能否从长时间前的对话中准确提取出具体事实信息
- 多轮会话推理(Multi-Session Reasoning):能否跨多个会话片段整合信息并进行推理
- 知识更新(Knowledge Updates):能否识别信息变化并正确更新记忆中的事实
- 时间推理(Temporal Reasoning):能否理解事件发生的时间并进行正确的时间推算
- 拒答能力(Abstention):当缺乏相关信息时,能否选择不回答而非胡乱编造

LoCoMo
LoCoMo 是 2024 年提出的一个面向超长对话记忆的基准测试。它通过 LLM 生成 + 人工校正的方式构造出平均 300 轮、9K tokens、最长 35 个会话的对话,带有人设(persona)和事件时间线(temporal event graph),还包含图片分享与回应等多模态元素。
DMR(Deep Memory Retrieval)
DMR 是 Letta 团队提出的一个较早的长期记忆基准,主要用于检验模型在多会话场景下的事实检索能力。 它的特点是设计简单,核心就是看模型能否从过去的对话里准确回忆出具体事实,因此更偏向于一致性与准确性,而不像 LongMemEval 或 LoCoMo 那样覆盖多维度的复杂任务。 目前普遍认为 DMR 的难度中等,适合做记忆模块的快速验证,但单一的问答形式也被批评为不够全面。4.2 SOTA 技术
目前有一些相对前沿的应用和实践,我们一起来看看原理是什么,首先看看涉及这块比较流行的方法:- Letta(MemGPT):基于 AgenticRAG 实现
- Zep(Graphti):基于向量化和知识图谱(图数据)实现
- Mem0:基于向量化和知识图谱(图数据)实现
- Memobase:基于 Profile+ 事件时间线(Event Timeline)来实现的
- LangMem/LangGraph:基于 posgres 存记忆数据和向量化后的数据实现
- OpenAI’s Memory:内部机制没有公开,但是可以观测到也是按照条目进行存放,结合向量化进行检索的实现方式
4.2.1 Letta(原 MemGPT)
MemGPT 也就是我们前面提到的,现在改名叫 Letta 了,是一个开源的项目,非常值得深入了解一下其内的机制。官网的介绍是:The platform for stateful AI agents Create agents with advanced memory that can learn and improve over time. Open source AI, built for developers.很直观的口号和定位,面向有状态的 AI Agent,让 AI Agent 拥有高级记忆功能,并且可以随着时间持续学习和提升,开源且为开发者而生。下面这种官方文档里的图可以完美地展示有状态 AI Agent 这个理念:

{CORE_MEMORY} 的例子:
- 核心记忆(Core Memory): 以 Block 为单元存储,存储代理人格(Persona)和用户(Human)信息
- 对话记忆(Conversation Memory): 时间序列存储,完整对话历史,通过模糊匹配检索,可分页按条目拉取。
- 归档记忆(Archival Memory): 向量检索,长期语义记忆,支持语义搜索。

- id: str - 块的唯一标识符
- value: str - 块的内容值
- limit: int - 字符限制(默认 5000)
- label: str - 块标签(human 或 persona)
- is_template: bool - 是否为模板
- read_only: bool - 是否只读
- description: str - 描述信息
- metadata: dict - 元数据
- created_by_id: str - 创建此块的用户 ID
- last_updated_by_id: str - 最后更新此块的用户 ID
- 一个是用户信息(Human),就是随着时间推移获取到的用户信息都会保存在这里面
- 一个是角色信息(Persona),就是 AI 这个角色的性格、身份和说法风格等人设信息

4.2.2 Zep(原 Graphiti)
先用 Zep 论文里的一个基准测试图表开始吧:


message,json 和 text 中提取,我们这边只展示 message 方式,其他两种都是一样的,只不过提示词和里面拼装的数据有些许差别而已):
4.2.3 mem0
mem0 结合了向量数据库和图数据库来做记忆的存储。下面我们会引用下这里的几张图,我们可以看一下下面这张全局的流程示意图:


- 解析输入内容,支持字符串、字典和列表
- 通过提示词 +LLM 调用提取事实
- 每个事实向量化走相似性搜索看看是否有相似的记忆
- 如果有相似记忆,再次通过提示词 +LLM 调用决定记忆更新方式:增删改和不操作
- 最终确认的记忆会进一通过提示词 +LLM 调用来提取实体和关系,方便最终更新到图数据库时使用
- 最终记忆会落到向量数据库、图数据库,而操作记录会落到关系数据库中

-
明确角色定义:
- 个人信息整理助手
- 专注于提取和组织事实信息,用于轻松检索和个性化交互
- 明确 7 大信息类型:个人偏好、重要个人信息、计划和意图、活动和服务偏好、健康和身心偏好、职业详情、其他杂项
- 提供 Few-Shot 示例
- 事实提取原则:原子化、具体化、时间敏感、关系保留
- 输出格式要求:JSON 格式,处理多语言,空结果处理
4.3 实践
了解一个技术实现最有效的方法依然还是原理(看 Paper、文章)+ 看代码实现(一方或三方实现)+ 动手实践(get your hands dirty)。我们会用剪短的例子来感受一下记忆系统的运用,我们不会从 0 开始实现,不会去重复造轮子,我们会直接利用现有的解决方案去实现一个 Demo,作为教学目的,完全够用了。如果需要针对特殊的业务场景针对性设计的话,可以结合前面的理论知识,基于某个成熟的开源方案做二开。
app/app.py,入口在这里:
app/config.py 进行配置加载:
FactStore,用户后面保存和读取记忆用,可以看到基本上就是将内容做向量化,将对应的 Embedding 存到数据库,检索的时候就通过将问题向量化后到数据库里做相似度检索,检索出 Top K 条记忆,这边我们就检索相似度最高的 3 条。
里面涉及 Embedding 模型的使用:
build_graph 是利用了 langgraph 去编排 workflow,这边比较简单,就一个关键节点。回到前面的 app.py 里,最后是利用 langgraph 的 checkpoint 开始运行,但是实际上我们这个例子过于简单,用不到 checkpoint 去恢复会话之类的功能。
最后是两份提示词,一份是系统提示词 prompts/system.prompt:
prompts/fact_extraction.prompt:


用户的名字是Leo,在此之后我又进行了一些对话,然后我重新开了一个新的会话:


4.4 总结
最后我想引用一段姚顺雨在张小珺的访谈里说的:李广密:更关键的是,大模型技术没有垄断性。硅谷头 3-4 家好像都能追到一定的水平。如果 OpenAI 有垄断性,那是比较可怕的。 **姚顺雨:**我觉得暂时没有垄断性。但如果你能找到一个产品形态,把研究优势转换成商业优势,就会产生壁垒。 现在对于 ChatGPT 比较重要的是 Memory(记忆)。 这是可能产生壁垒的地方。如果没有 Memory,大家拼谁的模型更强。但有了 Memory,拼的不仅是谁的模型更强,而是用户用哪个更多、哪个粘性更强。 我积累了更多 Context,它能给我更好体验,我就会有粘性——这或许是研究优势转化成商业优势的方式。记忆系统是一个非常重要的部分,就拿 ChatGPT 的例子来说,ChatGPT 有先发优势,在其他竞争对手赶上之前,已经积累了大量的用户。现在其实对于很多人来说,不同家的 ChatBot 的效果其实大差不差,让用户持续使用的 ChatGPT 的原因其中一个就是记忆系统,就拿我自己而言,因为长期使用,所以拥有大量的历史聊天记录,导致 ChatGPT 可以在某些情况下知道我想要什么,这提升了效果(让用户从体感上觉得其效果更好)也增强了用户粘性。但是其实我在很多时候发现了错误召回的情况,过度召回,这也是记忆系统目前存在的问题之一。 还有一段是关于方法、评估和任务的看法:
李广密:Long Context 跟 Long-Term Memory 是什么样的关系? 姚顺雨:Long Context 是实现 Long-Term Memory 的一种方式。 如果你能实现 1 亿或 1 千亿或无限长的 Context,它是实现 Long-Term Memory 的一种方式。它是一种和人区别很大的方式,但这是有可能的。当然会有很多不同方式,不好说哪种是最好,或者最合适。 李广密:现在业界实现 Long Context 有 Linear(线性)方式、Sparse(稀疏)方式,或者 Hybrid(混合)方式,你有倾向吗? 姚顺雨:我不想对方法进行评论,但我想对 evaluation(评估)和 task(任务)进行评论。 起码到去年为止,大家主要还在做所谓 Long Range Arena(长距离评估基准),比如 hay in the stack——我有一个很长的输入,我在中间插入一句话,比如 “姚顺雨现在在 OpenAI”,然后我问你相关问题。 这是一个必要但不充分的任务。你能完成这个任务,是 Not Memory Work(非长期记忆任务)中的前置条件,但远不是充分条件。它是必要条件,但现在大家有点陷在这个必要条件,没有创造更难或更有价值的任务,这是个问题。 当没有一个很好的评估方式,很难真正讨论各种方法的好坏。我想表达的是,前面我们学习了这些理论知识和一些实践,但是这只是代表了技术在这一刻的样子,虽然神经网络已经很多年了,但是以大模型为主的 AI 是一个年轻的学科,配套的应用也出现不久,所以这些技术都会随着时间的流逝和技术的进步而改变。就好像他提到的,这些基准测试其实只是满足了必要条件,而不是充分条件。很多时候包括底座大模型在刷榜(基准测试)中都可以不断提升分数,但是在实际生产环境中的效果却止步不前,这就是理想和现实最大的 Gap。人类现实社会存在很多难以解决的问题的原因在于,很多问题、很多场景是没办法进行量化或规则提取的,因此很难出现针对一个问题去设计一个通用的基准测试,所以为什么做一个玩具几天就可以了,但是打磨出一个真的有商业价值的产品需要花费几个月、几年的时间来完成,这也是我们在探索前沿科技和应用的过程中需要不断去思考的一个点。 因此始终记住这本书有别于传统的技术书籍:这本书是起点,不是终点。它应是指导你去探索未知边界的基础,而不是让你止步不前的知识。