开沿科技
13305079753先填 5 道题
方法论与思考

AI Agent 的「记忆」怎么做?短期+长期+RAG 的三层架构

开沿研发中心·2026-06-14·17 分钟阅读

去年底我们接了一家 200 人规模的连锁零售客户的 Agent 项目,第一版上线后业务方提了一个让我们「破防」的问题:「为什么我昨天告诉它我们门店周日不发货,今天它又把周日的订单排进了配送计划?」我们查了日志,发现模型其实「听到」了那句话,但因为当时是另一个工单的对话,没有任何机制把这条偏好沉淀下来——下一次会话,Agent 就像第一次见这个用户。这不是 prompt 的问题,也不是模型不够聪明,是记忆架构压根没设计。后来我们用了三周时间,把它从「单轮上下文」改造成了「短期+长期+RAG」三层结构,业务方的复述次数从平均每天 4-6 次降到了不足 1 次。这篇文章想把这套架构、走过的坑和工程取舍都讲清楚。

很多团队做 Agent 卡在第二个月,并不是因为 prompt 写不好、也不是因为工具调用不灵,而是因为 Agent「记不住」。一次性问答的体验做到 80 分不难,但企业里真正能跑起来的 Agent,本质是一个「会持续累积上下文、会区分公共知识和私人偏好、会在合适的时机遗忘旧信息」的协作体。记忆系统的设计水平,几乎直接决定了它能不能从「演示玩具」长成「数字同事」。

为什么记忆是 Agent 系统设计的核心

如果说 LLM 是 Agent 的「大脑皮层」,工具调用是「手」,那么记忆系统就是「海马体+长期皮质」的组合。没有它,Agent 每一次对话都是「失忆症患者从零开始」——这在 demo 场景里看不出问题,在真实业务里则是灾难。

我们在做 AI Agent 落地路线图 的咨询时,反复跟客户强调一个判断:Agent 能不能产生复利价值,关键看它有没有记忆。 没有记忆,每次交互的 ROI 都是孤立的;有了记忆,Agent 会越用越懂业务、越用越像一个新同事,每一次对话都在喂养下一次对话。

更现实的层面,记忆决定了三件事:

维度 没有记忆的 Agent 有完善记忆的 Agent
单次对话上限 受限于上下文窗口(一般 8k-200k token) 理论上可跨越多个会话累积
用户体验 反复复述、解释、纠正 越用越「懂你」,复述次数指数下降
业务沉淀 知识停留在个人脑子里 个性化偏好和历史决策沉淀为团队资产
工程复杂度 低(只管当前对话) 高(需要写入/召回/过期/合规多层设计)

记忆系统并不是「锦上添花」,它是从「能用」到「好用」之间那道最大的坎。

短期记忆:上下文窗口的管理与压缩

短期记忆对应的是 LLM 的上下文窗口——它最直接、也最容易被滥用。很多团队的第一个版本就是「把所有历史消息都塞进 prompt」,结果三五轮之后就触发了 token 上限或 latency 暴涨。

短期记忆的核心是「窗口管理」,常见策略有三类:

  • 滑动窗口(Sliding Window):保留最近 N 轮对话。实现最简单,但容易丢掉关键背景。
  • 摘要压缩(Summarization):用 LLM 把早期对话压成简短摘要,最近几轮保持原文。质量上限高,但每次压缩有额外推理开销。
  • 结构化抽取(Structured Extraction):把对话里的事实、决策、待办抽成结构化 JSON,与原文分开存。适合工单/客服/项目协作场景。

开沿的实践是「分层缓冲」:最近 3-5 轮保留原文(高保真),更早的对话压缩成摘要(中保真),再早的提取成结构化事实(低保真但精确)。这套结构在 Claude/GPT 类模型上跑得很顺,配合 AI 路由的多模型策略 可以让摘要这一步用更便宜的小模型来做,整体成本控制得住。

短期记忆里有一个常被忽视的细节:工具调用的中间产物。如果 Agent 调用了三次数据库查询、两次 API,这些中间结果是放进上下文还是丢弃?我们的经验是「关键路径保留摘要、原始 payload 丢弃」——既保留可追溯性,又不撑爆窗口。

长期记忆:用户偏好/历史决策/事实知识的持久化

长期记忆是「跨会话存活」的那部分信息。它一般分四种:

  1. 用户偏好类:用户喜欢什么报表格式、习惯几点发周报、不接受周末打扰。
  2. 历史决策类:上次为什么选了 A 方案而不是 B、某个客户去年签的是哪个版本。
  3. 事实知识类:某个客户的联系人是谁、某个项目的截止日期、某个 SKU 的成本。
  4. 关系图谱类:用户 A 和客户 B 的对接历史、订单 C 关联的服务工单。

