Agent 记忆系统设计模式

2026-06-07记忆系统架构设计模式

记忆系统要解决的问题

Agent 的核心矛盾:LLM 上下文窗口有限,但用户希望 Agent 有"记忆"——记住你是谁、之前说过什么、有什么偏好。记忆系统就是在有限空间中做最有效的上下文管理。

四层记忆模型

来源:MemGPT/Letta 提出的层级记忆模型,已被广泛采纳:

使用频率高 / 容量小
    ↑
  ┌───────────────────────┐
  │ 核心记忆 (Core)        │ ← 身份、角色、关键约束
  │                        │   每次请求必带
  ├───────────────────────┤
  │ 工作记忆 (Working)     │ ← 当前会话、最近N轮、活跃意图
  │                        │   会话期间持续
  ├───────────────────────┤
  │ 场景记忆 (Episodic)    │ ← 过去的会话摘要、关键事件
  │                        │   跨会话
  ├───────────────────────┤
  │ 语义记忆 (Semantic)    │ ← 知识库、向量化文档
  │                        │   长期不变
  └───────────────────────┘
    ↓
使用频率低 / 容量大

记忆实现策略

1. 窗口截断(最简单的短期记忆)

保留最近 N 轮对话,丢弃最早的。实现简单,但会丢失早期上下文。

messages = messages[-MAX_TURNS:]  # 保留最近 10 轮

2. 结构化工作记忆

不只是文本,而是结构化的字段:

{
  "intent": "leave_request",
  "current_topic": "年假申请",
  "extracted_entities": {"user_id": "EMP001", "leave_type": "annual"},
  "risk_signals": ["balance_low"],
  "working_summary": "用户想申请年假,需先检查余额"
}

3. 摘要滚动

当上下文达到上限时,用 LLM 压缩早期内容为摘要。保留摘要 + 最近的原始消息。

4. 分层检索

按需加载不同层级的记忆:身份信息冷启动时预加载,会话记忆按需检索关键词,知识记忆通过 RAG 检索。

持久化策略

记忆层存储方式生命周期
核心记忆配置/系统 Prompt静态
工作记忆内存 + 可选 DB会话期间
场景记忆SQL/NoSQL永久(可压缩)
语义记忆向量数据库永久

设计原则

  • 早期就设计记忆层:后期加记忆系统比初期设计难 10 倍
  • 隔离各层:各层独立变化,互不影响
  • 缓存优先:高频访问的数据放在内存或缓存层
  • 摘要要可靠:压缩质量直接影响 Agent 表现
  • 幂等更新:同一知识重复写入不应产生重复
未标记