一、核心思想

记忆层要解决两件事:

  1. 当前对话内:关键事实不丢失。
  2. 跨会话:新会话能恢复用户偏好、背景和历史决策。

核心公式:记忆系统 = 短期记忆(Session级)+ 长期记忆(跨Session持久化)


下面是记忆系统的整体架构图:

用户交互

短期记忆
Session级

写入链路
语义提纯

长期记忆
跨Session持久化

检索链路
语义相似性

Markdown 轻量方案

向量库方案

二、记忆的分类与存储

1. 按存储形式分类

存储形式 说明 典型实现
Token级记忆 自然语言或结构化文本 向量库中的文本块、JSON
参数化记忆 编码进模型参数 预训练知识、LoRA适配器、SFT微调
潜在记忆 模型内部表示 KV Cache、激活值、Hidden States

下面是记忆生命周期的完整流程图:

原始交互

编码
LLM提取事实三元组

存储
向量库/图数据库

提取
向量检索+BM25

巩固
短期转长期

反思
提取Meta-Knowledge

遗忘
权重衰减+冲突标记

2. 按功能分类

功能类型 核心问题 存储内容 典型场景
事实记忆 智能体知道什么 用户偏好、环境状态、显式事实 记住用户的技术栈偏好
经验记忆 智能体如何改进 过往轨迹、成败教训、策略知识 从失败的代码审查中学习
工作记忆 智能体当前思考什么 当前推理上下文、任务进展 多步推理中的中间状态

3. 按内容性质细分

  • 情景记忆:记录特定时间、场景的具体事件(回答“发生了什么”)。
  • 语义记忆:从多个情景提炼的通用知识或规律(回答“意味着什么”)。
  • 程序记忆:存储技能、规则和习得行为(自动执行任务序列)。

下面是长期记忆的写入与检索双链路图:

检索链路

写入链路

对话结束

语义提纯
过滤噪声

抽取结构化事实

幂等Key写入
乐观锁/MVCC

新Session开始

Query向量化

语义相似性检索

Redis预热/异步精排

长期记忆库

三、记忆的生命周期

一条记忆从进入到淘汰,经历六个环节:

编码 → 存储 → 提取 → 巩固 → 反思 → 遗忘

操作 说明 工程实现
编码 将原始交互转为可存储信息 LLM提取事实三元组、生成摘要
存储 持久化编码后的信息 写入向量库/图数据库/参数
提取 根据上下文检索相关记忆 向量检索 + BM25 + 图遍历
巩固 短期记忆转长期记忆 异步任务:对话摘要 → 实体库
反思 主动回顾评估记忆内容 任务完成后提取Meta-Knowledge
遗忘 淘汰低价值或过时记忆 权重衰减 + 冲突标记废弃

四、短期记忆(Short-Term Memory)

  • 定义:当前单次会话中的暂存信息(用户提问、模型回复、工具调用结果)。
  • 载体:LLM的上下文窗口。
  • 管理难点:窗口再大也有限,且存在位置偏差(中间信息利用率低)。
  • 三种控制策略
    1. 上下文缩减:滑动窗口丢弃旧消息,或压缩为摘要。
    2. 上下文卸载:重型结果放外部存储,Prompt中只保留引用。
    3. 上下文隔离:多Agent间只传递精简指令,不广播完整历史。

五、长期记忆(Long-Term Memory)

  • 定义:活在Session之外的持久化知识库。
  • 核心机制写入(Record)检索(Retrieve) 两条链路。

写入链路

  • 时机:对话结束后,异步触发。
  • 过程:LLM对短期记忆做语义提纯(过滤噪声、抽取结构化事实)。
  • 工程要点
    • 写入操作需幂等Key(基于源消息ID+批次ID,非结果文本哈希)。
    • 多端并发时用乐观锁或MVCC处理冲突。

检索链路

  • 时机:新Session开始时。
  • 过程:将用户Query向量化,与记忆库做语义相似性检索。
  • 性能要点:首包路径上的向量检索P99延迟会直接影响TTFT,需用Redis预热或异步精排优化。

下面是记忆演化机制的完整流程图:

存在矛盾

无冲突

任务完成

自我反思
提取Meta-Knowledge

精细化反思闭环
真实性/交付物/数据保真

记忆聚类与合并
实体百科

冲突检测

标记旧记忆废弃

权重衰减
score = relevance × importance × decay(t)

Vacuum清理
维护HNSW图结构

六、长期记忆 vs RAG

维度 长期记忆 RAG
数据性质 个性化经验(用户偏好、习惯) 共享知识(公司规章、产品文档)
关联对象 与特定用户强绑定 与“谁在使用”无关
关系 非替代:RAG提供世界知识,长期记忆提供用户画像,可融合排序或相互增强

七、主流记忆技术产品对比

