AI Agent 记忆系统

一、核心思想

记忆层要解决两件事:

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

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


下面是记忆系统的整体架构图:
#mermaid-svg-pN24trWWPuTWbvtq{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-pN24trWWPuTWbvtq .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-pN24trWWPuTWbvtq .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-pN24trWWPuTWbvtq .error-icon{fill:#552222;}#mermaid-svg-pN24trWWPuTWbvtq .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-pN24trWWPuTWbvtq .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-pN24trWWPuTWbvtq .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-pN24trWWPuTWbvtq .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-pN24trWWPuTWbvtq .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-pN24trWWPuTWbvtq .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-pN24trWWPuTWbvtq .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-pN24trWWPuTWbvtq .marker{fill:#333333;stroke:#333333;}#mermaid-svg-pN24trWWPuTWbvtq .marker.cross{stroke:#333333;}#mermaid-svg-pN24trWWPuTWbvtq svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-pN24trWWPuTWbvtq p{margin:0;}#mermaid-svg-pN24trWWPuTWbvtq .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-pN24trWWPuTWbvtq .cluster-label text{fill:#333;}#mermaid-svg-pN24trWWPuTWbvtq .cluster-label span{color:#333;}#mermaid-svg-pN24trWWPuTWbvtq .cluster-label span p{background-color:transparent;}#mermaid-svg-pN24trWWPuTWbvtq .label text,#mermaid-svg-pN24trWWPuTWbvtq span{fill:#333;color:#333;}#mermaid-svg-pN24trWWPuTWbvtq .node rect,#mermaid-svg-pN24trWWPuTWbvtq .node circle,#mermaid-svg-pN24trWWPuTWbvtq .node ellipse,#mermaid-svg-pN24trWWPuTWbvtq .node polygon,#mermaid-svg-pN24trWWPuTWbvtq .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-pN24trWWPuTWbvtq .rough-node .label text,#mermaid-svg-pN24trWWPuTWbvtq .node .label text,#mermaid-svg-pN24trWWPuTWbvtq .image-shape .label,#mermaid-svg-pN24trWWPuTWbvtq .icon-shape .label{text-anchor:middle;}#mermaid-svg-pN24trWWPuTWbvtq .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-pN24trWWPuTWbvtq .rough-node .label,#mermaid-svg-pN24trWWPuTWbvtq .node .label,#mermaid-svg-pN24trWWPuTWbvtq .image-shape .label,#mermaid-svg-pN24trWWPuTWbvtq .icon-shape .label{text-align:center;}#mermaid-svg-pN24trWWPuTWbvtq .node.clickable{cursor:pointer;}#mermaid-svg-pN24trWWPuTWbvtq .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-pN24trWWPuTWbvtq .arrowheadPath{fill:#333333;}#mermaid-svg-pN24trWWPuTWbvtq .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-pN24trWWPuTWbvtq .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-pN24trWWPuTWbvtq .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-pN24trWWPuTWbvtq .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-pN24trWWPuTWbvtq .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-pN24trWWPuTWbvtq .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-pN24trWWPuTWbvtq .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-pN24trWWPuTWbvtq .cluster text{fill:#333;}#mermaid-svg-pN24trWWPuTWbvtq .cluster span{color:#333;}#mermaid-svg-pN24trWWPuTWbvtq div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-pN24trWWPuTWbvtq .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-pN24trWWPuTWbvtq rect.text{fill:none;stroke-width:0;}#mermaid-svg-pN24trWWPuTWbvtq .icon-shape,#mermaid-svg-pN24trWWPuTWbvtq .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-pN24trWWPuTWbvtq .icon-shape p,#mermaid-svg-pN24trWWPuTWbvtq .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-pN24trWWPuTWbvtq .icon-shape .label rect,#mermaid-svg-pN24trWWPuTWbvtq .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-pN24trWWPuTWbvtq .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-pN24trWWPuTWbvtq .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-pN24trWWPuTWbvtq :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 用户交互
短期记忆

