智能体的记忆系统生态:短期上下文与长期记忆的产品化

把一个智能体从"演示玩具"推向"日用工具",最先撞上的墙往往不是推理能力,而是记忆。用户昨天说过"我对花生过敏",今天问菜谱推荐,如果智能体一脸茫然,这个产品基本没有留存可言。上下文窗口再大,也是一次会话内的临时工作区,跨会话、跨设备、跨月的知识留存必须靠独立的记忆系统来承接。过去两年,记忆系统从一个论文话题长成了一个明确的基础设施赛道:Letta(MemGPT 团队商业化)、Mem0、Zep 这类记忆中间件先后融资,OpenAI 与 Anthropic 把记忆做成了平台原生能力,向量数据库厂商也纷纷把"给智能体当记忆后端"写进了产品叙事。
这篇文章从工程实践的角度观察这个生态:短期记忆怎么管理、长期记忆有几条技术路线、写入和遗忘怎么设计,以及一个团队在 2026 年今天要给自己的智能体配记忆时,到底应该怎么选。
短期记忆:上下文窗口内的精打细算
短期记忆就是上下文窗口本身。它看起来是"白送的"——模型标称 200K token,似乎随便塞——但真实工程里它是最紧张的资源。一个典型的智能体 system prompt 连同工具定义、few-shot 示例,轻松占掉 8K 到 15K token;带 20 个工具的 agent,仅 JSON Schema 就可能吃掉半个窗口。多轮工具调用之后,每次工具返回的原始输出(网页抓取动辄几万 token)持续累积,一个跑了十几轮的编码任务把 200K 窗口用光是常态而不是例外。
所以短期记忆管理的核心动作是"腾地方",业界通行手段有几类。第一类是历史压缩:当上下文占用接近阈值时,把更早的对话轮次摘要成一段简短的总结替换原文,Claude Code 的自动 compact 就是这个思路,社区实测它在窗口占用九成上下触发,把历史压成摘要后继续跑。第二类是工具结果裁剪:工具返回的原始内容只在当轮完整保留,隔几轮后替换为截断预览或"已读取文件 X"的占位符,Anthropic 在 2025 年推出的上下文编辑能力本质上就是把陈旧的工具结果自动清出窗口。第三类是结构化状态替代自由文本:与其让模型在几十轮对话里反复复述任务状态,不如维护一个结构化的任务清单(状态、待办、关键结论),每轮只注入当前版本。
这些手段都有代价。摘要压缩必然丢细节,丢掉的可能是某个关键约束条件——我们见过压缩之后智能体把"必须兼容 Python 3.9"这个要求忘掉,生成了用 3.11 语法写的代码。裁剪工具结果则可能让模型在后续轮次里失去判断依据。工程上的共识是:压缩是止损手段而不是免费午餐,能靠"少往上下文里塞东西"解决的问题(比如工具输出先在应用层过滤再返回),就不要依赖压缩兜底。
长期记忆的三条技术路线
跨会话的记忆没有一个统一答案,目前生态里明显的三条路线各有拥趸。
第一条是向量检索路线:把记忆条目切片、嵌入、存进向量库,检索时按语义相似度召回。Letta 的 archival memory、Mem0 的默认管道都是这个思路。它的优点是通用、实现简单、语义泛化好("花生过敏"能被"坚果类食物"的查询命中);缺点是"相似"不等于"有用",检索回来一堆相关但当前用不上的条目,反而污染上下文。Mem0 在其发布的 LOCOMO 长对话基准上报告了对 OpenAI Memory 等方案的两位数相对准确率提升,同时把记忆检索延迟压到百毫秒量级,这个数字向行业证明了独立记忆层相比"塞回上下文窗口"的可行性。
第二条是结构化画像路线:用 LLM 把对话中的稳定事实抽取成离散条目——"用户偏好简洁回复"、"常用语言是 TypeScript"、"所在时区 UTC+8"——以用户画像卡的形式存储。ChatGPT 的 Memory 产品走的就是这条路,用户可以在设置里逐条查看、编辑、删除。它的好处是可读、可控、可审计,天然满足合规要求;局限是粒度太粗,适合存"属性型知识",存不了过程性知识(比如"上上周讨论过的某个架构方案的细节")。
第三条是知识图谱路线:把记忆组织成实体、关系、事件的三元组,并给每条关系打上时间戳,支持时序推理。Zep 的开源图引擎 Graphiti 是代表,它能回答"用户上家公司直属上级是谁"这类需要关系链和时效判断的问题——向量检索对这种问题几乎无能为力。代价是构建复杂:实体消歧、关系冲突合并、图谱 schema 设计,工程量和维护成本都远高于前两条路线,适合对记忆精度要求极高的场景(销售 CRM、深度个人助理),不适合所有团队。
flowchart LR
S["会话进行中"] --> W["短期记忆<br/>上下文窗口"]
W -->|"接近阈值"| C["压缩 / 裁剪<br/>摘要替换历史"]
S --> WD["写入决策<br/>显著性判断"]
WD --> V["向量记忆<br/>语义条目"]
WD --> P["画像记忆<br/>结构化事实"]
WD --> G["图谱记忆<br/>实体关系时间线"]
V & P & G --> R["下次会话检索回填"]
R --> W
C -.->|"丢弃细节风险"| W
写入策略:什么时候记、记什么
决定"记什么"比决定"怎么存"更难,因为写入错误会被放大:一条错误记忆一旦进库,会在之后的每次会话里反复影响输出,污染成本远高于单次回答错误。当前生态里的写入策略大致分三档。
最粗暴的是全量写入:每轮对话都异步丢给嵌入模型入库。实现最简单,但库会被噪声迅速填满,检索质量随之劣化。大多数生产系统至少会加一层启发式过滤——只记用户主动陈述的事实和明确偏好,跳过寒暄与中间推理。更精细的是让 LLM 做显著性判断:用一个便宜模型对每轮对话打分,只有超过阈值的内容才触发抽取与写入,Mem0 的管道就内置了这一步(他们称为 phase 提取 + 更新决策)。第三档是定期巩固:会话结束后或低峰期跑一个后台任务,回顾整段对话提炼值得长期保留的知识——Letta 在 2025 年把它包装成 sleep-time compute 的概念,让智能体"睡觉时"整理记忆、压缩冗余、修正冲突,思路接近人脑的记忆巩固。
写入策略还有一条容易被忽视的工程底线:用户可控性。记忆系统必须提供查看、编辑、删除记忆的入口——这不仅是产品体验问题,在欧盟 GDPR 的适用范围内,用户有权要求删除个人数据,一个黑盒记忆库会让你在合规审计时无法交代。平台内置记忆(ChatGPT、Claude 的记忆功能)都把"可管理"做成了显式功能,自建系统的团队很容易漏掉这一课。
遗忘、冲突与衰减
记忆系统最反直觉的一课是:会遗忘的记忆才好用。人脑记忆天然衰减,大量细节被遗忘、要点被保留,这恰恰是一种压缩机制。机器记忆库只进不出,两年后会变成一个检索噪声巨大的垃圾场。可行的衰减设计包括:给记忆条目记录最后访问时间和访问频次,长期未命中的条目降权或归档;给某些类型的记忆设定 TTL,比如"用户这周的临时日程"一个月后自动失效;按类别分级,核心事实(过敏、身份)永不衰减,事件型记忆("用户提到下周要去东京")过期即清。
冲突处理是另一个深水区。用户说"我在北京",三个月后说"我搬去上海了",两条记忆同时存在时检索召回谁?朴素做法是信时间新的,但很多冲突不是简单覆盖关系——"用户不吃辣"和"用户上次点了麻辣火锅"并不矛盾(可能是陪朋友)。工程上比较稳妥的做法是:记忆条目带时间戳与置信度,检索时新旧都召回,把矛盾留给在场的 LLM 结合当前语境裁决,而不是在写入侧武断合并。Zep 的时序图谱用 valid_at / invalid_at 双时间戳来显式表达"某事实从何时起成立、从何时起失效",是目前这个问题上最系统化的方案。
产品化格局与选型建议
到 2026 年,记忆系统的供给格局分三层。平台内置层:OpenAI 与 Anthropic 都提供了官方记忆能力与记忆工具接口(Anthropic 的 memory tool 把记忆外置成模型可读写的文件目录),零工程成本但被平台的数据策略绑定。中间件层:Mem0(轻量、API 友好、多语言 SDK 齐全)、Letta(有状态的 agent server,记忆内建于运行时)、Zep(时序知识图谱)提供独立服务,适合需要跨模型、跨平台持久的团队。自建层:Postgres 加 pgvector、几百行代码起步,对很多场景其实够用——中小团队低估"两个嵌入查询就能解决八成需求"这一点,是选购中间件前最常犯的错误。
选型时建议回答四个问题:记忆规模到什么量级(万条以内自建毫无压力,亿级条目要考虑专用存储);是否需要跨用户共享记忆(团队协作场景会显著增加设计复杂度);隐私与合规约束是什么(数据必须私有化部署的话,SaaS 中间件直接出局);预算上能接受多少额外延迟与成本(每次会话前的记忆检索是实打实的 token 和毫秒开销)。场景匹配上,客服场景优先画像加事件流,编码助手优先代码库的语义索引而非用户记忆,个人助理则值得投资图谱与时序能力。
小结
智能体记忆系统已经从论文概念演进为分层清晰的基础设施生态:短期记忆靠上下文窗口内的压缩、裁剪与结构化管理腾挪空间;长期记忆分化为向量检索、结构化画像、时序知识图谱三条路线,分别对应通用性、可控性与推理深度的取舍。写入侧的显著性过滤与定期巩固决定记忆质量,遗忘与冲突机制决定记忆系统两三年后是否还可维护。对多数团队,务实的路径是先自建最小方案验证需求,规模与复杂度真正涨上来之后,再决定要不要引入专业中间件——记忆系统和其他基础设施一样,过早优化与缺席同样致命。
读者留言
COMMENTS 暂无还没有留言,来说第一句?