跳到主要内容

记忆操作生命周期

write / select / compress / isolate 四原语,以及写入判断、去重消解与遗忘的具体机制

核心要点

  • 记忆操作是构建/更新/查询三阶段
  • 四原语:write / select / compress / isolate
  • 写入要判断 ADD / UPDATE / DELETE / NOOP
  • 去重靠相似度阈值 + LLM 语义判断
  • 选择性遗忘仍是开放挑战

记忆操作的骨架是什么?

核心问题:不同记忆系统的读写流程能否用一套统一阶段描述?

任何记忆方案都可拆成构建 → 更新 → 查询三阶段[1]。survey 提出这套阶段划分,正是为了让形态各异的系统能在同一框架下比较。

  • 构建 (construction):从输入流中提取、过滤、规范化、打标签,形成可存储的记忆单元。
  • 更新 (update):写入后的维护——去重、压缩、矛盾消解、优先级评分、过期删除。
  • 查询 (query):检索——粗召回加精排的两阶段 retrieval(机制见 05-向量检索记忆)、门控决策、token 预算分配。

三阶段是描述层骨架,具体动作由下面的原语和判断逻辑承担。

write / select / compress / isolate 四原语怎么对应三阶段?

核心问题:工程上实际执行的操作有哪些,各自解决什么?

LangChain 把上下文操作收敛为四个原语[2],它们是三阶段在工程上的落地动作。

原语定义对应阶段
write把信息存到上下文窗口之外构建
select按需把信息拉回工作上下文查询
compress只保留完成任务所需的 token更新 / 查询
isolate跨 subagent 或 sandbox 分隔上下文架构级,贯穿全程

@tbl-agent-memory-four-primitives 记忆操作四原语定义:write、select、compress、isolate 各自的作用与对应生命周期阶段

图 3.2: 记忆操作生命周期:构建—更新—查询三阶段管道与四原语的施加位置,isolate 作为架构级边界贯穿全程

四原语里 compress 最易被低估:LangChain 指出工具输出过大时可触发卸载、上下文利用率接近上限时触发截断,以可观比例压缩历史[2]。压缩在记忆系统里的具体形态是上下文压缩(compaction),工程细节见 03-compaction-与上下文压缩isolate 则是多 agent 架构的记忆边界,把它单列说明记忆不只是存取,还包括"谁能看到哪段"。

为什么 update 不是简单 append?

核心问题:记忆写入后直接追加到列表末尾不行吗?

简单追加会让记忆库迅速退化为充满重复和矛盾的垃圾堆。survey 明确指出更新算子要"摘要、去重、评分优先级、消解矛盾,并在适当时删除"[3],这五个动作缺一个都会埋下隐患。

  • 不去重 → 同一事实反复写入,检索时挤占 token 预算。
  • 不消解矛盾 → "用户喜欢深色主题"与"用户改用浅色"并存,召回时模型无所适从。
  • 不评分优先级 → 无法在容量受限时决定淘汰谁。

下一节看生产系统(Mem0)怎么把这些动作落地成一套写入判断流程。

写入时怎么判断 ADD / UPDATE / DELETE / NOOP?

核心问题:一条新事实进来,系统怎么决定是新增、改旧、删旧还是忽略?

Mem0 用"抽取 + 检索相似记忆 + LLM 判四操作"的流程决定每条新事实的去向[4]。这是把"update 非 append"落成可执行逻辑的代表。

流程分三步:

  • 抽取:从最近约 10 条消息 + 当前对话对里抽取原子事实(一句话陈述),配一份异步刷新的对话摘要作上下文。
  • 取相似:对每条候选事实,语义检索 top-10 已有相似记忆。
  • 判操作:LLM 通过 function-calling 在四种里选一种。
操作触发条件
ADD无语义相似的已有记忆
UPDATE补充/丰富已有记忆
DELETE与已有记忆矛盾
NOOP已存在或不相关

@tbl-agent-memory-write-operations Mem0 写入判断四种操作:ADD、UPDATE、DELETE、NOOP 的触发条件

例子:已有"用户住北京",新事实"用户搬到上海"——LLM 判 DELETE 旧 + ADD 新(或 UPDATE),而非两条并存。 对比:OpenAI Memory 不存时间戳,时序类问题得分仅 21.71,而带矛盾消解的 Mem0 达 55.51——矛盾消解直接决定时序推理能力[4]

可借鉴的判断:写入是一次决策而非一次追加——每条新记忆都要先问"它和已有记忆什么关系"。

怎么去重和消解矛盾?

核心问题:判 UPDATE/DELETE 之前,怎么知道两条记忆"是一回事"或"冲突"?