Session级
写入链路

语义提纯
长期记忆

跨Session持久化
检索链路

语义相似性
Markdown 轻量方案
向量库方案

二、记忆的分类与存储

1. 按存储形式分类

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

下面是记忆生命周期的完整流程图:
#mermaid-svg-7kTsTEs9yXAz5LyZ{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-7kTsTEs9yXAz5LyZ .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-7kTsTEs9yXAz5LyZ .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-7kTsTEs9yXAz5LyZ .error-icon{fill:#552222;}#mermaid-svg-7kTsTEs9yXAz5LyZ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-7kTsTEs9yXAz5LyZ .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-7kTsTEs9yXAz5LyZ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-7kTsTEs9yXAz5LyZ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-7kTsTEs9yXAz5LyZ .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-7kTsTEs9yXAz5LyZ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-7kTsTEs9yXAz5LyZ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-7kTsTEs9yXAz5LyZ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-7kTsTEs9yXAz5LyZ .marker.cross{stroke:#333333;}#mermaid-svg-7kTsTEs9yXAz5LyZ svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-7kTsTEs9yXAz5LyZ p{margin:0;}#mermaid-svg-7kTsTEs9yXAz5LyZ .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-7kTsTEs9yXAz5LyZ .cluster-label text{fill:#333;}#mermaid-svg-7kTsTEs9yXAz5LyZ .cluster-label span{color:#333;}#mermaid-svg-7kTsTEs9yXAz5LyZ .cluster-label span p{background-color:transparent;}#mermaid-svg-7kTsTEs9yXAz5LyZ .label text,#mermaid-svg-7kTsTEs9yXAz5LyZ span{fill:#333;color:#333;}#mermaid-svg-7kTsTEs9yXAz5LyZ .node rect,#mermaid-svg-7kTsTEs9yXAz5LyZ .node circle,#mermaid-svg-7kTsTEs9yXAz5LyZ .node ellipse,#mermaid-svg-7kTsTEs9yXAz5LyZ .node polygon,#mermaid-svg-7kTsTEs9yXAz5LyZ .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-7kTsTEs9yXAz5LyZ .rough-node .label text,#mermaid-svg-7kTsTEs9yXAz5LyZ .node .label text,#mermaid-svg-7kTsTEs9yXAz5LyZ .image-shape .label,#mermaid-svg-7kTsTEs9yXAz5LyZ .icon-shape .label{text-anchor:middle;}#mermaid-svg-7kTsTEs9yXAz5LyZ .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-7kTsTEs9yXAz5LyZ .rough-node .label,#mermaid-svg-7kTsTEs9yXAz5LyZ .node .label,#mermaid-svg-7kTsTEs9yXAz5LyZ .image-shape .label,#mermaid-svg-7kTsTEs9yXAz5LyZ .icon-shape .label{text-align:center;}#mermaid-svg-7kTsTEs9yXAz5LyZ .node.clickable{cursor:pointer;}#mermaid-svg-7kTsTEs9yXAz5LyZ .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-7kTsTEs9yXAz5LyZ .arrowheadPath{fill:#333333;}#mermaid-svg-7kTsTEs9yXAz5LyZ .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-7kTsTEs9yXAz5LyZ .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-7kTsTEs9yXAz5LyZ .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-7kTsTEs9yXAz5LyZ .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-7kTsTEs9yXAz5LyZ .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-7kTsTEs9yXAz5LyZ .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-7kTsTEs9yXAz5LyZ .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-7kTsTEs9yXAz5LyZ .cluster text{fill:#333;}#mermaid-svg-7kTsTEs9yXAz5LyZ .cluster span{color:#333;}#mermaid-svg-7kTsTEs9yXAz5LyZ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-7kTsTEs9yXAz5LyZ .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-7kTsTEs9yXAz5LyZ rect.text{fill:none;stroke-width:0;}#mermaid-svg-7kTsTEs9yXAz5LyZ .icon-shape,#mermaid-svg-7kTsTEs9yXAz5LyZ .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-7kTsTEs9yXAz5LyZ .icon-shape p,#mermaid-svg-7kTsTEs9yXAz5LyZ .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-7kTsTEs9yXAz5LyZ .icon-shape .label rect,#mermaid-svg-7kTsTEs9yXAz5LyZ .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-7kTsTEs9yXAz5LyZ .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-7kTsTEs9yXAz5LyZ .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-7kTsTEs9yXAz5LyZ :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 原始交互
编码