在工程实现上,长期记忆通常落在两类存储:

存储类型 适合内容 检索方式 典型选型
结构化数据库 有明确字段的事实 SQL/Key PostgreSQL、MySQL
向量数据库 自由文本的偏好/对话片段 语义检索 Qdrant、Milvus、PGVector
图数据库 实体关系类 图遍历 Neo4j、NebulaGraph
文档存储 半结构化 JSON 字段+全文 MongoDB、Elasticsearch

很多团队一上来就堆向量库,但向量检索的召回精度对短文本(一句偏好)其实不够稳。开沿的做法是:能结构化就结构化,能用关键词检索就别用向量。比如「周日不发货」这种偏好,我们会落到 user_preferences 表的 delivery_schedule 字段,命中率 100%;只有那些没法预定义字段的自然语言备注,才走向量。

这里还涉及一个重要话题:长期记忆的写入触发。不是每句对话都该被记住——什么样的信息值得「写进长期记忆」?我们的判断标准是「四要素」:用户主动表达的偏好、有时间跨度的事实、影响后续决策的约束、用户明确说「记住这个」。其他的对话片段留在短期记忆里就够了。这一点在 AI Agent 数据安全实践 里也反复提及——记得越多,合规风险越高。

RAG 记忆:知识库 + 向量检索的实战

RAG(Retrieval-Augmented Generation)是这两年最热的范式,但很多团队把 RAG 等同于「向量数据库+LLM」,这是简化过头的理解。从「记忆」的视角看,RAG 装的是企业的公共知识——产品手册、SOP、政策文件、技术文档、行业资料。

企业知识库 RAG 实战 里我们详细写过 RAG 的工程链路,这里只补几个和「记忆」相关的关键点:

  • 分块策略决定召回质量。同一份合同,按 512 token 死板切和按语义段落切,召回准确率能差出 20-40%。
  • 混合检索(Hybrid Search)已成标配。纯向量在长尾词、专有名词上召回差,结合 BM25 关键词检索几乎是必选项。
  • 重排序(Rerank)是性价比最高的优化。在向量召回 Top-20 后,用一个小的 reranker 模型选 Top-3,对答案质量的提升通常比换大模型更显著。
  • 元数据过滤不可省。「只检索当前用户有权限看的文档」「只检索某部门的文档」这类约束必须在向量库层就过滤掉,不能等到 LLM 出答案再后处理。

RAG 和长期记忆有一个常见的边界问题:它们都用向量检索,是不是该放一张表? 我们的答案是坚决的「不」。RAG 装公共知识、版本化、可审计、权限按文档走;长期记忆装个体化的私有上下文、动态变化、有遗忘曲线、权限按用户/会话走。一旦混表,后期想做权限隔离、做 GDPR/PIPL 风格的「被遗忘权」处理,会非常痛苦。

三层混合:如何在不同场景下切换

把短期、长期、RAG 三层装好了,下一个问题是「在某次对话里,怎么决定从哪一层取信息」。这是个调度问题,没有银弹,但有一些经验性规则:

场景类型 短期记忆 长期记忆 RAG 知识库
多轮对话/工单处理 必用 选用 选用
个性化推荐/偏好类问答 选用 必用 不用
政策/SOP 类问答 选用 不用 必用
涉及历史决策的复盘 必用 必用 选用
全新任务/冷启动 必用 不用 必用

实战中,我们一般用一个轻量的路由层来做这个选择:先看用户问题里有没有「我」「我们」「上次」「记得」这类指向私人上下文的代词,有则走长期记忆;再看有没有「政策」「规范」「文档」「制度」这类指向公共知识的词,有则走 RAG;剩下的默认只用短期记忆。这个路由可以用规则也可以用小模型,不必上重型方案。

需要警惕的是「过度召回」——把三层信息全塞进 prompt,看似稳妥实则灾难:token 飙升、关键信息被噪声淹没、模型注意力分散。我们的目标永远是「最少必要召回」,宁可少一条也不要多一条。

记忆的失效与遗忘机制

人脑会遗忘,Agent 也得会。一个永远不忘的 Agent 不仅占用资源,还会带来严重的合规问题。遗忘机制的设计有四种主流思路:

  • 时间衰减(Time Decay):每条记忆带时间戳,超过阈值自动降权或删除。简单粗暴但有效。
  • 访问频率(LRU/LFU):长期不被召回的记忆优先清理。适合用户偏好类。
  • 冲突覆盖(Conflict-based Eviction):新事实与旧事实矛盾时,新的覆盖旧的(并保留版本)。适合事实知识类。
  • 用户主动遗忘(Explicit Forget):用户明确说「忘掉那条」时立即删除。合规必选。

