很多 Agent Demo 在第一轮对话里表现很好,到了第二天却像换了一个人:用户偏好没了,项目约定没了,上次失败的路径又被重新走一遍。
这不是模型突然变笨了,而是系统没有把“经历”变成可以被下一次任务使用的状态。
Agent Memory 要解决的,正是这件事。
- Memory 不是聊天记录
LLM 的参数里有通用知识,但不会自动写入某个用户刚刚说过的话,也不会因为一次工具调用成功,就永久学会这条流程。没有应用层的持久化机制,下一次会话通常只能看到新的输入、系统提示和有限的上下文。
因此,有知识不等于有记忆。
知识是模型训练阶段获得的通用模式;记忆是某个用户、项目、任务、环境或 Agent 在运行中积累的状态,未来可以重新参与决策。
Agent 一旦开始长时间工作,问题会更明显。它的轨迹通常包含用户消息、计划、工具调用、工具返回、文件内容、失败重试和环境变化。若每一轮都把完整历史重新塞进提示词,成本、延迟和噪声都会上升。
更长的上下文也不是万能药。Lost in the Middle 的研究发现,相关信息出现在长上下文中间时,模型使用它的能力会明显下降;信息在开头或结尾时通常更容易被利用。[1] LangChain 的文档也提醒,过长的历史会让模型被过时或离题内容分散,即使没有超过上下文上限,也可能影响速度、成本和准确率。[2]
LongMemEval 则从长期交互角度测试了信息提取、跨会话推理、时间推理、知识更新和拒答五种能力。它说明,长期记忆不是“体验加分项”,而是长周期 Agent 能否稳定工作的基础能力。[3]
- 短期记忆和长期记忆
最简单的理解是:短期记忆服务当前任务,长期记忆服务未来任务。
短期记忆,也叫 thread-scoped memory,通常包括当前对话、任务目标、计划、已完成步骤、工具结果和临时变量。它应该让 Agent 在同一个线程里保持连续性。LangGraph 把这类内容放在 Agent state 中,并用 checkpointer 保存,使线程可以中断后恢复。[2]
长期记忆则跨越线程和会话。它可以是用户偏好、项目事实、历史事件、领域知识,也可以是可复用的做法和失败教训。LangGraph 把长期数据放在可自定义的 namespace/store 中;Mem0 则按 conversation、session、user、organization 等生命周期组织记忆。[2][4]
还有一条容易混淆的分类轴:语义记忆、情景记忆和程序记忆。
- 语义记忆是事实和关系,例如项目使用 PostgreSQL。
- 情景记忆是发生过的事件,例如某次升级因为版本冲突失败。
- 程序记忆是可复用的做法,例如修改 schema 后先跑契约测试。
所以,短期/长期说的是“保存多久、在哪些任务可见”;语义/情景/程序说的是“记住的内容是什么”。一个 Agent 可以同时拥有短期的工作记忆、长期的用户画像、历史事件和项目规则。
- 上下文压缩和记忆压缩
两者都叫 compression,但处理的东西不同。
上下文压缩:服务当前这一轮
上下文压缩处理的是即将发给模型的 prompt。常见操作包括删除已消费的工具输出、保留最近消息、把早期历史总结为任务状态、把长日志折叠成关键证据。
Google ADK 将 context compaction 定义为:在 Agent 运行中总结较早的 session history,包括指令、输入和模型回复,让上下文保持紧凑,以降低延迟和成本,同时保留必要信息。[5]
上下文压缩的标准是“下一步还能不能做对”。它通常不应该销毁原始历史。原始消息和工具轨迹应保存在持久层,必要时可以重新检索。
记忆压缩:服务长期存储
记忆压缩处理的是外部 memory store:合并重复记录、抽象稳定事实、降低低价值条目的权重、归档或删除过期内容,甚至改变记忆的表示形式。
它的标准是“长期知识库是否更小、更准、更容易召回”。这通常是有损操作,因此最好保留压缩后的记忆、来源指针、时间和置信度。只有摘要、没有证据的记忆,日后很难判断是否过时或被误解。
- 什么是记忆提炼
记忆提炼不是普通摘要,而是把原始经历重编码成未来可以直接使用的记忆单元。
例如,原始记录是:
“我不想要太多背景介绍。上次你把迁移脚本放在部署前运行,导致 staging 数据库锁住了;以后先在临时数据库跑一遍,再开发布窗口。”
这段话至少可以提炼成三类内容:
- 用户偏好:回答先给结论,少铺垫。
- 情景事件:某次迁移脚本在 staging 造成锁表。
- 程序规则:迁移脚本先在临时库验证,再进入发布窗口。
如果只总结成“用户重视数据库安全”,文字更短,却失去了下一次行动真正需要的细节。
一个可靠的提炼过程通常包括:判断是否值得记、拆成原子事实/事件/规则、标注来源和时间、确定作用域、与旧记忆去重或冲突检测,再写入对应的长期记忆层。
A-MEM 的研究采用了类似 Zettelkasten 的思路:新记忆形成带有上下文描述、关键词和标签的结构化 note,并和历史记忆建立关联;新信息还可能触发旧记忆表示的更新。[6]
工程上建议把“证据”和“结论”分开。记忆最好能回答:是谁说的、什么时候成立、适用于哪个用户/项目、是原话还是推断、最近一次验证是什么。
- 完整循环怎么跑起来
一个可用的闭环至少包含八步:
- 观察:接收输入、工具结果和环境变化,保存原始事件。
- 维护短期工作区:记录当前目标、约束、进度和最新状态。
- 压缩上下文:接近 token 阈值时删噪声、保状态、保关键证据。
- 记忆提炼:识别值得跨轮次或跨会话复用的事实、事件和做法。
- 合并更新:去重、处理冲突、写入时间和失效状态。
- 分层存储:profile、episodic、procedural、raw log 各自放在合适位置。
- 按任务召回:结合当前问题、实体、时间、权限做检索和重排。
- 行动并验证:Agent 根据记忆做事,结果和用户纠正成为下一轮证据。
可以把它写成一句话:
观察 → 短期工作 → 上下文压缩 → 记忆提炼 → 合并更新 → 分层存储 → 召回 → 行动 → 结果反馈。
这里最容易忽略的是最后一步。记忆不是写进去就结束了。新证据可能让旧规则失效,用户可能缩小记忆适用范围,工具结果也可能证明先前的推断是错的。没有验证和更新,长期记忆只会变成越来越自信的历史误差。
- 业界方案怎么区分
Letta / MemGPT:Agent 运行时
MemGPT 的起点是虚拟上下文管理:把有限上下文看成快速内存,把外部存储看成慢速内存。[7] 当前 Letta Agent SDK 把 Agent 记忆表示为 MemFS 中的版本化文件:system/ 下的记忆每轮进入系统提示,其他文件由 Agent 按需读取;dreaming 可以在后台复盘近期会话并更新记忆。[8]
它适合长期存在的个人助理、编码 Agent 和数字协作者。它最强的地方不是“某个向量库”,而是定义了一个有状态 Agent 如何管理自身上下文。代价是运行时和记忆编排的绑定更深,需要严格设计哪些内容允许常驻、哪些内容允许 Agent 修改。
Mem0:通用记忆层
Mem0 更像接入现有 Agent 的记忆基础设施:从消息中抽取内容,写入或更新记忆,再按当前查询检索。其文档提供 user、agent、app、run 等 scope,方便隔离、共享和清理;官方还描述了向量与图存储的组合方式。[4]
它适合客服、个性化助手和跨框架应用。论文报告了在特定评测配置下的准确率、延迟和 token 成本结果,但这些数字不能直接当作所有业务的保证。[9]
Graphiti / Zep:时间知识图谱
Graphiti 把记忆建模成随时间变化的 Context Graph:节点是实体,边是带时间元数据的事实,支持 episode 增量处理、事实失效和混合检索;Zep 是面向企业规模的托管产品。[10]
如果问题是“用户喜欢什么”,profile 或向量记忆通常够用;如果问题是“客户在某个时间使用哪个合同版本、谁批准过、后来何时变化”,图和时间轴会更自然。代价是实体消歧、图建模和运维更复杂。
LangGraph:可恢复工作流
LangGraph 的核心是 graph state、checkpointer 和跨线程 store。它适合中断恢复、人工审批、故障重试和时间旅行调试。[2] 它给开发者很强的控制力,但不会替你决定什么值得记、如何提炼和怎样解决冲突。
LlamaIndex:文档与 Workflow Memory
LlamaIndex 当前文档推荐 Memory,把短期 FIFO 消息队列与可选的长期 memory blocks 组合起来;旧的 ChatMemoryBuffer 已标记为 deprecated。Memory 可以设置 token limit、flush 比例,并使用 static、fact extraction、vector memory blocks。[11]
如果 Agent 的主要工作是文档、知识库和多工具 Workflow,它的抽象会比较顺手。
Semantic Kernel:Provider 组合
Semantic Kernel 提供 WhiteboardProvider,把需求、提案、决策和行动保存在白板中,以便对话截断后仍能保留关键状态;也支持 Mem0Provider 做跨线程长期记忆,二者可以组合。[12] 但官方文档仍明确标注 Agent Memory 功能为 experimental,所以适合已经在 Microsoft/.NET 生态中的团队,落地时要锁定版本并做回归测试。
托管记忆服务:Vertex AI Memory Bank 与 AgentCore Memory
Google ADK 把 Session、context compaction 和长期 MemoryService 分开。应用可以在会话结束或出现关键信息时把事件写入 Vertex AI Memory Bank,再在下一轮预加载或按需搜索;直接写入还可以启用 consolidation,合并相关记忆。[14]
Amazon Bedrock AgentCore Memory 则提供框架相对独立的托管 API,把短期事件与长期记忆分开,并内置用户偏好、语义事实、会话摘要和情景记忆等策略。[15] 这两类产品适合已经在对应云上运行 Agent、希望减少自建存储与治理工作的团队。代价是云服务绑定与持续费用,而且“托管”不等于不用评测写入和召回质量。
- 选型和治理建议
先别问哪个框架“最强”,先问要解决哪一层问题:
- 只要线程恢复:优先 checkpointer/持久化 state。
- 要跨会话个性化:接独立记忆层或结构化 profile。
- 要时间关系和多跳查询:考虑 temporal graph。
- 要复杂任务的中断、人审和恢复:优先工作流运行时。
- 要托管抽取、检索和治理:按云环境考虑 Vertex AI Memory Bank 或 AgentCore Memory。
- 要降低记忆构建成本:采用后台或触发式提炼,不要每轮都调用 LLM。
生产环境至少要做四件事:
- 作用域隔离:用户、Agent、组织、工单和临时会话不要共用无边界的记忆池。
- 来源与版本:保存原始证据、时间、置信度、有效期和推断标记。
- 安全治理:对 Prompt Injection、秘密、PII 和可执行指令做过滤、隔离、审计和删除。
- 闭环评测:测试写入、召回、更新、拒答和“召回后是否真的改变行动”,而不是只看向量相似度。
RecMem 的一个启发是:短暂交互先放入低成本的轻量存储,重复出现后再触发 LLM consolidation,并在其评测配置下显著减少记忆构建 token。[13] 记忆建设也需要成本控制和触发策略。
结语
上下文窗口解决“眼前能放多少”;短期记忆解决“当前任务别断片”;长期记忆解决“下次不用从零开始”;记忆提炼解决“经历如何变成可复用知识”;记忆压缩解决“长期知识如何保持小而准”;召回与验证解决“记住的东西能否在正确时机改变行动”。
所以,Agent Memory 的核心不是把系统做得更像人脑,而是建立一条可追溯、可更新、可评测的学习流水线:保留证据,提炼语义,按范围存储,按任务召回,用结果校正。
学AI大模型的正确顺序,千万不要搞错了
🤔2026年AI风口已来!各行各业的AI渗透肉眼可见,超多公司要么转型做AI相关产品,要么高薪挖AI技术人才,机遇直接摆在眼前!
有往AI方向发展,或者本身有后端编程基础的朋友,直接冲AI大模型应用开发转岗超合适!
就算暂时不打算转岗,了解大模型、RAG、Prompt、Agent这些热门概念,能上手做简单项目,也绝对是求职加分王🔋
📝给大家整理了超全最新的AI大模型应用开发学习清单和资料,手把手帮你快速入门!👇👇
学习路线:
✅大模型基础认知—大模型核心原理、发展历程、主流模型(GPT、文心一言等)特点解析
✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑
✅开发基础能力—Python进阶、API接口调用、大模型开发框架(LangChain等)实操
✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用
✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代
✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经
以上6大模块,看似清晰好上手,实则每个部分都有扎实的核心内容需要吃透!
我把大模型的学习全流程已经整理📚好了!抓住AI时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~