LLM提取事实三元组
存储

向量库/图数据库
提取

向量检索+BM25
巩固

短期转长期
反思

提取Meta-Knowledge
遗忘

权重衰减+冲突标记

2. 按功能分类

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

3. 按内容性质细分

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

下面是长期记忆的写入与检索双链路图:
#mermaid-svg-hPVZpu714ZVDXT1t{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-hPVZpu714ZVDXT1t .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-hPVZpu714ZVDXT1t .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-hPVZpu714ZVDXT1t .error-icon{fill:#552222;}#mermaid-svg-hPVZpu714ZVDXT1t .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-hPVZpu714ZVDXT1t .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-hPVZpu714ZVDXT1t .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-hPVZpu714ZVDXT1t .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-hPVZpu714ZVDXT1t .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-hPVZpu714ZVDXT1t .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-hPVZpu714ZVDXT1t .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-hPVZpu714ZVDXT1t .marker{fill:#333333;stroke:#333333;}#mermaid-svg-hPVZpu714ZVDXT1t .marker.cross{stroke:#333333;}#mermaid-svg-hPVZpu714ZVDXT1t svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-hPVZpu714ZVDXT1t p{margin:0;}#mermaid-svg-hPVZpu714ZVDXT1t .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-hPVZpu714ZVDXT1t .cluster-label text{fill:#333;}#mermaid-svg-hPVZpu714ZVDXT1t .cluster-label span{color:#333;}#mermaid-svg-hPVZpu714ZVDXT1t .cluster-label span p{background-color:transparent;}#mermaid-svg-hPVZpu714ZVDXT1t .label text,#mermaid-svg-hPVZpu714ZVDXT1t span{fill:#333;color:#333;}#mermaid-svg-hPVZpu714ZVDXT1t .node rect,#mermaid-svg-hPVZpu714ZVDXT1t .node circle,#mermaid-svg-hPVZpu714ZVDXT1t .node ellipse,#mermaid-svg-hPVZpu714ZVDXT1t .node polygon,#mermaid-svg-hPVZpu714ZVDXT1t .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-hPVZpu714ZVDXT1t .rough-node .label text,#mermaid-svg-hPVZpu714ZVDXT1t .node .label text,#mermaid-svg-hPVZpu714ZVDXT1t .image-shape .label,#mermaid-svg-hPVZpu714ZVDXT1t .icon-shape .label{text-anchor:middle;}#mermaid-svg-hPVZpu714ZVDXT1t .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-hPVZpu714ZVDXT1t .rough-node .label,#mermaid-svg-hPVZpu714ZVDXT1t .node .label,#mermaid-svg-hPVZpu714ZVDXT1t .image-shape .label,#mermaid-svg-hPVZpu714ZVDXT1t .icon-shape .label{text-align:center;}#mermaid-svg-hPVZpu714ZVDXT1t .node.clickable{cursor:pointer;}#mermaid-svg-hPVZpu714ZVDXT1t .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-hPVZpu714ZVDXT1t .arrowheadPath{fill:#333333;}#mermaid-svg-hPVZpu714ZVDXT1t .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-hPVZpu714ZVDXT1t .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-hPVZpu714ZVDXT1t .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-hPVZpu714ZVDXT1t .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-hPVZpu714ZVDXT1t .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-hPVZpu714ZVDXT1t .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-hPVZpu714ZVDXT1t .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-hPVZpu714ZVDXT1t .cluster text{fill:#333;}#mermaid-svg-hPVZpu714ZVDXT1t .cluster span{color:#333;}#mermaid-svg-hPVZpu714ZVDXT1t div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-hPVZpu714ZVDXT1t .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-hPVZpu714ZVDXT1t rect.text{fill:none;stroke-width:0;}#mermaid-svg-hPVZpu714ZVDXT1t .icon-shape,#mermaid-svg-hPVZpu714ZVDXT1t .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-hPVZpu714ZVDXT1t .icon-shape p,#mermaid-svg-hPVZpu714ZVDXT1t .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-hPVZpu714ZVDXT1t .icon-shape .label rect,#mermaid-svg-hPVZpu714ZVDXT1t .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-hPVZpu714ZVDXT1t .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-hPVZpu714ZVDXT1t .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-hPVZpu714ZVDXT1t :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 检索链路
写入链路
对话结束
语义提纯