AI 合规 PIPL 实战 里我们提到过:用户主动遗忘必须做——《个人信息保护法》第 47 条明确要求企业提供删除入口。这不是技术细节,是法律红线。

遗忘机制还有一个微妙之处:软删除 vs 硬删除。前者方便审计回溯,但合规风险大;后者干净彻底,但出问题时不好追溯。开沿的方案是「向量库硬删、明文库软删并加密」——满足合规的同时保留运维侧的故障排查能力。

工程实现的三条主流路径

到了 2026 年,记忆系统的实现路径基本收敛成三条,各有取舍:

路径 代表方案 上手速度 灵活性 合规友好度 适合团队
Memory Bank(文件型) Claude Projects、Cursor Memory 极快 一般(数据出境) 个人开发者/小团队
框架方案 Mem0、Letta(前 MemGPT)、Zep 看部署方式 中小企业 AI 团队
自研架构 业务定制 可控 中大型企业/强合规场景

第一类是文件型 Memory Bank:把记忆塞进一个 markdown 或 JSON 文件,Agent 每次读取。Claude Projects、Cursor Memory 都是这条路线,胜在零门槛,但灵活性低、规模上去就乏力。

第二类是开源框架:Mem0、Letta、Zep 这类专门做 Agent 记忆的项目,提供了向量检索、增删改查、过期策略等基础能力。Mem0 比较轻、API 友好;Letta 是从 MemGPT 演化来的,更偏长上下文管理;Zep 在生产环境的稳定性口碑不错。这类框架的缺点是:续费曲线和数据出境政策需要仔细看,特别是 SaaS 版本。

第三类是自研架构:在 Postgres+向量库+缓存层上自己搭。开沿在做几个中大型客户的 Agent 时走的就是这条路——主要是因为客户的数据必须留在内网、字段级权限要严格、记忆要绑定到业务对象(如客户/项目/工单)。自研的成本不低,但可控性、可审计性、与 钉钉云盘 等内部系统的集成深度都是框架做不到的。

我们的建议是:框架打底、关键链路自研——用 Mem0 这类框架做向量检索和基础 CRUD,自研写入策略、过期策略和业务绑定层。这样既省了 2-3 个月研发,又保留了灵活性。

记忆和合规:什么数据该留、什么该忘

合规是记忆系统绕不开的话题,尤其在 PIPL、GDPR 都已经成熟落地的今天。我们在做客户项目时,一般用一张「记忆数据合规矩阵」来对齐:

数据类型 是否可写入长期记忆 保留期建议 是否需要用户授权
工作偏好(如报表样式) 6-12 个月无活跃则降权 隐式即可
业务事实(如订单、客户档案) 跟随业务对象生命周期 走业务侧协议
个人敏感信息(身份证号/银行卡) 不写入 - 单独授权且加密
健康/生物特征 不写入 - 严格授权+本地化
对话原文(含他人对话) 谨慎写入 7-30 天 双方授权

实操层面有几条铁律:

  1. PII 信息进入记忆前必须脱敏或加密——开沿的做法是用本地化的 NER 模型先扫一遍,标记出身份证、手机号、银行卡等字段,要么不存,要么加密存。
  2. 记忆必须有用户侧的「查看+导出+删除」入口——这不是产品功能,是法律义务。
  3. 跨境传输要慎之又慎——如果用 SaaS 版的记忆服务(如 Mem0 Cloud),要确认数据中心位置,必要时切到私有部署。

AI Agent 的权限审计 这篇我们详细讨论过记忆的权限模型——记忆不是「我说了它就该记」,而是要回答「谁能写、谁能读、谁能改、谁能删」这四个问题。

决策树:怎么为你的 Agent 选记忆架构

给一个简化的决策清单,可以帮你快速锚定:

  1. 你的 Agent 是单轮问答还是多轮协作? 单轮问答(如 FAQ 机器人):只要 RAG,可能连短期记忆都不需要。多轮协作:短期记忆必上。
  2. 是否需要跨会话累积? 不需要(如一次性数据分析任务):只要短期+RAG。需要(如客服、销售助理):长期记忆必上。
  3. 是否涉及大量企业内部文档? 是:RAG 必上。否:可以暂缓。
  4. 用户量级? 小于 100 人:用框架方案省事。100-1000 人且合规要求一般:框架+少量自研。大于 1000 人或强合规:考虑自研。
  5. 是否涉及多租户隔离? 是:从第一天就把租户字段加到所有记忆表的主键里,别等数据飞了再补。
  6. 是否要绑定业务对象? 是(如绑定到客户、订单、项目):用结构化数据库做主存,向量库做副存。否:向量库为主即可。
  7. 遗忘机制是否设计过? 没设计:补上时间衰减+用户主动遗忘两条,剩下的可以慢慢加。

