想象一位助理你每次开口他都礼貌地问您好请问您贵姓。你告诉他姓王五分钟后换个话题他又问一遍您好请问您贵姓。他没有留下任何记录每一次对话都是全新的开始。这就是没有记忆的 Agent。它不是不聪明而是每轮对话结束就归零。这篇讲清 Agent 记忆的来龙去脉为什么大模型需要外挂一套记忆系统短期记忆和长期记忆分别怎么存、怎么取最后用一个真实工具 Mem0 体验一遍。1. 记忆是什么Agent Memory即 AI 智能体的记忆系统是专门为 AI 智能体设计的、能够跨会话、跨任务持久保留和召回信息的外部记忆机制。关键词是外部。记忆不在模型权重里而在模型之外的一套存储和检索机制中。模型负责理解和生成记忆系统负责记住和翻找两者分工明确。有记忆的 Agent 像一位随身带着全能档案夹的专属秘书。你今天跟他说我喜欢靠窗的座位“对芒果过敏”他当场记下明天你让他订机票他会直接问还是靠窗吗后天你让他推荐餐厅他主动提醒您对芒果过敏这家甜品没有芒果可以放心。更关键的是这个档案夹持续累积你三个月前随口提过讨厌嘈杂的环境现在让他找咖啡馆他会避开热门网红店只推荐安静的角落。这里有两个要素需要拆开一是跨会话信息要活过一次对话的结束二是统一所有信息要汇到一处能被统一检索而不是散落在几十个日志文件里。2. 为什么 Agent 需要记忆2.1 大模型本身没有状态大语言模型从根本上是无状态的。发送一条消息产生一个回复每次新对话都是一块白板。原因在于模型本身就是一个巨型函数输入进去token 出来模型权重中没有任何持久化存储能在会话之间保留对话历史。人们说模型记住了只是因为历史对话被重新拼进了这一次的输入里。简单的聊天机器人不在乎这一点。让它写一封求职信写完就结束不需要连续性。Agent 面对的情况不同它要处理长期运行的任务在时间推移中学习用户偏好跨多个会话与其他 Agent 协作。无状态性构成了根本性障碍。没有人能接受一个每周一早上都要重新自我介绍的个人助理。2.2 上下文窗口填不满这个坑最初的思路很直接既然历史要重新拼进输入那就把上下文窗口做大把所有信息都塞进去。现实很快否定了这种幻想。上下文腐烂Context Rot。当上下文中包含大量与当前任务无关的信息时模型需要在更大的信息空间里寻找相关内容注意力资源被分散容易出现关键信息遗漏、指令遵循能力下降和推理质量下降。你塞给它 100 万字的对话历史里面 99% 是废话、重复、无关内容模型看花了眼该记住的关键信息反而被淹没。学术界对这种现象有三个具体描述Lost in the Middle中间内容遗忘关键信息位于上下文窗口正中间时最容易被遗忘远远不如放在开头Primacy 效应或结尾Recency 效应。Attention Dilution注意力稀释无关内容越多模型就必须把原本集中在关键信息上的概率权重强行分给成千上万个无意义的词。Context Interference上下文干扰无关信息不只是在占位置它包含的语义特征会在向量空间中与有效信息产生负向交互。好比开一场跨部门辩论会第一个发言的人说用户喜欢简洁答案第二个人说用户是行业专家需要详尽分析第三个人又说用户今天赶时间越快越好。三句话在会议室里互相打架。上下文腐烂的本质不是信息变旧了而是信噪比Signal-to-Noise Ratio急剧下降。当上下文膨胀时模型的注意力头Attention Heads被迫分配大量权重去处理噪音为了看完所有内容不得不压缩信息的内部表征Representation Compression这个压缩过程会直接抹去细微但关键的用户偏好比如你要求的摄氏度单位或者用户名的大小写规则。检索成本随长度平方增长。长上下文检索的计算复杂度通常随上下文长度呈平方增长。上下文越长模型定位相关信息的代价越高。每问一个问题它都要把整个工作台从头到尾捋一遍才能找到相关的那几行工作台越大捋得越慢。成本失控。每个请求都携带大量历史 token费用迅速累积。你每说一句话模型都要把之前所有对话历史重新打包发一遍哪怕其中大部分是一年前的废话。总之上下文窗口是工作台不是仓库无法承载所有的记忆。2.3 追踪长期目标与个性化除了技术限制还有两个业务层面的理由。追踪长期目标胜任复杂任务。许多现实任务不是一次性的。任务连续性要求 Agent 记住任务进行到哪一步了比如订机票、选座位、支付这条链路走到哪也要求它记住哪些方案已经被否决过避免反复提出被拒绝的建议。目标一致性则要求它跨越数天、数周的任务中行为和决策始终围绕最终目标保持一致。构建个性化画像从通用走向专属。当 Agent 能回忆过去的对话它的回应会显得更个人化、更协作。情感连续性会建立信任改变人对 AI 的感受。2.4 一个对比失忆 AI 与记忆 AI你深夜说我最近特别焦虑感觉做什么都做不好。失忆 AI 的回复是焦虑是常见的情绪建议深呼吸转移注意力。正确但像在听录音机。记忆 AI 的回复是“记得上个月你处理那个难缠客户时也说过同样的’做不好’。但后来你复盘时发现是你对自己要求太高了。今天是不是又遇到类似’全盘否定自己’的瞬间了要不要像上次那样先把大目标拆成三个今天能做的小事”同样的模型差别只在于后者能取回两段历史记忆。这就是记忆系统在体验上的直接价值。3. 记忆分类最常见的分类借鉴认知科学的二分法短期记忆和长期记忆。3.1 短期记忆短期记忆指的是在当前一次对话或任务执行过程中临时存储的、上下文相关的信息。核心作用维持对话的连贯性支撑多步推理。技术本质它就是大语言模型上下文窗口Context Window内的内容。刚聊过的对话、当前用户给的临时指令“帮我查一下明天北京的天气”都放在这个工作台上。特点容量有限受限于模型支持的最大 token 数如 4K、128K、1M生命周期短对话结束时这部分记忆通常被直接清除不保存到数据库访问极快直接作为输入的一部分传给模型无需检索。打个比方你正和朋友在咖啡厅聊天你们正在说的这几句话以及前五分钟聊过的话题都在脑子里转所以说话很连贯不会前言不搭后语。3.2 长期记忆长期记忆指的是跨会话、持久化存储的信息包括用户的历史行为、偏好、事实知识等。核心作用实现个性化、持续学习与知识积累。技术本质通常通过外部向量数据库如 Chroma、Pinecone或传统数据库实现。Agent 在需要时根据当前问题去检索相关的历史记忆片段。特点容量近乎无限生命周期长可保存数天、数月甚至永久访问较慢需要经过检索-排序的过程不能直接使用。长期记忆就像你和朋友过去三年的所有聊天记录。你不可能把三年的话全部背下来再来聊天但如果你想问去年夏天我们去哪儿玩了你会翻开相册或日记查一下。查到了才能接上这个话题。3.3 长期记忆的三个子类长期记忆在心理学上还可以进一步细分这三类在 Agent 里的处理方式并不相同。类型定义特点Agent 例子语义记忆存储客观事实、概念、知识与个人经历无关大脑里的百科全书“世界是什么样的”知道勾股定理是 a² b² c²、“水的沸点是 100°C”、“Paris 是法国的首都”程序记忆存储如何做某件事的技能、流程、习惯内隐记忆难以用语言说清“知道怎么做而非知道是什么”调用天气 API 的流程取城市代码 → 拼 URL → 解析 JSON 取温度情景记忆存储个人经历的特定事件包括时间、地点、情绪自传体式记忆“我经历过什么”“昨天下午 3 点小明问过我方程 2x515要求我解释每一步”用大白话记语义记忆是 What是什么程序记忆是 How怎么做情景记忆是 When / Where / Who / What在什么时间、地点谁经历了什么事。这个分类不是学术摆设。它直接决定了信息该往哪种数据库里存后面的写入环节会用到。3.4 短期与长期的对比维度短期记忆工作记忆长期记忆生命周期单次会话对话结束即清空或随时间窗口滚动遗忘跨会话持久化存储本周、下月甚至永久保留物理载体上下文窗口即每次请求发给大模型的 Prompt 内容外部向量数据库、关系型数据库或键值存储不占上下文窗口除非被主动调取存储内容当前对话的最近几轮、当前任务的中间状态如正在进行第三步支付确认用户长期偏好、历史事件摘要、学到的技能路径、项目背景容量瓶颈严格受限于 Context Length且越长越贵、越慢理论上无限可横向扩展存储典型例子你刚说今天我要去北京出差它能听懂明天再说它就忘了记得你常住上海出差首选靠窗座位且讨厌国航的餐食哪怕是一年前的记录4. 短期记忆怎么处理短期记忆就是当前对话的工作台。处理策略的核心只有一句在有限的窗口里只放最精华的信息。4.1 四种常见策略滑动窗口只保留最近 N 轮对话更早的一刀切扔掉。Token 截断只保留最近 N 个 token。摘要不直接扔掉旧对话而是让模型定期把老对话压缩成一段简短摘要保留摘要 最近几轮原始对话。过滤不按轮数或 token 数切而是识别关键信息实体、指令、数字、偏好单独提取出来存到一个关键信息口袋里普通对话内容直接删。这四种策略单独使用都有缺陷滑动窗口丢掉久远但重要的信息Token 截断切在哪里全凭运气摘要丢失细节过滤则可能漏掉关键上下文。把它们组合起来才有效当前比较成熟的做法是三层记忆架构。4.2 三层记忆架构底层缓存层用滑动窗口保留最近 5-10 轮原始对话保证模型对当前话题的流畅接话。中间层摘要层对窗口之外的较早对话采用滑动摘要每隔 N 轮把旧摘要与新对话合并生成新摘要如此滚动。顶层事实层贯穿全程使用信息过滤实时维护一个事实口袋User Profile并随对话动态更新。消息进来后由分发器同时喂给三层生成回复时上下文组装器按固定优先级把三层内容拼进 Prompt先挂事实层再挂摘要层最后挂缓存层。事实层放最前面因为它最精炼也最不该被淹没。4.3 一个容易踩的坑顺序反转Token 截断和滑动窗口会引出一个问题如果从最早的消息开始截断模型会丢失最初的系统指令System Prompt。System Prompt 一旦被切掉Agent 的人设、约束、输出格式全部失效表现会突然失常。所以工程上的做法是System Prompt 和关键信息口袋永远锚定在窗口最前面绝不参与滑动或截断只把用户和助手的普通聊天内容拿去滚动。这也是图中把System Prompt 锚定最前写进组装器这一环的原因。5. 长期记忆的四个动作长期记忆的目标是在未来的新对话中能被检索出来、注入到上下文窗口。它的处理方式不是在当前窗口里裁剪或压缩而是围绕四个核心动作展开存储、更新、检索、遗忘。写入结构化存入检索按需召回更新修正与替代遗忘淘汰低价值5.1 存储什么时候写、怎么写触发时机有五类触发类型具体场景示例显式指令用户主动要求系统记住某条信息“记住我叫小明”、“请记录这个方案”、“我喜欢科幻片帮我记一下”短期记忆溢出上下文窗口即将满载如接近 128K token系统自动迁移最关键的部分做摘要固化多轮长对话后系统自动提取核心要点存入长期记忆会话终止对话结束时自动生成本次会话摘要并归档用户说再见或对话超时系统生成会话摘要存档高频信号同一事实或偏好在一轮对话中被反复提及第 1 轮说我喜欢 Python第 3 轮说Python 真好用第 5 轮说我平时都用 Python累计 ≥3 次触发自动记录定期反思每日或每周定时任务对近期行为日志复盘总结可复用的经验或改进点每周日复盘发现用户常在周日晚上询问理财问题总结为周期性需求模式并记录写入动作分三步类型归类、冲突检测与合并、差异化索引构建。固定属性 标量模糊偏好 长文本实体关系新信息类型判定关系数据库B-Tree 索引向量数据库向量索引图数据库图遍历索引第三步的分流是这套设计的核心不同类型的信息用不同的索引结构落到不同的数据库。固定属性标量如姓名、生日、城市要的是精确匹配和范围查询构建 B-Tree 索引存关系型数据库。模糊偏好、长文本如喜欢安静的咖啡馆需要理解含义做语义匹配构建向量索引存向量数据库。实体关系数据如李四接替张三的审批权限要的是关系遍历和因果推理构建知识图谱存图数据库。这一步呼应了 3.3 节的分类语义记忆多是标量事实程序记忆多是流程文本情景记忆里则常常藏着实体关系。5.2 更新新信息与旧记忆冲突了怎么办更新的目标是修正或取代长期记忆中的过时、错误或已变更的信息同时保留历史变更轨迹确保准确性与可追溯性。触发时机有三类用户显式纠正“我之前说的不对正确的是……”用户偏好漂移“我现在不喜欢动作片了改喜欢喜剧片”系统主动校验检测到新旧信息存在明确冲突比如相似度大于 0.9 但属性值矛盾。第三类可以看一个完整例子旧记忆里user.manager 张三新对话中用户提到我们组长李四今天给我批了年假。系统并未直接存储组长是谁但它主动调取企业内部组织架构 API 或过往邮件上下文发现张三已于上周离职李四已接替其审批权限于是自动级联更新把旧记忆标记为[Deprecated]并冻结新增manager 李四并记录变更原因为检测到审批权限转移旧节点失效。处理过程分四步定位要修改的旧记忆。通过关键词、时间、场景等线索从所有存储的记忆中把那条精准找出来。判断新信息属于哪一类。是客观事实姓名、生日、城市是主观偏好喜欢的食物、讨厌的风格还是可重复使用的方法比如做 PPT 时先列大纲类型不同后续处理方式略有不同。决定如何处理冲突。如果新旧信息有矛盾按以下优先级判定用户今天亲口说的优先于过去说的因为人可能改变主意。新信息更具体时保留宽泛的旧记忆同时把具体特例记下来。比如旧记忆是我喜欢科幻片新信息是我不喜欢《流浪地球》两者并不矛盾都保留。来源可信度不同时取更可信的那个比如权威资料优先于用户随口一提。以上都不满足以时间最新的为准。保存更新并保留历史。不直接覆盖旧记忆而是把旧的标记为已过期同时写入一条新记忆并附上本条替代了哪条旧记忆的说明。这样任何时候都能回头查看这条记忆的演变过程。如果新信息只是对旧记忆的补充、没有矛盾就直接附加进去不影响原有的。5.3 检索什么时候取、怎么取检索的目标是根据当前查询和上下文从长期记忆中精准取出最相关的历史信息注入到短期上下文窗口。什么时候需要检索有三种典型信号触发规则典型场景触发示例显式召回指令用户明确要求回溯历史信息、确认之前说过什么、找回之前的产出物“回忆一下上周讨论的缓存方案最终选的是 Redis 还是 Memcached”强指代消解跨会话操作或用户突然跳出当前子任务指向隐性历史对象新窗口里说把那个接口的超时时间改成 5 秒那个接口需要靠记忆消解静态偏好/约束缺失运维部署、固定周期报告生成、封装 API 调用“按上周的模板跑销售数据发邮件给老板”这三种信号都不满足时属于开放性问答或模糊召回是否检索由系统策略决定也可以直接回复。怎么取主要有三种方式检索方式核心思想适用场景优缺点向量检索把记忆存为向量嵌入查询时通过余弦相似度检索最相关片段开放性问答、模糊记忆召回快速、支持语义检索但难以捕捉实体间的复杂关系读取摘要定期把对话历史压缩为滚动摘要上下文窗口不足时的兜底方案降低 token 消耗但信息损失不可逆知识图谱把记忆组织为节点和关系人、地点、事件、时间复杂推理、精确关系查询精度高支持因果推理但实现复杂存储成本高实际工程中常采用混合策略向量相似度检索负责语义相近结构化查询负责精确匹配两者结合能有效降低漏检风险。检索失败时还需要降级策略避免整个链路卡死失败场景降级动作向量检索结果置信度全部低于 0.5降级为关键词全文检索BM25知识图谱无匹配实体纯向量检索 向用户澄清所有方式都返回空返回未找到相关记忆引导用户重新描述召回结果过多超过 100 条先聚类压缩为 Top-10 代表性记忆再重排序5.4 遗忘主动删与被动淘汰遗忘的目标是淘汰过时、低价值或违反隐私规定的记忆控制存储规模维持检索的信噪比。只增不减的记忆库检索质量会随时间持续下降。触发时机分主动和被动触发类型主动/被动具体场景示例精确删除主动用户要求遗忘某一条具体记忆“忘掉我刚才说的那个地址”、“把刚才那条记录删了”遗忘全部主动用户要求删除所有个人信息“忘记所有关于我的事”触发隐私合规流程需二次确认时间衰减被动某条记忆超过 90 天未被访问系统每日后台扫描自动标记长期未使用的记忆为候选低访问频率被动某条记忆被检索次数低于 1 次/月低频记忆可能价值较低进入候选容量限制被动记忆总数超过系统上限如 10⁶ 条删除重要性分数最低的 M 条记忆处理步骤分五步触发检测、筛选候选记忆 ID 列表、执行遗忘、级联处理关联记忆、记录日志。其中执行遗忘有三种力度区别在于可不可逆硬删除物理删除不可恢复。对应用户精确删除和遗忘全部这类明确指令。软删除标记为已删除检索时跳过。数据还在但不再被召回。降权降低检索得分系数比如乘以 0.2仍可能被召回。适合可能是低价值、但不确定的记忆。级联处理这一步容易被忽略如果删除的记忆存在关联依赖要同步处理关联记忆否则会留下悬空的引用。日志记录是可选的但涉及隐私合规时遗忘操作及原因的审计追溯是必需的。6. 记忆开发框架理解了原理落地时不必从零实现。目前主流的记忆框架框架简介Mem0业界广泛应用的核心记忆层专注长期记忆管理和个性化 AI。把记忆编排、检索与知识图谱结合能节省 90% 以上的 token 成本支持细粒度的用户/会话隔离和结构化更新LangMemLangChain 团队推出的记忆 SDK深度集成 LangGraph 生态。提供热路径工具用于对话中的实时记忆以及优化技巧用于长期优化 Agent 行为如更新系统提示词Zep构建动态的时序知识图谱擅长记忆信息间随时间变化的复杂关系并保持高效检索TencentDB Agent Memory腾讯云数据库团队自研的独立记忆管理底座原生提供自动写入、分层沉淀、按需召回与治理增强能力支撑跨会话、长周期、多任务场景Polar Agent Memory部署于 PolarDB for AI 节点的长期记忆引擎通过向量数据库与知识图谱双模存储自动检索、更新和关联历史对话AgentKit Memory提供企业级长期记忆管理能力通过统一接口对接主流记忆库框架Mem0、Viking 等Letta原 MemGPT借鉴操作系统内存管理思想让 Agent 把上下文窗口视为有限内存通过自主调用记忆工具来管理更具系统架构层面的灵活性MemOS从操作系统高度管理 AI 记忆的全栈框架把记忆提升为一级计算资源采用分层架构实现统一调度、更新与演化如果只是想让 Agent 记住用户偏好Mem0 这类核心记忆层上手最快如果需要精细控制记忆的写入与遗忘策略Letta、MemOS 这类把记忆当作内存管理来做的框架更合适。7. 实战Mem0 体验记忆管理理论讲完用 Mem0 亲手感受一次跨会话记忆。打开 Mem0 官网https://mem0.ai/点击 Start For Free 注册可以用谷歌账号或邮箱完成。进入后点击 Playground进入体验环境。输入下面这句话建立记忆我叫小周。我每天下午 17:00 有个内部沟通会议给我一个会议模板参考看它返回的回复。此时系统已经从这句话里提取出了两条信息你的名字以及每天 17:00 的会议安排并写入了记忆库。关键一步新开一个会话直接问它我叫什么。如果它能答出小周就说明记忆确实跨过了会话边界。这就是第 2.1 节讲的那件事模型本身没有状态是新会话重新检索到长期记忆并注入上下文才让它记得。这一步也能验证 5.1 节的写入触发逻辑。第 3 步那句话属于显式指令加事实陈述系统做了类型归类名字是固定属性标量会议时间属于带周期性的日程事实。Playground 界面上通常能看到它提取出的记忆条目对照着看就能理解结构化提取到底提走了什么。8. 要点清单记忆在模型之外。大模型是无状态的巨型函数说它记住其实是把历史重新拼进了输入。Agent Memory 是模型之外的一套持久化存储与召回机制。上下文窗口是工作台不是仓库。窗口越大不代表越好上下文腐烂会让信噪比急剧下降Lost in the Middle、注意力稀释、上下文干扰都是这么来的。短期记忆靠三层组合。缓存层滑动窗口、摘要层滑动摘要、事实层信息过滤各管一段单独用哪一种都有明显缺陷。System Prompt 不能参与滚动。从最早消息开始截断会切掉初始系统指令导致人设与约束失效它必须锚定在窗口最前。长期记忆是四个动作的闭环。存储、更新、检索、遗忘缺一个都会退化只存不遗忘检索信噪比持续下降。写入要按类型分流。标量属性进关系库模糊偏好进向量库实体关系进图库索引结构与数据形态必须匹配。冲突修改不覆盖旧记忆。旧记忆标记为已过期、新记忆记录替代关系才能保留演变轨迹保证可追溯。检索要有降级路径。向量检索置信度不足降级 BM25图谱无匹配转纯向量加澄清全空则明确告知用户而不是硬凑一个答案。结语大模型无状态所以 Agent 需要记忆上下文窗口塞不下所有历史所以记忆要分短期和长期短期记忆在窗口内做取舍靠三层架构在有限空间里保住最关键的信息长期记忆在窗口外做闭环存储、更新、检索、遗忘各有各的触发条件和处理流程。Mem0 这类框架做的就是把这套闭环封装成可以直接调用的能力。