过滤噪声
抽取结构化事实
幂等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预热或异步精排优化。

下面是记忆演化机制的完整流程图:
#mermaid-svg-NkRNrlyK4HfyiwQB{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-NkRNrlyK4HfyiwQB .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-NkRNrlyK4HfyiwQB .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-NkRNrlyK4HfyiwQB .error-icon{fill:#552222;}#mermaid-svg-NkRNrlyK4HfyiwQB .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-NkRNrlyK4HfyiwQB .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-NkRNrlyK4HfyiwQB .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-NkRNrlyK4HfyiwQB .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-NkRNrlyK4HfyiwQB .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-NkRNrlyK4HfyiwQB .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-NkRNrlyK4HfyiwQB .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-NkRNrlyK4HfyiwQB .marker{fill:#333333;stroke:#333333;}#mermaid-svg-NkRNrlyK4HfyiwQB .marker.cross{stroke:#333333;}#mermaid-svg-NkRNrlyK4HfyiwQB svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-NkRNrlyK4HfyiwQB p{margin:0;}#mermaid-svg-NkRNrlyK4HfyiwQB .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-NkRNrlyK4HfyiwQB .cluster-label text{fill:#333;}#mermaid-svg-NkRNrlyK4HfyiwQB .cluster-label span{color:#333;}#mermaid-svg-NkRNrlyK4HfyiwQB .cluster-label span p{background-color:transparent;}#mermaid-svg-NkRNrlyK4HfyiwQB .label text,#mermaid-svg-NkRNrlyK4HfyiwQB span{fill:#333;color:#333;}#mermaid-svg-NkRNrlyK4HfyiwQB .node rect,#mermaid-svg-NkRNrlyK4HfyiwQB .node circle,#mermaid-svg-NkRNrlyK4HfyiwQB .node ellipse,#mermaid-svg-NkRNrlyK4HfyiwQB .node polygon,#mermaid-svg-NkRNrlyK4HfyiwQB .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-NkRNrlyK4HfyiwQB .rough-node .label text,#mermaid-svg-NkRNrlyK4HfyiwQB .node .label text,#mermaid-svg-NkRNrlyK4HfyiwQB .image-shape .label,#mermaid-svg-NkRNrlyK4HfyiwQB .icon-shape .label{text-anchor:middle;}#mermaid-svg-NkRNrlyK4HfyiwQB .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-NkRNrlyK4HfyiwQB .rough-node .label,#mermaid-svg-NkRNrlyK4HfyiwQB .node .label,#mermaid-svg-NkRNrlyK4HfyiwQB .image-shape .label,#mermaid-svg-NkRNrlyK4HfyiwQB .icon-shape .label{text-align:center;}#mermaid-svg-NkRNrlyK4HfyiwQB .node.clickable{cursor:pointer;}#mermaid-svg-NkRNrlyK4HfyiwQB .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-NkRNrlyK4HfyiwQB .arrowheadPath{fill:#333333;}#mermaid-svg-NkRNrlyK4HfyiwQB .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-NkRNrlyK4HfyiwQB .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-NkRNrlyK4HfyiwQB .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-NkRNrlyK4HfyiwQB .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-NkRNrlyK4HfyiwQB .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-NkRNrlyK4HfyiwQB .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-NkRNrlyK4HfyiwQB .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-NkRNrlyK4HfyiwQB .cluster text{fill:#333;}#mermaid-svg-NkRNrlyK4HfyiwQB .cluster span{color:#333;}#mermaid-svg-NkRNrlyK4HfyiwQB div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-NkRNrlyK4HfyiwQB .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-NkRNrlyK4HfyiwQB rect.text{fill:none;stroke-width:0;}#mermaid-svg-NkRNrlyK4HfyiwQB .icon-shape,#mermaid-svg-NkRNrlyK4HfyiwQB .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-NkRNrlyK4HfyiwQB .icon-shape p,#mermaid-svg-NkRNrlyK4HfyiwQB .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-NkRNrlyK4HfyiwQB .icon-shape .label rect,#mermaid-svg-NkRNrlyK4HfyiwQB .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-NkRNrlyK4HfyiwQB .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-NkRNrlyK4HfyiwQB .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-NkRNrlyK4HfyiwQB :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 存在矛盾
无冲突
任务完成
自我反思

