📊 短期与长期记忆

短期记忆和长期记忆的分工协作是 Agent 记忆系统最核心的设计决策。理解二者的区别、联系和协同机制,是构建高效 Agent 的前提。

📋 短期记忆(STM)

  • 存储介质:LLM 上下文窗口
  • 容量上限:4K~1M tokens(模型相关)
  • 访问延迟:零延迟(已在注意力计算中)
  • 生命周期:单次会话/任务周期
  • 遗忘方式:窗口滑动 / 超出即丢弃
  • 数据特征:高保真、结构化对话

🗄️ 长期记忆(LTM)

  • 存储介质:向量库 / 图数据库 / 文档存储
  • 容量上限:近乎无限(可水平扩展)
  • 访问延迟:10~500ms(网络+检索)
  • 生命周期:跨会话持久化
  • 遗忘方式:TTL / 重要性衰减 / 手动管理
  • 数据特征:嵌入向量 / 结构化知识 / 摘要

🪟 上下文窗口 → 短期记忆

LLM 的上下文窗口(Context Window)天然充当了 Agent 的短期记忆。每一次推理,模型都会"看到"窗口内的全部内容:

上下文窗口的组成

组成元素说明Token 占比
System PromptAgent 的角色定义、行为约束、工具描述10%~30%
对话历史用户-Agent 的多轮交互记录30%~50%
工具调用记录Function Call 请求与返回结果10%~20%
检索到的记忆从长期记忆中检索注入的相关知识10%~20%
推理中间步骤Chain-of-Thought、Scratchpad 等5%~15%
💡 上下文窗口管理技巧
  • 优先级分层:System Prompt 固定保留,对话历史按重要性排序,工具返回仅保留关键字段
  • 动态窗口:根据任务复杂度动态调整各部分占比,简单任务减少历史保留
  • 递归摘要:对超长对话自动生成渐进式摘要,用摘要替代原始对话
  • 注意力加权:借助 Attention Sink 技术,将最重要信息放在窗口首尾位置
  • Token 预算:为每类内容预设 Token 上限,超出时触发压缩或截断策略

🗄️ 外部存储 → 长期记忆

长期记忆通过外部存储系统实现跨会话的知识保留。选择合适的存储方案直接影响 Agent 的检索效率和知识质量。

长期记忆的核心能力

  • 持久化存储:用户偏好、历史决策、领域知识等跨会话保留
  • 语义检索:通过向量相似度查找相关知识,而非精确关键词匹配
  • 知识演化:支持记忆的更新、修正和版本管理
  • 多模态记忆:支持文本、代码、图像等多种类型的记忆存储

📊 记忆方案对比

方案 存储方式 检索方式 容量 延迟 精度 适用场景
纯上下文窗口 LLM KV Cache 自注意力 极低 短对话、单步任务
RAG(向量检索) 向量数据库 语义相似度 知识问答、文档检索
向量库 Pinecone/Weaviate/Milvus ANN 近邻搜索 极高 中高 大规模语义记忆
图数据库 Neo4j/ArangoDB 图谱遍历/Cypher查询 较高 关系推理、知识图谱
混合方案 向量+图+全文检索 多路召回+重排序 极高 较高 复杂Agent系统、企业级应用

🔄 记忆合并与遗忘策略

记忆合并(Memory Consolidation)是将短期记忆中的关键信息提炼并持久化到长期记忆的过程。遗忘策略则用于管理长期记忆的容量和质量。

记忆合并流程

📋 短期记忆快照
⭐ 重要性评分
✂️ 信息抽取与摘要
🔗 与已有知识融合
🗄️ 持久化写入

合并触发条件

  • 会话结束:每次对话结束时自动触发合并
  • 窗口溢出:上下文窗口接近上限时,将重要信息合并后释放空间
  • 重要性阈值:当某条记忆的重要性评分超过阈值时立即合并
  • 定时批量:按固定时间间隔(如每小时)批量处理待合并记忆

遗忘策略

策略机制适用场景
TTL 过期 设置生存时间,到期自动删除 临时会话数据、缓存类记忆
重要性衰减 根据访问频率和时间衰减评分,低于阈值删除 知识类记忆、用户偏好
容量驱逐 达到容量上限时,按 LRU/LFU 策略淘汰 有限存储预算的场景
冲突解决 新旧信息矛盾时,以新信息为准或保留多个版本 用户偏好变化、知识更新
手动管理 提供 API 供用户或 Agent 主动删除/修正记忆 隐私合规、数据纠错

⚡ 短期与长期记忆的协同

高效的 Agent 记忆系统不是短期和长期的简单叠加,而是动态协同

  • 检索优先级:先查短期记忆(零延迟),未命中再查长期记忆
  • 双向流动:短期记忆合并为长期记忆;长期记忆按需加载到短期记忆
  • 一致性维护:同一信息的短期和长期版本保持一致,或标记版本差异
  • 缓存策略:高频访问的长期记忆缓存到短期记忆中,减少检索延迟