部分内容可能来自网络或者由AI生成。
如有雷同,纯属巧合,仅供学习参考之用。
一、为什么 Agent 需要记忆:无状态的困境
一句话结论:没有记忆的 Agent 是「失忆的孤岛」——每次会话从零开始、跨会话无法积累、多步任务中途断裂;记忆的价值不是锦上添花,而是 Agent 从「能聊天」走向「能干活」的地基。
问题的根源是上下文窗口的物理边界。LLM 的注意力复杂度让长程依赖难以维持,Agent「边读边记」时,固定长度的窗口会不断被覆盖,早期证据被压缩或丢弃 [公开2]。窗口从 2024 年的 200K 扩到 2025 年的 1M 确实有帮助,但并不能消除对记忆系统的需求:人与 Agent 的关系以周、月为单位发展,对话历史会超过任何窗口,且全量塞入还要让模型在一堆无关信息里做推理 。
没有持久记忆,Agent 会撞上三堵墙 :
个性化在会话间消失(这次告诉它偏好 Python,下次它一无所知)、
长程任务断裂(多天的调研/调试/评审无法续接)、
多系统上下文蒸发(跨 CRM、工单、可观测栈的调用各自冷启动)。
对应到记忆的正向价值:上下文连贯性(对话/行动一致)、个性化(记住用户偏好与画像)、持续学习与经验复用(把成功逻辑沉淀下来)。
这引出了记忆系统要回答的第一个设计问题:Agent 到底该记住什么、以什么形式记? 后续各章依次拆解。
小结:记忆是 Agent 的状态层。上下文窗口解决「当下这轮能看到什么」,记忆解决「跨轮、跨会话、跨系统还记得什么」,两者互补而非替代。
二、记忆的分类学:从认知科学到工程映射
一句话结论:几乎所有主流系统都借用了认知科学的记忆分类(工作/情景/语义/程序),并在工程上叠加了「显式 vs 隐式」「参数 vs 非参数」两条正交轴——理解这套分类,是看懂任何记忆系统的第一把钥匙。
2.1 认知科学的三个源头
记忆分类的理论根基有三:Atkinson-Shiffrin 多存储模型(1968,把记忆分为感知记忆、短期记忆、长期记忆)、Baddeley & Hitch 的工作记忆(1974),以及 Tulving 对长期记忆的进一步划分 [热1]。落到 Agent 上,业界形成了被反复引用的四类映射:
认知记忆类型 | Agent 中的对应 | 存储形态 | 典型例子 |
工作记忆 Working | 上下文窗口(Context Window) | 原始 token / 注意力 | 当前对话的活跃信息 |
情景记忆 Episodic | 对话历史 / 执行轨迹 | 时间索引的事件 | 某次具体会话、工具调用记录 |
语义记忆 Semantic | 用户偏好 / 领域规范 / 提炼后的事实 | 与时间无关的知识 | 「用户偏好 Python」 |
程序记忆 Procedural | 工具使用 / 执行模式 | Prompt / 策略 / 代码 | 固化下来的操作技能(Skill) |
这套四分法正是 CoALA(Cognitive Architectures for Language Agents)框架的核心:一个带模块化记忆组件、结构化动作空间和统一决策流程的 Agent,用 LLM 作中央执行器 [公开3][热2]。一个关键的动态规律是:情景记忆会随时间被巩固(consolidate)为语义记忆——一条脱离原始上下文仍然有用的事实,会从「某次对话」升格为「一条稳定知识」,原始情景则淡出 [公开2][热4]。
2.2 两条工程正交轴
在认知分类之外,工程上还有两条正交轴:
显式 vs 隐式:可声明式(显式,能用自然语言写出来的事实)vs 不可声明式(隐式,如肌肉记忆式的行为模式)。多数框架只覆盖长期显式记忆。
参数 vs 非参数:非参数记忆存在外挂存储(文本/向量/图),参数记忆则内化进模型权重。MemOS 论文进一步把记忆分为三态——纯文本记忆(Plaintext)、激活记忆(Activation,即 KV-Cache)、参数记忆(Parameter),并支持三者动态转换 [热1]。这是目前少见地同时覆盖了短/长期、显/隐式记忆的分类体系。
小结:记住一句话——「记忆区(工作/长期)× 存在形式(参数/非参数、激活/文本)× 内容类型(情景/语义/程序)」这三维框架,可以给几乎所有记忆系统定位。多数产品目前只做到「长期 + 非参数 + 语义/情景」这一格,参数化与激活态记忆仍是前沿。
三、记忆的生命周期:编码—存储—检索—更新—遗忘
一句话结论:记忆不是「存起来」这么简单,而是一条「读在推理前、写在行动后」的闭环流水线;其中存储和检索基本是工程问题,而更新、冲突解决和遗忘仍是开放难题。
记忆操作的经典划分是编码(Encode)、存储(Storage)、提取(Retrieval),再叠加巩固、再巩固、反思与遗忘 [热1]。在运行时,主流框架收敛到一个「read-before-reasoning, write-after-acting」循环 [公开2]:
1. 接收输入(用户 / 触发器 / 上游 Agent) 2. 记忆读取:载入工作记忆 + 查询长期存储 + 组装上下文窗口 3. 推理与规划:带记忆上下文调 LLM 4. 行动:工具调用 / API / 子 Agent 委派 5. 观察:收集结果与反馈 6. 记忆写入:更新工作记忆 + 抽取事实入长期库 + 可选地摘要旧上下文 7. 循环或终止这个循环写在纸上很简单,真正决定生产可用性的是「检索质量」和「写入纪律」两件事 [公开2]。mem0 把它进一步细化为「write-through 缓存」模式:用户消息先写会话缓冲(短期),查询长期索引注入相关上下文,生成回复后,由异步 worker 抽取有价值的事实(如「我叫 Sarah」)写入长期索引 [公开1]。这种「异步抽取」几乎是共识——会话上下文异步抽取 、OpenClaw 的预压缩落盘 [热5]、ReMe 的 summary_memory 异步持久化 [用户6],都是同一思路。
写入前要有「筛选纪律」,不能把每一句「hello」都存下来 [公开1]。用户文章给出了更严格的三道卡口:跨任务有效、代码/系统不能低成本恢复、有可验证依据 。
生命周期里最难的一环是遗忘。公开资料直言:存储和检索如今主要是工程问题,而「决定丢弃什么」仍是未解的研究课题;选择性遗忘做错了会伤害答案质量、抬高存储成本、把过时上下文泄漏进新会话 [公开2]。这与用户文章「真正危险的不是忘记,而是记错」的判断完全呼应 。
小结:把记忆当成一条流水线来运营,而不是一个数据库。读写循环、异步抽取、写入筛选是成熟做法;而主动遗忘、冲突解决目前没有银弹,需要显式的保留策略与治理规则兜底。
四、存储与检索:混合检索是默认解
一句话结论:向量语义检索 + BM25 全文检索的「混合检索」已是被多方基准验证的默认最优解;在此之上叠加时间衰减、MMR 去冗余、知识图谱增强,并正在向「LLM-as-Retriever / Agent-as-Retriever」演进。
4.1 为什么是混合检索
单纯向量检索擅长语义模糊匹配,但对精确关键词(人名、报错码、配置项)常常失手;BM25 全文检索则相反。公开评测给出了明确证据:在约 2.5 万条问答、四个数据集上,词项检索 + 稠密检索的组合优于任一单独方法;另一项跨八个对话数据集的研究也报告混合方法优于原始 RAG [公开2]。因此「一开始就上混合检索」比「事后再优化」更划算。
可交叉验证——分数融合公式几乎都是线性加权:
finalScore = vectorWeight × vectorScore + textWeight × textScore其中 OpenClaw 与 ReMe 都取vectorWeight=0.7 / textWeight=0.3(权重归一化为 1.0);ReMe 还设min_score=0.35过滤低质结果。AgentBase 则更进一步,提出查询类型自适应权重——按 6 类查询各配一套 FTS/Vector 权重(如偏好推断 0.3/0.7 偏向语义,助手回忆 0.7/0.3 偏向全文),这是业界尚未普及的差异化能力 。
4.2 时间衰减、MMR 与知识图谱
检索排序还要考虑时效与多样性。时间衰减普遍用指数半衰期,OpenClaw 的实现是decayedScore = score × e^(−λ×ageInDays),半衰期默认 30 天(今天 100%、7 天 84%、30 天 50%、90 天 12.5%),且「常青文件」(如 MEMORY.md)不衰减 ;AgentBase 用recency = exp(-0.693 × age_days / half_life),知识更新类半衰期 14 天、新鲜度 7 天 。MMR(最大边际相关)用来去冗余:score = λ×relevance − (1−λ)×max_similarity_to_selected,λ 默认 0.7 [热5]。
知识图谱是另一条增强路线。 Memory 用「复合知识图谱」(实体节点 + 文本块节点,建 contains 关系),检索四步为:向量匹配定种子节点 → LLM 三元组过滤 → PPR(Personalized PageRank)上下文感知检索 → 按 PageRank 得分 + rerank 排序 。Zep/Graphiti 则构建时间感知知识图谱,三层子图(情景/语义/社区),并用边失效机制处理矛盾事实 [热1]。GBrain 的图谱实测把 P@5 从纯混合检索的 17.7% 提到 49.1%(+31.4pp),R@5 达 97.9%(240 页语料)[热3]。
4.3 三种检索范式
用户文章 提炼出三种正在并存的检索范式,很有洞察力:
检索范式 | 代表系统 | 机制 | 特点 |
传统混合检索 | OpenClaw / ReMeLight | 向量 + BM25 分数融合 | 成熟、可控、低延迟 |
LLM-as-Retriever | Claude Code | 用 Sonnet 侧查询在索引里选最多 5 个文件 | 语义理解强、准确 |
Agent-as-Retriever | ReMe Vector | 先查后写、多类型并行检索 | 自主、灵活、贴合场景 |
小结:混合检索是安全默认,务必从第一天就做。图谱增强在「多跳推理、实体密集」场景收益显著,但有构建成本;检索的未来趋势是把「检索决策」交给 LLM/Agent 本身。
五、上下文压缩与记忆压缩:从四种方案到分层压缩
一句话结论:压缩分两层——「信息层」决定保留哪些历史(滑动窗口/摘要/重要性过滤/结构化抽取,沿时间/内容/表达三个正交维度),「计算层」用 Prompt Caching 避免重复计算;生产系统则把它们串成多级渐进式压缩流水线。
5.1 四种核心压缩方案
系统地把记忆压缩归为四种方案,并归入三个正交维度:
方案 | 维度 | 机制 | 信息保留 | 计算开销 |
滑动窗口 | 时间 | 只保留最近 N 轮,硬截断 | 低 | 极低 |
摘要压缩 | 时间 | 先 LLM 提炼再截断,可多级摘要 | 中 | 中 |
重要性过滤 | 内容 | 按价值打分筛选保留 | 高 | 中 |
结构化抽取 | 表达 | 换载体,抽成结构化 JSON | 极高 | 高 |
关键实现细节:
重要性打分按角色权重(user +0.2/assistant +0.1)、
高价值关键词(必须/关键/结论等各 +0.3)、
长度与是否问题指令等加权,上限 1.0 ;
摘要控制在 100 字内;
滑动窗口叠加时间衰减因子 0.95^Δt 。
这四种方案不是互斥优劣,而是互补——短对话用滑动窗口、长对话用摘要+重要性、强业务规则用结构化抽取,固定系统提示前缀交给 Prompt Caching(计算层,与信息层垂直互补。
5.2 生产系统的多级渐进式压缩
单一方案不够用,真实系统会把它们串成分级流水线。以 OpenClaw 为例(src/agents/compaction.ts):
上下文剪枝 Pruning(仅内存、不写盘、只处理 toolResult):TTL 5 分钟、保留最近 3 条助手消息、软修剪保留 head 1500 + tail 1500 字符、硬清除替换为占位符;触发阈值
softTrimRatio=0.3 / hardClearRatio=0.5,最小可裁剪工具输出 50,000 字符。上下文压缩 Compaction:旧消息经 LLM 总结成紧凑摘要并持久化 JSONL;自适应分块
BASE_CHUNK_RATIO=0.4;单条消息若超过上下文 50% 则无法安全压缩。工具结果守卫:单条工具结果最多占上下文 50%,总预算 75% headroom,超预算把最旧工具输出压成
[compacted: tool output removed]。窗口守卫:
CONTEXT_WINDOW_HARD_MIN_TOKENS=16000(阻断)、WARN_BELOW=32000(警告),默认contextTokens=200000、压缩targetTokens=0.7。
Claude Code 的压缩则是五层(Snip → Microcompact → Collapse → AutoCompact → 响应式 reactiveCompact),触发后按 9 部分结构化模板生成摘要,恢复预算约 50K+25K token;其断路器MAX_CONSECUTIVE_AUTOCOMPACT_FAILURES=3。ReMe 的 ReMeLight 用两阶段截断(recent_max_bytes=100KB→old_max_bytes=3KB),并在推理前用 Pre-Reasoning Hook 做四步:压工具输出 → Token 阈值检查 → 同步压缩摘要 → 异步持久化 。
一个共性的高级设计是「预压缩落盘」:OpenClaw 在tokenEstimate > contextWindow − reserveTokensFloor − softThresholdTokens时静默提示「Session nearing compaction. Store durable memories now.」,每压缩周期仅一次 [热5]。即压缩发生前,主动把重要信息从瞬时 Context 落到持久 Memory。
小结:压缩要分清「信息层」和「计算层」。信息层选方案看场景(时间/内容/表达三维),生产环境几乎都要多级渐进式压缩,且要在压缩前把关键信息落盘——这是「Context 瞬时、Memory 持久」协同的精髓。
六、业界系统横向对比
一句话结论:从 MemGPT 的 OS 分页范式,到 Mem0/Zep 的抽取与图记忆,再到 MemOS 的记忆张量、以及 OpenClaw/Claude Code 的「文件即真相」,主流系统在同一套认知分类下走出了不同工程路线——没有银弹,只有权衡。
下表综合多篇源码级分析,横向对比代表性系统(基准数字均标注来源与数据集):
系统 | 核心范式 | 存储/检索 | 关键基准 |
MemGPT / Letta | OS 虚拟内存分页:Main Context(系统指令+工作上下文+FIFO)vs External Context | 递归摘要 + 档案/回忆存储 | DMR 93.4% |
Mem0 / Mem0-g | 两阶段(提取→更新 ADD/UPDATE/DELETE),图版加实体三元组、冲突标记失效 | 向量 + 图记忆双检索 | LoCoMo 综合最佳;OSS ~26000 tok/query |
Zep / Graphiti | 时间感知知识图谱,三层子图(情景/语义/社区)、边失效 | 语义 + BM25 + 广度优先 | DMR 94.8%;LongMemEval +18.5% |
A-Mem | Zettelkasten 原子化记忆单元 + 动态链接 + 记忆演化 | 向量相似 + LLM 判断建链 | LoCoMo 优于 Letta/MemoryBank |
MemOS | 记忆张量三态(文本/激活/参数)动态转换,MemCube 抽象 | 多视角(标签/图谱/语义分层) | LoCoMo Overall 69.92(Single-hop 81.09) |
MIRIX | 6 记忆组件 + Multi-Agent + Meta Memory Manager 路由 | 分组件检索 | LoCoMo SOTA |
KBase Memory | 产品化记忆中枢,多层级(用户/会话/应用)+ 复合知识图谱 | 语义/关键词/时序融合 + PPR | 对标 Mem0/Zep/LangMem(LoCoMo/LongMemEval) |
AgentBase | Zero-LLM / SQLite-First,查询类型自适应权重 | FTS5 BM25 + 向量 + 时序图谱融合 | LongMemEval 74.8%(~3000 tok/query) |
OpenClaw | 文件即真相:三层(Context/中期 MD/长期 MEMORY.md) | 向量 0.7 + BM25 0.3 + MMR + 时间衰减 | 200K 触发压缩,半衰期 30 天 |
Claude Code | 纯文件系统无 DB,6 类记忆,LLM-as-Retriever | 三层检索(静态加载/Sonnet 侧查询/grep) | MEMORY.md ≤200 行/25KB,@include ≤5 层 |
ReMe(CoPaw) | 双系统 ReMeLight(文件)+ ReMe Vector(6 类记忆) | 向量 0.7 + BM25 0.3,先查后写 | 两阶段截断 100KB→3KB |
小结:选型不是「哪个最强」,而是「哪种范式匹配你的规模、Agent 类型和检索精度要求」。个人/小团队可从文件即真相(OpenClaw/Claude Code 式)起步,重时序推理选图谱路线(Zep),要极致离线可控看 AgentBase 的 Zero-LLM 路线,要覆盖参数化记忆则关注 MemOS。
七、五大可复用设计范式
一句话结论:抛开具体实现,主流系统沉淀出五条可迁移的设计范式——分层记忆架构、检索与注入解耦、先查后写、渐进式上下文压缩、工具输出全文持久化+渐进截断。
综合源码级对比 ,五大范式如下:
分层记忆架构:即时(Context Window)/ 会话(中期滚动文件)/ 持久(长期精选)三层几乎是标配。OpenClaw 的
MEMORY.md(长期常驻)+memory/YYYY-MM-DD.md(按天 append-only)是典型 [热5]。检索与注入解耦:检索层只负责「找候选」,不裁定「哪个是真相」—— 反复强调,检索命中不等于结论有效。
先查后写(AddDraftAndRetrieveSimilarMemory):写入前先检索相似记忆,用于去重与冲突发现。AgentBase 的两级去重(精确哈希 + FTS Jaccard≥0.92)是同一思路。
渐进式上下文压缩:如第五章所述的多级压缩流水线。
工具输出全文持久化 + 渐进截断:工具原始输出先全量落盘(如 ReMe 的
tool_result/<uuid>.txt),Context 里则渐进截断,兼顾「可回溯」与「省 token」。
演进方向上:LLM-Native 检索将成主流、从被动压缩转向主动规划、记忆结构化程度提高到图结构、单 Agent 转向多 Agent 共享、工具输出管理成为标配。
小结:这五条范式与具体系统无关,是可以直接迁移到自研 Agent 的资产。若只能记住一条,那就是「让检索与判断解耦」——这直接关系到下一章的核心问题。
八、从 Memory 到知识治理:记住了为什么还会做错
一句话结论:Agent 出错的根源常常不在「没记住」,而在「记错了/记乱了」——存储成功、检索命中、语义可执行、结论仍有效,是四件完全不同的事。Memory 解决「想起来」,知识治理解决「想起正确的东西」。
一个 Agent 明明写入了记忆却仍然做错,可能有四种原因:
作用域不可见、缺触发条件、被更高优先级流程覆盖、默认值已变但记忆无来源/时效 。据此,记忆与知识治理其实解决两个不同问题:
治理要点可归纳为几条 :
五类信息不要混(协作上下文/动态状态/变更历史/长期知识/私有记忆各有载体);
写入形态借用 Diátaxis 四分法(Tutorial/How-to/Reference/Explanation,面向 Agent 主要保留后三种);
新旧知识的对齐有重复/补充/替代/冲突/邻近五种关系;
可用性上要求「标题直接表达结论」「每份知识从入口三跳可达」。
最危险的反模式是 append-only 只增不删——知识只堆积不演进,可信度会随时间腐烂,而 Agent 读到过时知识时会「非常确定地做错。
这一层与 Karpathy 的 LLM Wiki 思路完全同频 。LLM Wiki 用「编译一次、持续更新」替代 RAG 的「每次现查、只存不整」:三层架构 raw(只读事实源)/ _wiki(LLM 编译产出)/ Schema(人机契约规则),三操作 Ingest/Query/Lint [热3][热4]。其工程化实现(Obsidian-Wiki、GBrain)叠加了 SHA-256 增量追踪、溯源标记(^[extracted]/^[inferred]/^[ambiguous])、可见性标签、置信度评分等 [热3]。
需要一个清醒的判断:现成的 Memory 产品(Mem0、Letta、agentmemory、OpenViking、Acontext 等)能存能召回,但知识治理不应退化成一个 memory engine——它必须保留「判断层」,规范知识的作用域、可见性、形态与演进,这不是向量库能替代的 。同时 LLM Wiki 与 RAG 是互补而非替代:海量文档高并发/合规溯源用 RAG,个人/中等规模/跨文档综合推理用 Wiki,海量+概念级理解则「RAG 底座 + Wiki 上层」[热3][热4]。
小结:如果只从本文拿走一个观点,那就是——先治理写入,再讨论检索。作用域、可见性、形态、对齐、演进这五件事没做好,再强的检索也救不了「记错」。
九、评测与开放问题
一句话结论:当前记忆技术在「记得住、能检索」上已较成熟,但在「更新、冲突解决、遗忘、洞察、进化」上仍处初级阶段;评测基准本身也存在明显局限。
尚未解决的:跨会话身份消歧、记忆过时检测与主动淘汰、大规模时序抽象与记忆分层、多模态记忆(Text+Vision+Audio+Spatial,如 M3-Agent)、在线自适应权重学习、以及「从记忆到认知」的演化。
特别值得关注两条前沿路线:
一是 参数化记忆 + 面向 Memory 的后训练(用梯度更新让模型真正「记住」,用 RL 提升压缩/洞察能力);
二是 强化学习驱动的记忆管理,代表作 Memory-R1——Memory Manager({ADD,UPDATE,DELETE,NOOP})+ Answer Agent 双智能体,用 PPO/GRPO 训练,仅需 152 个训练样本即收敛,在 LoCoMo/MSC/LongMemEval 达 SOTA 。
一个偏产品视角的提醒 :记忆不是越高保真越好——「被理解」与「被监视」只有一线之隔,恰当的遗忘和适度的记忆偏差甚至是特性;评测记忆应是认知科学/心理学的交叉学科,而非纯 IR 指标。
小结:不要迷信单一 benchmark 分数。精度-延迟-成本三角要一起看;更新/遗忘/进化是真正的深水区,短期靠工程规则兜底,长期看参数化记忆与 RL。
十、选型与落地建议
一句话结论:没有银弹,只有权衡;按规模、Agent 类型、检索精度沿六大权衡轴做取舍,并遵循「从简单起步、渐进演进」的路径。
用户文章提炼的六大权衡轴 :
检索精度 vs 延迟、透明性 vs 扩展性、自动化 vs 可控性、压缩率 vs 信息保留、通用性 vs 专业化、部署简单性 vs 功能丰富性。据此给出一份务实的落地清单:
从简单起步:小规模场景用「Git + Markdown + 全文检索(rg/BM25)+ 结论式标题」就够,不要一上来就上向量库和图谱 。
检索从第一天做混合:向量 + BM25 是被多方基准验证的默认解,别等到「优化阶段」再补。
分层记忆 + 预压缩落盘:即时/会话/持久三层,压缩发生前主动把关键信息落到长期记忆文件 。
写入要有纪律:三道卡口筛选(跨任务有效/不可低成本恢复/有可验证依据),异步抽取事实,别存每一句寒暄 。
治理优先于检索:规范作用域、可见性、形态(Diátaxis)、新旧对齐与演进;坚决反对 append-only 只增不删。
按需上图谱与参数化:多跳推理/实体密集场景用知识图谱(Zep/GBrain 式),对成本/离线敏感看 AgentBase 的 Zero-LLM 路线,关注 MemOS 的激活/参数记忆前沿.
评测要贴合场景:LoCoMo 只是参考,务必用自己的垂直数据、中文场景与精度-延迟-成本三角一起评估 [热2][公开2]。
小结:Agent 记忆的工程价值不在某个「最强框架」,而在把「分层存储 + 混合检索 + 渐进压缩 + 严格写入治理」这套组合按场景配好。记忆是基础设施,不是一个功能——把它当基础设施来设计与运营。
参考来源
公开资料
Mem0 Engineering,"Short-Term vs Long-Term Memory in AI"(短/长期记忆定义、write-through 抽取、评测指标)https://mem0.ai/blog/short-term-vs-long-term-memory-in-ai
Redis,"Long-Term Memory Architectures for AI Agents"(记忆类型、检索流水线、LOCOMO 精度-延迟-成本权衡、巩固与遗忘)https://redis.io/blog/long-term-memory-architectures-ai-agents/
Sumers, Yao, Narasimhan, Griffiths,"Cognitive Architectures for Language Agents (CoALA)",TMLR 2024 https://arxiv.org/abs/2309.02427