提取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 记忆三层对齐架构图:
#mermaid-svg-9rXg2gR7bkJ4AkL0{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-9rXg2gR7bkJ4AkL0 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-9rXg2gR7bkJ4AkL0 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-9rXg2gR7bkJ4AkL0 .error-icon{fill:#552222;}#mermaid-svg-9rXg2gR7bkJ4AkL0 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-9rXg2gR7bkJ4AkL0 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-9rXg2gR7bkJ4AkL0 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-9rXg2gR7bkJ4AkL0 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-9rXg2gR7bkJ4AkL0 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-9rXg2gR7bkJ4AkL0 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-9rXg2gR7bkJ4AkL0 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-9rXg2gR7bkJ4AkL0 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-9rXg2gR7bkJ4AkL0 .marker.cross{stroke:#333333;}#mermaid-svg-9rXg2gR7bkJ4AkL0 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-9rXg2gR7bkJ4AkL0 p{margin:0;}#mermaid-svg-9rXg2gR7bkJ4AkL0 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-9rXg2gR7bkJ4AkL0 .cluster-label text{fill:#333;}#mermaid-svg-9rXg2gR7bkJ4AkL0 .cluster-label span{color:#333;}#mermaid-svg-9rXg2gR7bkJ4AkL0 .cluster-label span p{background-color:transparent;}#mermaid-svg-9rXg2gR7bkJ4AkL0 .label text,#mermaid-svg-9rXg2gR7bkJ4AkL0 span{fill:#333;color:#333;}#mermaid-svg-9rXg2gR7bkJ4AkL0 .node rect,#mermaid-svg-9rXg2gR7bkJ4AkL0 .node circle,#mermaid-svg-9rXg2gR7bkJ4AkL0 .node ellipse,#mermaid-svg-9rXg2gR7bkJ4AkL0 .node polygon,#mermaid-svg-9rXg2gR7bkJ4AkL0 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-9rXg2gR7bkJ4AkL0 .rough-node .label text,#mermaid-svg-9rXg2gR7bkJ4AkL0 .node .label text,#mermaid-svg-9rXg2gR7bkJ4AkL0 .image-shape .label,#mermaid-svg-9rXg2gR7bkJ4AkL0 .icon-shape .label{text-anchor:middle;}#mermaid-svg-9rXg2gR7bkJ4AkL0 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-9rXg2gR7bkJ4AkL0 .rough-node .label,#mermaid-svg-9rXg2gR7bkJ4AkL0 .node .label,#mermaid-svg-9rXg2gR7bkJ4AkL0 .image-shape .label,#mermaid-svg-9rXg2gR7bkJ4AkL0 .icon-shape .label{text-align:center;}#mermaid-svg-9rXg2gR7bkJ4AkL0 .node.clickable{cursor:pointer;}#mermaid-svg-9rXg2gR7bkJ4AkL0 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-9rXg2gR7bkJ4AkL0 .arrowheadPath{fill:#333333;}#mermaid-svg-9rXg2gR7bkJ4AkL0 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-9rXg2gR7bkJ4AkL0 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-9rXg2gR7bkJ4AkL0 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-9rXg2gR7bkJ4AkL0 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-9rXg2gR7bkJ4AkL0 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-9rXg2gR7bkJ4AkL0 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-9rXg2gR7bkJ4AkL0 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-9rXg2gR7bkJ4AkL0 .cluster text{fill:#333;}#mermaid-svg-9rXg2gR7bkJ4AkL0 .cluster span{color:#333;}#mermaid-svg-9rXg2gR7bkJ4AkL0 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-9rXg2gR7bkJ4AkL0 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-9rXg2gR7bkJ4AkL0 rect.text{fill:none;stroke-width:0;}#mermaid-svg-9rXg2gR7bkJ4AkL0 .icon-shape,#mermaid-svg-9rXg2gR7bkJ4AkL0 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-9rXg2gR7bkJ4AkL0 .icon-shape p,#mermaid-svg-9rXg2gR7bkJ4AkL0 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-9rXg2gR7bkJ4AkL0 .icon-shape .label rect,#mermaid-svg-9rXg2gR7bkJ4AkL0 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-9rXg2gR7bkJ4AkL0 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-9rXg2gR7bkJ4AkL0 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-9rXg2gR7bkJ4AkL0 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 第三层:工作层
第二层:经验层
第一层:事实层
知道什么事实