产品 核心思想 技术亮点 适用场景
Mem0 单次抽取+多信号融合检索 语义+BM25+实体链接并行打分 通用对话记忆
LETTA(原MemGPT) 操作系统虚拟内存分页 主上下文与外部上下文动态交换 长对话上下文管理
ZEP 时间感知知识图谱 情景/语义/社区三层子图;边失效机制 企业级多租户
A-MEM Zettelkasten知识管理 卡片笔记法,记忆间自动建立语义连接 知识密集型任务
MemOS 三种记忆类型动态转换 纯文本 ↔ KV Cache ↔ LoRA 全栈记忆管理
MIRIX 六模块分工协作 元记忆管理器路由不同存储结构 复杂决策支持

LETTA、ZEP、MemOS关键差异

  • LETTA:有损压缩(递归摘要会丢失细节)。
  • ZEP:可借鉴的边失效机制(新事实覆盖旧事实时标记失效,保留审计)。
  • MemOSLoRA写入后难删除,适合变化极慢的偏好;多租户需动态挂载/卸载adapter。

下面是 Agent 记忆三层对齐架构图:

第三层:工作层

第二层:经验层

第一层:事实层

知道什么事实
用户偏好/环境状态

从过往任务学到了什么
成败教训/策略知识

此刻正在处理什么
当前推理上下文

三层对齐

记忆不空转

八、记忆的演化机制(反思、聚类、遗忘)

1. 反思与合成

  • 自我反思:任务完成后提取Meta-Knowledge(如“用户更在意性能而非规范”)。
  • 精细化反思闭环:每个子任务后触发,进行真实性、交付物、数据保真性三重验证。
  • 记忆聚类与合并:自动合并碎片化重复记录,整理成“实体百科”。

2. 遗忘与清理

  • 权重衰减score = relevance × importance × decay(t),指数衰减过时记忆。
  • 冲突解决:新事实与旧事实矛盾时,标记旧记忆为废弃。
  • 注意:主流向量库的软删除可能破坏HNSW图结构,需定期执行Vacuum清理

九、检索效果优化

混合检索策略

  • RRF(倒数排名融合):几乎不用调参,适合冷启动。
  • 线性加权:需标注数据校准权重。
  • Cross-encoder Reranker:召回后统一精排,对长尾查询更友好。

元数据硬过滤

  • 目的:多租户场景下强制数据隔离(如按UserID过滤)。
  • 工程取舍:强过滤可能破坏HNSW图连通性,导致召回率下降;高活跃租户建议分配独立Collection做物理隔离。

优化优先级

检索链路优化的ROI通常高于写入链路。体感“记忆没用”时,十有八九是Recall跑偏,或精排未将真正相关内容顶上来。先查Trace,再考虑加写入预算。


十、Markdown作为轻量级记忆方案

适用场景

偏好、约定、踩坑记录等信息量可控、对可读性要求高的场景。

优势

  • 透明可审计:直接读写文件,无黑盒。
  • 持久化与版本控制:文件存磁盘,可提交Git。
  • 零迁移成本:无供应商锁定,复制即可。
  • 成本极低:免去向量数据库运维成本。

局限

海量非结构化文本检索时,人工组织的Markdown成为瓶颈,此时向量检索不可替代。


十一、Claude Code的CLAUDE.md机制

层级结构

层级 位置 作用范围 适用场景
组织级 /etc/claude-code/CLAUDE.md 所有用户 公司编码规范、安全策略
用户级 ~/.claude/CLAUDE.md 个人所有项目 代码风格偏好
项目级 ./CLAUDE.md./.claude/CLAUDE.md 团队共享 项目架构、编码标准
本地级 ./CLAUDE.local.md 个人当前项目 沙箱URL、测试数据偏好(加入.gitignore)

写作原则

  • 规则要具体可验证:“注意可读性” → “函数名动词开头,不超过40行”。
  • 禁令配替代方案:“不要做X,遇到这种情况做Y”。
  • 错误驱动添加:只有Claude确实犯了某个错误,且规则能防止再犯时,才写入。
  • 控制长度:每条CLAUDE.md建议200行以内,过长会稀释重点。

AGENTS.mdCLAUDE.md

  • AGENTS.md是跨工具开放标准(OpenAI Codex、Cursor等采用)。
  • 可通过@AGENTS.md导入,让两个工具复用同一份基础指令。

Auto Memory

  • Claude根据对话自动写入的笔记(偏好、习惯)。
  • 限制:仅加载前200行或25KB;20-30个会话后质量可能下降。
  • 禁用:环境变量 CLAUDE_CODE_DISABLE_AUTO_MEMORY=1

十二、总结与关键判断

  1. 短期与长期记忆物理隔离:一个活在当前任务,一个持久化存储。
  2. 遗忘比写入更重要:舍不得删会导致过时噪音充斥检索结果,体验极差。
  3. Markdown与向量库互补:偏好/约定用Markdown,海量文本检索用向量库。
  4. CLAUDE.md不是越多越好:每条规则应对应一次真实错误。
  5. 检索优化先于写入优化:先查Trace确认召回精度,再优化写入。
  6. 最终目标:让Agent知道什么事实,从过往任务学到了什么,此刻正在处理什么,三层对齐,记忆才不空转。
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