
HelloAgentsMemory——让 Agent 拥有记忆从“失忆的大模型”到“具有长期记忆的智能体”系列说明本文是 HelloAgents 第八章《记忆与检索》的学习笔记上篇结合官方教程内容和个人理解进行整理。本文主要介绍记忆系统Memory的设计思想包括为什么 Agent 需要记忆、人类记忆模型对智能体的启发以及 HelloAgents 中 Memory 模块的整体架构。前言随着大语言模型LLM的不断发展越来越多的智能体Agent开始具备自主规划Planning、工具调用Tool Use、反思Reflection等能力。前面的 HelloAgents 教程也逐步实现了这些核心功能一个 Agent 已经能够根据用户需求自主调用工具并完成复杂任务。然而即使拥有这些能力Agent 仍然存在一个非常明显的缺陷——没有长期记忆。例如下面这段对话用户 我叫小明目前是一名计算机专业研究生。 Agent 好的我记住了。 ...... 几天后重新开启会话 用户 你还记得我是谁吗 Agent 抱歉我不知道。为什么会出现这种情况原因并不复杂。LLM 本身并没有真正意义上的记忆模型能够看到的信息全部来自上下文窗口Context Window。一次对话结束之后新的会话不会自动继承之前的内容因此模型无法真正记住用户的信息。也就是说对于大模型而言它不是忘记了而是从来没有保存过。这也是为什么我们会觉得 ChatGPT、Claude 等模型像失忆一样。虽然目前越来越多的产品都提供了 Memory 功能但这实际上并不是模型本身具备了记忆而是在模型之外额外构建了一套记忆管理系统Memory System。HelloAgents 第八章的目标就是为 Agent 增加这样一套长期记忆能力。一、为什么 Agent 需要 Memory在传统聊天机器人中每次回答往往都是独立完成的因此是否具有长期记忆影响并不明显。但是对于 Agent 来说仅仅能够回答问题远远不够。一个真正能够持续工作的智能体需要在不同时间、不同任务之间保存经验、积累知识并根据历史信息做出更加合理的决策。因此Memory 已经成为现代 Agent 不可缺少的重要组成部分。通常来说Memory 至少具有以下几个作用。1. 实现连续对话最直观的作用就是支持长期对话。例如用户 以后推荐编程语言的时候优先推荐 Python。 ...... 几天后 用户 推荐一个适合机器学习的语言。如果 Agent 没有长期记忆它只能重新分析用户当前的问题。而如果保存了历史信息它就能够知道用户之前明确表示喜欢 Python。因此回答可能变成推荐 Python因为你之前提到希望优先学习 Python它拥有丰富的机器学习生态例如 PyTorch、TensorFlow、Scikit-Learn 等。可以看到回答已经具有连续性。2. 构建用户画像User Profile长期记忆不仅能够保存一句话还可以逐渐形成用户画像。例如经过很多次交流之后可以得到用户偏好 ✓ 喜欢 Python ✓ 使用 Markdown ✓ 更喜欢中文回答 ✓ 主要研究方向多目标优化 ✓ 正在学习 Agent以后 Agent 回答问题时就不需要用户反复介绍自己的背景。这也是许多商业 AI 产品越来越重视 Memory 的原因。3. 支持长期任务Long-term Task越来越多 Agent 开始执行持续数小时甚至数天的任务例如Deep Research自动软件开发长时间数据分析自动论文阅读如果 Agent 每完成一步就忘记之前发生了什么那么整个任务几乎无法继续。例如Day1 已经阅读论文 A Day2 继续阅读论文 B Day3 总结所有论文如果没有 Memory第三天根本不知道前两天做过什么。因此Memory 也是实现 Long-term Agent 的基础能力。4. 不断积累经验对于真正智能的系统来说重要的不仅是回答问题更重要的是学习。例如第一次用户 这个回答太简单了。第二次用户 希望加入代码示例。第三次用户 最好使用 Markdown。如果 Agent 能够不断记录这些反馈它以后生成内容时就会越来越符合用户习惯。这种能力本质上就是一种经验积累。二、人类记忆系统对 Agent 的启发HelloAgents 在介绍 Memory 时并没有直接讲代码而是首先介绍了**认知心理学Cognitive Psychology**中的人类记忆模型。这是因为目前很多 Agent Framework如 LangGraph、Mem0、Letta 等在设计 Memory 时都借鉴了人类大脑的记忆方式。通常认为人类记忆可以划分为三个层次外界信息 │ ▼ 感觉记忆Sensory Memory │ ▼ 工作记忆Working Memory │ ▼ 长期记忆Long-term Memory不同层次承担不同的功能。一感觉记忆Sensory Memory感觉记忆是信息进入大脑后的第一站。例如当我们看到一张图片、听到一句话、闻到一种气味时这些信息都会首先进入感觉记忆。它具有两个特点① 容量非常大几乎所有感官信息都会短暂保存。② 保存时间极短通常只有几百毫秒到几秒钟。如果没有进一步关注这些信息很快就会消失。例如走在街上 ↓ 看到很多广告牌 ↓ 大多数内容马上忘记Agent 一般不会实现这一层因为它更关注已经进入推理阶段的信息。二工作记忆Working Memory工作记忆可以理解为当前正在思考的问题。例如我们计算37 × 48脑海中不断保存37 48 1776这些临时信息就是工作记忆。工作记忆容量非常有限。认知心理学提出著名的“7±2 法则”认为人类能够同时处理的信息数量通常只有 59 个对象。对于 Agent 而言工作记忆对应的是当前 Prompt当前任务状态Tool 返回结果中间推理过程例如用户提问 ↓ LLM 思考 ↓ 调用搜索工具 ↓ 获取搜索结果 ↓ 继续推理整个过程中产生的大量临时信息都属于 Working Memory。这些内容通常只在当前任务中有效任务结束后即可释放。三长期记忆Long-term Memory真正让人具有学习能力的是长期记忆。与工作记忆相比它几乎没有容量限制可以保存几年甚至一生。长期记忆又可以进一步划分为两类。1. 程序性记忆Procedural Memory程序性记忆保存的是技能。例如骑自行车游泳打字写代码这些能力往往很难用几句话描述却能够通过不断练习形成。对于 Agent 而言可以理解为各种能力模块例如会调用搜索工具会调用代码解释器会生成图片会编写 SQL这些能力类似于 Agent 已经掌握的技能。2. 陈述性记忆Declarative Memory陈述性记忆保存的是可以用语言描述的信息。它又继续分为两种不同类型1语义记忆Semantic Memory语义记忆主要保存事实和知识。例如北京是中国首都 Transformer 于 2017 年提出 Python 是解释型语言这些知识没有明显时间属性。对于 Agent 来说语义记忆通常包括用户偏好用户职业常见知识事实信息例如用户喜欢 Markdown。 用户研究方向是 Agent。 用户主要使用 Python。这些都属于 Semantic Memory。2情景记忆Episodic Memory与语义记忆不同情景记忆保存的是经历过的事件。例如昨天下午 导师让我修改实验方案。或者上周完成了论文初稿。它最大的特点就是具有时间属性。通常包含时间地点人物事件对于 Agent 来说情景记忆非常重要。例如2026-06-01 已经完成数据清洗 ↓ 2026-06-05 已经训练模型 ↓ 2026-06-08 开始分析实验结果这些任务记录共同组成了一条完整的工作流程。因此在很多现代 Agent 框架中Semantic Memory 与 Episodic Memory 都是长期记忆的重要组成部分。下面继续第二部分。本部分重点介绍Memory 与 RAG 的关系、HelloAgents 的 Memory 架构以及四类记忆的设计。三、Memory 与 RAG 有什么区别很多初学 Agent 的同学都会有一个疑问既然已经有 RAGRetrieval-Augmented Generation检索增强生成为什么还需要 Memory实际上这两者虽然都涉及检索但解决的问题完全不同。可以先看下面这张对比图Agent ┌─────────────────┐ │ LLM │ └────────┬────────┘ │ ┌──────────┴──────────┐ │ │ ▼ ▼ Memory RAG知识库 记住过去 查询外部知识一句话概括就是Memory记住自己经历过什么。RAG查找外部有哪些知识。二者关注的对象不同。Memory保存智能体自己的经历Memory 保存的是 Agent 与用户交互过程中产生的信息例如用户喜欢 Python。 用户正在学习 Agent。 用户上周完成了论文初稿。 用户昨天让我帮忙修改代码。这些内容都是 Agent 自己经历过的。它们最大的特点是与用户密切相关会随着交流不断增加每个用户都不一样因此Memory 更像一个人的大脑。RAG连接外部知识世界而 RAG 面向的是另一类问题。例如企业内部文档 PDF Word 论文 产品说明书 API 文档 公司知识库这些知识模型原本并不知道。如果直接问TensorRT 最新支持哪些功能LLM 很可能回答得不完整。但如果先去企业知识库检索相关文档再把文档放进 Prompt模型就能够基于最新资料回答。整个过程就是 RAG。因此RAG 更像一本能够快速翻阅的百科全书。一个例子理解二者区别假设用户连续几个月都在使用同一个 Agent。某一天用户问帮我推荐一本机器学习的书。Agent 的处理流程可能如下第一步查询 MemoryMemory 中发现用户喜欢 Python。 用户是一名研究生。 主要研究方向是人工智能。这些信息说明推荐应该偏向 Python 实现而不是 C。第二步查询 RAG随后再去知识库中检索机器学习经典教材 最新出版书籍 课程资料找到之后交给 LLM。最终回答可能变成根据你的研究方向我建议阅读 《Hands-On Machine Learning with Scikit-Learn、 Keras and TensorFlow》 原因 ① 你之前一直学习 Python ② 这本书代码全部采用 Python ③ 非常适合研究生学习。可以看到Memory 决定了推荐给谁RAG 决定了推荐什么。两者结合之后Agent 才真正具有个性化能力。四、HelloAgents 的 Memory 系统架构理解 Memory 的作用之后再来看 HelloAgents 是如何设计整个记忆系统的。官方并没有把 Memory 看成一个简单的列表而是设计成了完整的分层架构。整体可以表示为Memory System │ ┌───────────────────┼───────────────────┐ │ │ │ ▼ ▼ ▼ Infrastructure Memory Types Storage │ ▼ Embedding整个系统可以理解为四层。第一层Infrastructure基础设施层这是整个 Memory 的核心入口。它负责统一管理所有记忆操作。主要包括几个基础组件MemoryManager MemoryItem MemoryConfig BaseMemory它们各自承担不同职责。MemoryItem——记忆的基本单元所有记忆最终都会表示成一个 MemoryItem。例如MemoryItem(content用户喜欢 Python,memory_typesemantic,importance0.9)一个 MemoryItem 一般包含content memory_type timestamp importance embedding metadata其中content真正保存的信息。例如用户喜欢 Markdown。memory_type表示属于哪一种记忆。例如working semantic episodic不同类型采用不同管理策略。importance表示重要程度。例如天气很好重要性可能只有0.2而用户长期研究方向是人工智能重要性可能达到0.95重要信息通常不会轻易删除。MemoryManager——整个系统的大脑如果说 MemoryItem 是一条记忆那么 MemoryManager 就是管理所有记忆的人。Agent 不会直接操作数据库。所有操作都会经过 MemoryManager例如添加记忆 ↓ 更新记忆 ↓ 搜索记忆 ↓ 删除记忆 ↓ 总结记忆统一管理之后不同类型 Memory 的接口保持一致也方便后续扩展新的记忆类型。BaseMemory——统一接口HelloAgents 中不同 Memory 类型都继承同一个父类。例如classBaseMemory:defadd():passdefsearch():passdefupdate():passdefdelete():pass这样做的好处就是无论是 Working Memory还是 Semantic Memory都可以通过统一接口进行操作。符合面向对象设计思想。第二层Memory Types记忆类型官方根据前面介绍的人类记忆模型实现了四种不同类型的 Memory。Memory │ ├── Working Memory ├── Semantic Memory ├── Episodic Memory └── Perceptual Memory下面分别介绍。一Working Memory工作记忆工作记忆主要保存当前任务执行过程中产生的信息。例如用户问题 ↓ Prompt ↓ Tool 返回结果 ↓ LLM 推理过程 ↓ 最终回答整个流程中产生的大量临时数据都属于 Working Memory。它具有几个特点生命周期短容量有限任务结束即可释放例如正在调用搜索工具…… 搜索完成…… 继续推理……这些内容没有必要长期保存。因此 Working Memory 通常会设置TTLTime To Live到期自动删除。二Semantic Memory语义记忆Semantic Memory 保存长期知识。例如用户喜欢 Python。 用户来自哈尔滨。 用户研究方向是 Agent。 用户经常使用 Markdown。这些信息没有明显时间限制。无论今天还是一年后它们通常仍然成立。因此适合长期保存。Agent 每次回答之前都可以先查询 Semantic Memory从而生成更加个性化的回复。三Episodic Memory情景记忆Episodic Memory 保存的是事件。例如2026-06-01 开始训练模型。或者2026-06-03 实验出现 CUDA Out Of Memory。继续2026-06-05 修改 Batch Size。 成功完成训练。这些事件按照时间不断排列就形成了一条完整的经历。因此 Episodic Memory 更关注时间地点顺序上下文很多长任务 Agent 都依赖 Episodic Memory 来追踪执行过程。四Perceptual Memory感知记忆除了文本之外现在越来越多 Agent 开始支持图片视频音频这些多模态信息也需要长期保存。例如今天上传了一张实验图片。 ↓ Agent 自动分析。 ↓ 以后再次提到这张图片 Agent 能继续讨论。这种能力就是 Perceptual Memory。它对应的是智能体对于视觉、听觉等多模态输入的长期记忆。目前多模态 Agent 已逐渐开始支持这一类型的记忆。四种 Memory 的对比Memory 类型保存内容生命周期示例Working Memory当前任务、中间推理短期Prompt、Tool 输出Semantic Memory知识、事实、用户偏好长期用户喜欢 PythonEpisodic Memory事件、经历长期昨天训练模型成功Perceptual Memory图片、音频等多模态信息长期上传的一张实验图片可以看到这四类 Memory 并不是孤立存在的而是共同组成了 Agent 的长期记忆系统。下面继续第三部分也是本篇博客的最后一部分。这一部分会介绍Memory 的存储方式、生命周期以及 HelloAgents 中 Memory 的基本使用流程最后进行总结。五、Memory 是如何存储的前面已经介绍了 Memory 的分类但还有一个问题这些记忆最终保存在哪里如果只是保存在 Python 变量中那么程序一旦关闭所有记忆都会消失。因此一个完整的 Memory 系统必须具备**持久化存储Persistent Storage**能力。HelloAgents 将 Memory 的存储拆分为多个层次不同类型的数据交由不同的存储方式管理。整体流程如下用户输入 │ ▼ MemoryManager │ ┌──────────┴──────────┐ │ │ ▼ ▼ 文本信息存储 向量信息存储 │ │ SQLite Qdrant可以发现一条记忆并不会只保存一份而是会根据用途保存不同的数据。SQLite保存原始文本SQLite 是一个轻量级关系型数据库非常适合本地部署。例如content 用户喜欢 Python time 2026-07-04 type semantic这些结构化信息都可以直接存入 SQLite。SQLite 的优点包括部署简单不需要额外服务器支持 SQL 查询易于管理文本和元数据适合作为 Memory 的持久化数据库。因此在 HelloAgents 中它主要负责保存原始内容和相关属性。为什么还需要向量数据库如果只保存文本那么当用户输入推荐一种适合人工智能开发的语言。数据库中保存的是用户喜欢 Python。由于两个句子没有完全相同的关键词传统数据库很难判断它们相关。因此仅靠字符串匹配并不能满足 Agent 的需求。这也是为什么现代 Agent 基本都会引入向量数据库Vector Database。Embedding把文本转换成向量在进入向量数据库之前需要先进行Embedding向量化。Embedding 可以理解为把一句自然语言转换成一个高维数字向量。例如用户喜欢 Python经过 Embedding 模型之后可能变成[0.12, -0.37, 0.81, ..., 0.24]再例如推荐 Python 做机器学习。转换后[0.10, -0.35, 0.79, ..., 0.26]虽然两句话完全不同但由于表达的语义相近因此两个向量之间的距离会比较近。这就是语义检索能够工作的基础。Qdrant负责语义检索得到向量之后就可以存入向量数据库。HelloAgents 使用Qdrant作为默认向量数据库。Qdrant 的主要职责包括保存 Embedding根据向量相似度进行搜索返回最相关的 Memory。例如当前数据库中保存了Memory A 用户喜欢 Python。 Memory B 用户喜欢 Java。 Memory C 用户喜欢 C。用户输入推荐一种适合深度学习的编程语言。经过 Embedding 后系统会计算该问题与所有 Memory 向量之间的距离。由于 “Python” 与 “深度学习” 的语义最接近因此 Qdrant 会优先返回用户喜欢 Python。这就是语义检索Semantic Retrieval的过程。相比传统关键词匹配它能够理解含义相近但表达不同的文本因此检索效果更好。六、Memory 的生命周期一条 Memory 从产生到被使用并不是简单地存进去再取出来。HelloAgents 借鉴了人类记忆形成过程将 Memory 划分为多个阶段。整个流程如下用户输入 │ ▼ Encoding编码 │ ▼ Storage存储 │ ▼ Retrieval检索 │ ▼ Consolidation巩固 │ ▼ Forgetting遗忘下面分别介绍。1. Encoding编码这是 Memory 的第一步。当用户输入一句话时系统首先判断这句话是否值得记住例如今天天气不错。通常没有长期价值。而以后回答问题请使用 Markdown。则属于用户偏好值得长期保存。如果需要保存系统会完成以下操作提取关键信息计算 Embedding构建 MemoryItem准备写入数据库。这个过程就称为 Encoding。2. Storage存储完成编码之后Memory 会真正写入数据库。例如memory.add(content用户喜欢 Markdown,memory_typesemantic,importance0.9)此时系统会同步完成保存文本保存 Embedding保存时间保存类型保存重要程度。这样一条完整的 Memory 就建立完成了。3. Retrieval检索当用户再次提问时系统不会立即调用 LLM。而是先执行 Memory 检索。例如用户 推荐一种笔记格式。Memory 检索后发现用户喜欢 Markdown。于是把它加入 Prompt用户偏好 喜欢 Markdown。 当前问题 推荐一种笔记格式。最终 LLM 会生成更加符合用户习惯的回答。这也是 Memory 发挥作用最重要的一步。4. Consolidation巩固并不是所有 Memory 都具有相同的重要性。例如今天搜索了一次天气。价值很低。而用户连续几十次要求使用 Markdown。则说明这是一个长期稳定的偏好。因此系统可以根据出现频率用户反馈使用次数Importance不断提高某些 Memory 的权重。这个过程类似于人脑不断强化长期记忆因此称为 Consolidation巩固。5. Forgetting遗忘真正优秀的 Memory 系统不仅会记住也要学会忘记。如果所有内容都永久保存那么数据库会越来越大检索效率也会不断下降。例如昨天查询天气。 今天搜索快递。 临时生成一个验证码。这些信息通常没有长期价值。因此系统会根据TTL生存时间Importance重要程度最近访问次数自动清理无效 Memory。这种机制既节省存储空间也提高了检索效率。七、HelloAgents 中 Memory 的基本使用HelloAgents 将 Memory 封装成统一接口开发者无需直接操作数据库。例如添加一条记忆resultmemory_tool.execute(add,content用户喜欢 Python,memory_typesemantic,importance0.9)这里content需要保存的内容memory_type指定记忆类型importance重要程度用于后续排序和保留策略。搜索 Memory 也非常简单resultmemory_tool.execute(search,query机器学习,limit3)系统内部会自动完成查询语句 │ ▼ Embedding │ ▼ Qdrant 相似度搜索 │ ▼ 返回 Top-K Memory开发者只需要关注搜索结果而不需要自己实现向量检索逻辑。如果想查看当前 Memory 的整体情况还可以进行统计resultmemory_tool.execute(summary)可能得到类似结果Working Memory2 条 Semantic Memory15 条 Episodic Memory8 条方便开发者了解当前 Agent 的记忆状态。八、总结随着 Agent 能力不断增强仅依靠 LLM 的上下文窗口已经无法满足复杂任务需求。Memory 的引入使 Agent 不再只是即时回答问题而是真正具备了持续学习、长期积累和个性化服务的能力。通过本章的学习我们可以总结出以下几点Memory 是 Agent 长期运行的基础能力。它能够保存用户偏好、历史事件以及任务经验使智能体具备连续对话和长期任务执行能力。HelloAgents 的 Memory 借鉴了人类记忆模型。根据不同信息的特点将记忆划分为 Working Memory、Semantic Memory、Episodic Memory 和 Perceptual Memory不同类型采用不同的管理策略。Memory 与 RAG 并不冲突而是相辅相成。Memory 负责保存 Agent 自身的经历和用户信息RAG 则负责连接外部知识库为模型提供最新、最专业的知识支持。向量化Embedding和向量数据库Qdrant是 Memory 实现语义检索的关键。它们使系统能够理解文本的语义而不仅仅依赖关键词匹配从而显著提升检索质量。