自检清单(任何一条 No 都不要上线):

  • 长期记忆有 created_at / last_accessed_at / source 字段吗?
  • 有用户侧的「查看我的记忆+删除」入口吗?
  • PII 字段有脱敏或加密吗?
  • 短期记忆有窗口管理策略吗(不是无限累加)?
  • RAG 和长期记忆是分开的存储吗?
  • 记忆的写入是异步还是同步?同步会不会拖垮主链路?
  • 多租户隔离做了吗?
  • 有压测过同时 500 人在线的延迟吗?

结语

我们这两年看过太多团队在记忆这一层栽跟头——有的因为没有长期记忆,Agent 永远停留在「演示效果」;有的因为长期记忆没有遗忘机制,三个月后变成一个 100GB 的向量库噩梦;还有的因为合规没想清楚,上线半年被合规部门叫停。记忆架构没有标准答案,但有相对清晰的取舍框架:结构化能解决的别用向量、公共知识和私人记忆分开存、能少召回就少召回、能让用户控制就让用户控制。 把这几条守住,你的 Agent 大概率能从「玩具」长成「同事」。如果你正在做企业级 Agent 项目,记忆这一层值得你投入比 prompt 工程多 3-5 倍的精力——这是我们走过弯路之后最朴素的体会。

常见问题

基于这个话题最常被问到的 4 个具体问题

Q1. 做 Agent 记忆,应该用 Mem0 这类开源框架,还是自研?

看团队规模与场景复杂度。3 人以下的 AI 团队、记忆场景以「用户偏好+对话历史」为主,直接用 Mem0、Letta(前 MemGPT)这类成熟方案可以省下 2-3 个月研发;如果你有强合规要求(数据必须留在内网、字段级权限)、或者记忆结构高度结构化(绑定业务实体、绑定工作流节点),自研更合适。开沿的经验是「框架打底+关键链路自研」:用框架做向量检索和基础 CRUD,自研记忆的写入策略、过期策略和与业务对象的绑定层。

Q2. AI Agent 的长期记忆数据,怎么做保留期清理?

建议分三档:会话级记忆 7-30 天自动归档,用户偏好类记忆设置 6-12 个月无活跃则降权或删除,业务事实类(如客户合同信息)跟随业务对象的生命周期。技术上至少要做三件事:每条记忆带 created_at/last_accessed_at/source 字段;提供用户侧的「查看我的记忆+删除」入口(《个人信息保护法》要求);后台跑定时清理任务,把过期记忆从向量库和明文库一起清掉,避免「数据库删了向量还在」的尴尬。

Q3. 长期记忆会不会拖慢 Agent 的响应速度?

会,但可控。主要瓶颈在三处:向量检索(一般 50-200ms)、记忆筛选与排序(看实现,劣质实现可能 300ms+)、把检索结果塞回 prompt 后的推理延迟(token 越多越慢)。优化思路是「分层召回+异步写入」:首轮只召回 3-5 条最相关记忆,必要时再二次扩召;记忆的写入走异步队列,不阻塞主回复链路。开沿实测下来,三层记忆架构对端到端延迟的额外开销可以压在 300-600ms 区间,对话场景基本无感。

Q4. RAG 知识库和长期记忆,边界到底在哪?

一个朴素的划分:RAG 装「企业的公共知识」(产品手册、SOP、政策文件、行业资料),长期记忆装「与某个用户/某个会话/某个业务对象绑定的私有上下文」。前者是「全员共用、版本化、可审计」的,后者是「个体化、动态变化、有遗忘曲线」的。技术上两者都可能用向量检索,但更新频率、权限模型、回收策略完全不同——把它们混在一张表里是常见的坑,后期想拆开会很痛。

开沿研发中心

开沿研发中心

开沿科技的方法论与技术团队,把一线交付中的经验沉淀成可复用的方法。了解研发中心 →

4
深耕企业数字化交付
800+ 单
累计项目交付
600+ 家
服务企业客户
钉钉认证
官方认证服务商
把方法用起来

想就你公司当前的状况,聊一下下一步从哪切

看完文章你应该能判断大方向。如果想就具体场景再细聊「第一步先做哪个 / 现有系统能不能复用 / 大概多长周期」,可以加我们顾问微信——30 分钟,免费方案诊断。

看客户案例