用户偏好/环境状态
从过往任务学到了什么

成败教训/策略知识
此刻正在处理什么

当前推理上下文
三层对齐
记忆不空转

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

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知道什么事实 ,从过往任务学到了什么 ,此刻正在处理什么,三层对齐,记忆才不空转。
相关推荐
驴友花雕2 小时前
【花雕动手做】行空板 K10 系列实验之人工智能语音识别小车的10个参考案例
人工智能·单片机·嵌入式硬件·语音识别·行空板 k10 系列实验·花雕动手做·小车的10个参考案例
火山引擎开发者社区4 小时前
DeepSeek-V4 Pro 发布,veStack Day 0 完成模型适配
人工智能
2501_926978334 小时前
AGI 的四种瓶颈:资源型还是发现型--以及DSH的位置
人工智能·经验分享·笔记·ai写作
Q463913494 小时前
线下销售复盘难落地,AI 会话设备能帮上啥忙
人工智能·自然语言处理
ebok.4 小时前
国产大模型落地业务系统的优选载体:京微智枢信创 AI 业务支撑平台
大数据·人工智能·低代码·ai
wujian83114 小时前
怎么用文心生成word文档?从格式错乱到智能导出,AI导出鸭让创作再无后顾之忧
人工智能·ai·word·豆包·deepseek·ai导出鸭
动物园猫5 小时前
猪危险行为目标检测数据集:3类别、5,000+张图像 | 目标检测
人工智能·目标检测·计算机视觉
ai产品老杨5 小时前
AI视频分析并发优化完整流程:解决多路视频并发不足与高延迟排查指南
人工智能·音视频
why技术5 小时前
AI 写的文章,可能都带着手敲一遍都去不掉的“隐形水印”。
前端·人工智能·后端
罗西的思考5 小时前
【Agent OS / AIOS】AOHP 深度解读:当 OS 开始为 Agent 而设计
人工智能·算法·机器学习