智能体记忆:短期与长期。
一个会话一结束就把一切忘光的智能体并没有坏——原始模型本来就是这样。记忆是另一套独立的机制,它把事实、决策与过往事件存在模型之外,并在需要时把相关的那些取回来,从而让智能体跨轮次、跨会话地记住东西。本条目将讲清此处"短期"与"长期"到底指什么、智能体会记住的四类东西、让记忆保持诚实的"写入—检索—更新"循环,以及为何记忆并不等于 RAG。
两种记忆:你此刻拥有的窗口,与比它更长久的存储。
短期记忆——也叫工作记忆或在上下文中的记忆——活在上下文窗口内部。它就是当前对话,加上智能体工作时写下的任何草稿:模型在这一轮真正能看到的一切。长期记忆活在模型外部,在一个外部存储里——数据库、文件、向量索引——并且只有当它与手头这一步相关时,才被有选择地检索回窗口。
之所以要这样切分,是因为单靠窗口无法充当持久记忆。它(1)大小有界,装不下智能体学过的一切;(2)会话之间被清空,明天的对话从空白开始;(3)按 token 计价昂贵,因为窗口里的每个 token 在每一轮都会被重新处理;(4)塞太满时会退化——这种效应被称作上下文腐烂(context rot)或迷失于中间(lost in the middle),即埋在长负载中段的材料实际上被忽略。持久记忆存在的意义,就是把智能体知道什么与当前能塞进提示的是什么解耦开。
一个诱人的误解是:更大的上下文窗口能让记忆变得多余。并不能。更大的窗口给你这一次会话更多空间,但会话一结束它照样重置,因此它带来的跨会话持久性为零——而且长上下文仍会退化,所以空间更多不等于回忆更可靠。窗口大小与记忆是两个独立的架构关注点;把其中一个做大并不能解决另一个。short-vs-long-term-memory 深入解析把这条界线画得很精确。
智能体会记住的四类东西。
借用认知科学的一套分类,把记忆的不同类型各自命名,而不是把"记忆"当成一个大桶,会很有帮助。每一类回答一个不同的问题:
- 工作记忆——此刻正在进行的任务上下文。智能体正在追的子目标、它刚打开的文件、两步前算出的值。这就是 STEP 1 里的短期记忆。
- 情节记忆(episodic)——对具体过往事件与交互的记录:发生了什么。"上周二用户让我订一张去柏林的机票,我订了。"它带时间戳、是具体的。
- 语义记忆(semantic)——事实、偏好与一般知识:什么是真的。"用户偏好靠走道的座位。""这家公司的财务系统跑在 SQL 上。"无关时间、可复用,不绑定某一次事件。
- 程序性记忆(procedural)——怎么做事:技能与套路,常常是智能体自己不断演进的指令。它报销时遵循的检查清单,每错一次就再打磨一次。这是智能体用来改进自身行为的记忆。
真实系统会把这些边界揉在一起,但这些标签是个好用的词汇表,方便你追问"这个智能体真正需要的是哪一类记住?"memory-types 深入解析把每一类映射到具体的存储选择。
这个循环:写入、检索、整合——并且有意地遗忘。
记忆系统不是一个被动的档案库;它持续运行三个核心操作:
- 写入/编码。决定什么值得存。你不能也不该什么都存——不加甄别地保存,只会在更大的容器里重演上下文腐烂。好的记忆对写入什么很挑剔。
- 检索。在恰当的时刻把相关记忆取回窗口——不是全部,只是与当前这一步有关的那几条。这是读取路径,通常长得像搜索。
- 整合/更新。随时间推移,合并重复、把长历史做摘要、当新事实覆盖旧事实时化解矛盾、丢掉过时的东西。遗忘是特性,不是缺陷:一个从不修剪的记忆,迟早会检索出过时且互相冲突的垃圾。
这些操作由一小组存储模式实现,通常混合使用:
- 向量存储——把每条记忆变成一个嵌入向量,靠相似度搜索来检索。智能体就是这样在没有精确关键词匹配的情况下,回忆起语义上相关的那条笔记。
- 滚动摘要/压紧——把一段长对话或工具调用日志收拢成一份紧凑的回顾,丢掉原始记录,在预算内保留要点(见 context-compaction)。
- 结构化存储——用键值表、SQL 或知识图谱来存事实以及事实之间的关系,适用于你需要精确查找与干净更新、而非模糊回忆之时。
大多数生产级记忆是混合式的:一个向量索引做模糊的语义回忆,一个结构化存储放硬事实,再用摘要把实时对话保持紧凑。memory-stores 深入解析把这些后端逐一正面对比。
记忆不是 RAG——以及它在智能体设计中如何落地。
因为两者都往窗口里取文本,初学者常把记忆与 RAG 混为一谈。这个区分值得完全弄准。RAG 从一个大体上静态的外部语料库——你加载进去的一批文档——检索内容,来帮忙回答一个问题。记忆是可读写、由智能体自己撰写的:智能体从自身经验中写入新记忆,并随时间更新它们。RAG 是一种检索技术;记忆是持续演进的持久状态,由智能体自己不断构建。两者的重叠——也正是它们被混淆的原因——在于记忆系统的读取路径常常采用 RAG 式的检索;这种共享的机制并不意味着目的相同。retrieval-augmented-memory 深入解析把两者相遇的确切位置梳理清楚。
实践中你很少从零把这一切都搭出来。有一批真实系统把这个循环打包好了:Mem0 提供带用户、会话与智能体作用域的托管记忆 API;Letta(前身是 2023 年的 MemGPT 研究项目)引入了一种受操作系统启发的分层设计,含核心(core)、召回(recall)与归档(archival)记忆;Zep——其开源引擎 Graphiti 是一个时序知识图谱,给事实打上有效期窗口——面向随时间变化的事实;LangMem 是 LangChain 的记忆 SDK;Cognee 则是一个基于图、本地优先的选项。它们的差异恰恰就在上面那些选择上:建模哪些记忆类型,以及如何处理写入与更新路径。
对构建智能体而言的要点是:把记忆当成一个刻意设计的架构层,按系统去决定,而不是靠把窗口做大来拨的开关。选好写入什么、检索什么、遗忘什么——然后在像你的任务上度量这些选择是否真有帮助。当你准备深入时,本 wiki 的 Memory & Context 深入解析组把这些想法带入生产级细节——从写入路径架构到评估记忆——并与上下文工程(在每一步策划窗口里放什么的学问)天然配套。