调研最近agent开发有哪些好的记忆处理机制或方案,单纯压缩记忆、保留N轮对话会丢失很多细节信息,影响用户体验
先说一个具体的失败场景,因为它比任何分类都说明问题。 假设一个客服 Agent 每天处理 50 轮对话,你做了两件事:滑动窗口保留最近 5 轮,每 20 轮用大模型把旧历史摘要一次。用户第一天明确说过一句「退款必须先走风控校验,不要直接退」。这句话信息量很低频但极重要。第一次摘要它可能还在,第二次摘要被压缩成「用户关注退款流程」,第三次就彻底没了。两周后 Agent 直接退了款,出错时你翻日志发现——原始记录还在数据库里,但早就没人再读它了。这就是所谓 summarization drift:每一轮压缩都在无声地丢掉低频高价值细节,而这类细节恰恰是用户体验的命门。 再补一层机制上的原因。上下文变长并不等于能记住更多:Anthropic 在文档里引用的 context rot 现象,以及更早的 lost in the middle 研究都指出,随着窗口内 token 变多,模型对单个信息的召回准确率反而下降,放在中段的内容最容易被忽略。所以「换个 1M 上下文的模型」只是把悬崖推迟了,没有消除它。 现在讲主流方案。2026 年 3 月那篇 arXiv 综述《Memory for Autonomous LLM Agents》把这块拆得比较清楚,它把 Agent 记忆定义成一个 write–manage–read 循环,然后从三个正交维度分类:时间尺度(工作记忆/情节记忆/语义记忆/程序性记忆)、存储载体(上下文内文本/向量索引/结构化存储/可执行库)、控制策略(启发式规则/模型自己通过工具调用决定/用 RL 学出来的策略)。机制家族有五类:上下文内压缩、检索增强存储、反思式自我改进、分层虚拟上下文、策略学习式管理。下面按落地程度挑几个讲。 一、Anthropic 官方那套三原语,是目前最容易直接用的。它明确把三个东西分开,因为它们解决的是三种不同的上下文增长: compaction 是整段 transcript 的压缩,把整段对话(含用户消息、助手推理、工具调用)蒸馏成高保真摘要后重新开始,默认在 150K token 触发,可以自定义 instructions 告诉它保留什么。它处理的是「对话本身太长」。 tool-result clearing 是子 transcript 级别的操作,只把旧的 tool_result 内容块替换成占位符,保留 tool_use 的记录,默认保留最近 3 次工具调用,其余可重新获取的结果清掉。它处理的是「工具返回把窗口撑爆」,比如读了一堆文件、拉了一堆 API 结果。关键区别是它不像压缩那样有损——需要数据再调一次工具就行。 memory tool 是让模型自己往外部文件系统写笔记,命令有 view/create/str_replace/insert/delete/rename,跨会话存活。它处理的是「知识要跨 session 延续」。Claude Code 在生产里就是同时用 compaction 加两套互补的 memory。 这三个的取舍很清楚:compaction 有损但覆盖全局;clearing 无损但只管工具结果;memory 保真但需要你自己设计存什么、什么时候写。大多数项目一开始就上压缩,结果把瓶颈搞错了——真正撑爆窗口的往往是工具结果。 二、Mem0。它的核心不是「存向量再检索」,而是写入时做冲突消解:新事实进来会和已有记忆比对,然后选 ADD / UPDATE / DELETE / NOOP 之一。用户从孟买搬到班加罗尔,它会删掉旧城市事实再加新的,而不是两条都留着。这个「矛盾处理」是很多自研方案缺的。论文数据是 LOCOMO 上 67.13%,p95 检索延迟 0.2 秒,每段对话约 1764 token,对比全上下文方案的 token。它的图版本 Mem0g 在时序推理上是 58.13% 对 OpenAI 的 21.71%,后者失分的原因是压根没给记忆打时间戳。 三、Zep / Graphiti。走的是时序知识图谱路线,每条记忆都带时间锚点,能回答「这个用户三个月前的目标是什么、现在变了没有」这类多跳和时序问题。代价是构图贵,Mem0 的论文测出 Zep 每段对话的记忆足迹超过 60 万 token,而且 ingestion 后立刻检索常常失败,要等后台图处理完才出结果。所以它适合离线或准实时场景,不适合强交互。 四、Letta(原 MemGPT)。把 LLM 当操作系统:主上下文是 RAM,recall store 是近期对话,archival store 是外部长期存储,模型自己通过函数调用决定什么时候换页。好处是记忆管理对模型透明、开发者能直接查看和编辑记忆块;代价是这套 paging 隐喻带来额外延迟和 agentic loop 开销,简单任务上反而不划算。 五、Hindsight,2026 年比较值得看的新架构。它把记忆分成四个独立网络:World(客观外部事实)、Experience(Agent 自己做过的事)、Opinion(带置信度的主观判断)、Entity(人物/公司/主题的画像)。核心洞察是把「证据」和「推断」分开——「用户叫 Priya」是事实,「我猜用户喜欢简短回答」是带置信度的信念,后者可以被质疑、更新、解释。LongMemEval 上它整体 91.4%,多会话问题从 21.1% 提到 79.7%,时序推理从 31.6% 到 79.7%,开源、带 MCP server。 六、Memvid,反基础设施路线。把数据、embedding、索引、元数据全塞进一个.mv2 文件,append-only 的时间线,类似视频编码的 Smart Frames,每条有内容哈希和时间戳。宣称 P50 检索 0.025ms。适合边缘、离线、单用户场景;缺点是没有并发写、没有 ACID、细粒度删除要重建整个文件。 另外还有 A-MEM 的 Zettelkasten 式互链笔记、MemoryBank 的遗忘曲线衰减、MemoryOS 和 MIRIX 的分层记忆(core / episodic / semantic / procedural 多模块),以及综述里提到的 Agentic Memory,直接把 store/retrieve/update/summarize/discard 当成 RL 动作去训练,用 step-wise GRPO,能学出「在上下文满之前主动摘要」这种非直觉策略。 落地时我会这么建议,按优先级: 第一,区分事实和信念。事实用结构化存储,信念带置信度且可撤销。这是 Hindsight 给的最大启示,也是最容易被忽略的。 第二,别只靠摘要。原始记录要全量保留在外部存储里,上下文里只放提炼和检索结果。摘要负责省 token,不负责保真。压缩永远是有损的,所以必须有一条能回捞原文的路径。 第三,写入路径要做过滤。低质量写入会污染后面几十步,包括去重、冲突检测、重要性打分。Mem0 的四操作就是个最小可用的写入策略。 第四,强制时间戳。这看起来是小事,但 OpenAI 在 LOCOMO 时序题上失分就是因为没打时间戳。任何记忆条目都带 created_at 和 last_verified_at。 第五,按需检索而不是全量注入。Agent 当前输入往往是很差的检索 query,需要 LLM 重写 query、多路召回融合,或者像 Self-RAG 那样先判断「这次到底要不要检索」。 最后提醒两点坑。一是 benchmark 不可比:Mem0 用 LOCOMO,Zep 和 Cortex 用 LongMemEval,各家在自己选的榜上都是冠军,厂商只报一个榜时值得问一句为什么。二是 LoCoMo 已经接近饱和,2026 年的 MemoryArena 显示多会话互相依赖的任务上,强模型能掉到 40% 到 60%,把活跃记忆 Agent 换成纯长上下文基线,任务完成率从 80% 以上掉到约 45%。换句话说,现在真正难的不是「记住」,而是跨会话的持续整合、矛盾处理和有依据的检索。 如果你想直接上手,我建议的路径是:先用 Anthropic 的 clearing 加 memory tool 把窗口问题解决掉(改动最小、见效最快),然后针对跨会话的用户画像引入结构化存储加时间戳,等矛盾处理真的成为痛点时再考虑 Mem0 或 Hindsight 这类专门的记忆层。别一开始就上最复杂的方案。