双层去重:先用相似度/哈希粗筛,再用 LLM 语义精判[4]。单靠相似度会误判,单靠 LLM 太贵,两层互补。Mem0 在不同模块用不同粗筛机制:

  • 基础向量记忆:用 MD5 哈希做精确去重(只滤完全相同的文本),不做相似度阈值粗筛——召回交给检索 + LLM 判 ADD/UPDATE/DELETE[5]
  • 图记忆模块 (graph_memory.py):实体合并默认阈值 余弦相似度 0.7 (graph_store.threshold,可配置),超阈值的实体进入 LLM 精判[5]。注意 Mem0 论文本身不披露这个数值,它来自源码与官方 wiki。

阈值调节没有公开消融实验,Mem0 官方 wiki 给出工程经验分层[5]:

阈值区间行为风险
0.9–1.0近乎相同才合并漏检矛盾,重复堆积
0.7–0.9 (默认)平衡合并默认权衡点
0.5–0.7宽松合并误合并不相关记忆
< 0.5不推荐错误合并率高

@tbl-agent-memory-dedup-thresholds 记忆去重相似度阈值分层:Mem0 图记忆模块默认 0.7 各区间行为与合并风险

跨系统对比可看出阈值的场景敏感性:Neo4j Agent Memory 实体合并用 0.92–0.98(自动合并)和 0.75–0.90 (标记待审)[6],比 Mem0 的 0.7 显著保守,因为图数据库实体合并不可逆。结论:同样叫"相似度去重",图实体合并阈值(高,0.85–0.98)、记忆条目合并阈值(中,0.7 量级)、检索过滤阈值(低,0.1–0.5)分属三种场景,不可混用。

矛盾消解有两种风格:硬删除(直接删旧 + 时间戳优先)或软失效(标记 invalid 但保留历史,支持"他 2023 年住哪"这类时序查询)。可借鉴的判断:需要时序追溯就软失效,只要当前正确就硬删除

agent 怎么遗忘?

核心问题:记忆只增不减会怎样,主流系统如何遗忘?

遗忘是当前记忆系统最薄弱的环节,主流做法仍很粗糙[3]。多数系统只有三种处理:基于时间的到期删除、容量触发的淘汰(类 LRU)、或干脆不遗忘。

更精细的方案是 MemoryBank 引入的 Ebbinghaus 遗忘曲线[7]:记忆强度随时间衰减,但被频繁访问、高重要性的记忆得到强化,被忽视的逐渐淡出。这是一种频率与重要性加权的衰减,比硬性到期更贴近"有用的记忆留下"的直觉。

即便如此,选择性遗忘(精细控制哪些记忆该被忘掉)仍被列为开放挑战[3]。这一缺口也是记忆安全的隐患:被污染的记忆若不能被定向清除,会跨会话持续生效(详见 08-记忆安全)。

Takeaway

知识点核心结论
三阶段骨架构建 → 更新 → 查询,统一描述任意记忆系统
四原语write / select / compress / isolate,三阶段的工程落地
写入判断Mem0 抽取事实 + 取相似 + LLM 判 ADD/UPDATE/DELETE/NOOP
去重消解向量层 MD5 / 图层 0.7 余弦粗筛 + LLM 精判;硬删除 vs 软失效
阈值场景敏感图实体 0.85-0.98(保守不可逆) / 记忆条目 0.7 量级 / 检索过滤 0.1-0.5,不可混用
矛盾消解价值决定时序推理能力(OpenAI 21.71 vs Mem0 55.51)
遗忘薄弱主流靠到期/容量淘汰;Ebbinghaus 较精细;选择性遗忘未解

参考资料

  1. Tang et al. LLM Agent Memory: A Survey from a Unified Representation-Management Perspective. Preprints.org 202603.0359, 2026. https://www.preprints.org/manuscript/202603.0359
  2. LangChain. Context Engineering for Agents. 2025. https://langchain-blog.ghost.io/context-engineering-for-agents/
  3. Memory for Autonomous LLM Agents: Mechanisms, Evaluation, and Emerging Frontiers. arXiv:2603.07670, 2026. https://arxiv.org/html/2603.07670v1
  4. Chhikara et al. Mem0: Building Production-Ready AI Agents with Scalable Long-Term Memory. arXiv:2504.19413, 2025. https://arxiv.org/abs/2504.19413
  5. DeepWiki. mem0ai/mem0 — Similarity Thresholds (graph_memory.py 默认 0.7,经验分层). https://deepwiki.com/mem0ai/mem0/4.5-similarity-thresholds
  6. Neo4j Agent Memory Docs. Entity Resolution Thresholds. 自动合并 0.92-0.98,标记待审 0.75-0.90. https://neo4j.com/docs/
  7. Zhong et al. MemoryBank: Enhancing Large Language Models with Long-Term Memory. AAAI 2024 / arXiv:2305.10250. https://arxiv.org/abs/2305.10250

延伸阅读