🏗️ 记忆系统架构

记忆系统是 Agent 实现跨会话、跨任务的知识保持与复用的基础。一个设计良好的记忆架构能让 Agent 从"无状态工具"进化为"有上下文的智能体"。

🧱 多级记忆模型

借鉴人类认知心理学中的 Atkinson-Shiffrin 多存储模型,Agent 的记忆系统同样采用分层设计:

感官记忆(Sensory Memory)

原始的、未经处理的输入信号。在 Agent 语境中对应 用户原始消息、工具返回的原始数据。容量极大但保留时间极短(毫秒~秒级),需要经过注意力机制筛选后进入工作记忆。

🧩

工作记忆(Working Memory)

当前任务执行中的临时信息。对应 LLM 推理过程中的中间步骤、当前对话轮次的关键信息。容量有限(约7±2个信息块),与当前任务强相关,任务完成后可丢弃。

📋

短期记忆(Short-Term Memory)

当前会话/任务周期内的上下文信息。对应 LLM 的上下文窗口(Context Window),包含对话历史、工具调用记录、中间推理结果。保留时间从分钟到小时级,受上下文窗口长度限制。

🗄️

长期记忆(Long-Term Memory)

跨会话持久化的知识。对应 外部向量数据库、知识图谱、文档存储等持久化方案。容量近乎无限,保留时间持久,需要通过检索机制按需加载。

📊 各层级记忆特征对比

特征维度 感官记忆 工作记忆 短期记忆 长期记忆
容量 极大(原始数据流) 有限(7±2 信息块) 中等(几K~几M tokens) 近乎无限
保留时间 毫秒~秒 秒~分钟 分钟~小时 持久(天~年)
存储位置 请求体/响应体 LLM 内部状态 上下文窗口 / KV Cache 向量库/图数据库/文档存储
访问速度 即时 极快 较慢
检索方式 注意力筛选 直接引用 自注意力机制 语义检索 / 关键词 / 图谱查询
典型实现 消息预处理、工具返回解析 Scratchpad、推理步骤 Context Window、KV Cache Pinecone/Weaviate/Neo4j/MongoDB
遗忘策略 自动丢弃未关注信息 任务完成即清空 窗口滑动/超出限制丢弃 TTL过期/重要性评分/手动管理

🔄 记忆存储与检索机制

存储流程

📥 原始输入 🔍 注意力筛选 💭 工作记忆处理 📋 短期记忆暂存 🗄️ 长期记忆合并
  1. 输入捕获:用户消息、工具返回值等原始数据进入感官记忆
  2. 注意力筛选:通过预定义的注意力规则或 LLM 判断,提取关键信息进入工作记忆
  3. 上下文编码:工作记忆中的信息被编码为结构化上下文,放入短期记忆(上下文窗口)
  4. 记忆合并:会话结束后,根据重要性评分将短期记忆中的关键信息持久化到长期记忆

检索流程

❓ 用户查询 🔍 短期记忆查找 📡 长期记忆检索 🔗 结果融合排序 ✍️ 上下文增强生成
  1. 短期记忆查找:首先在上下文窗口中查找相关信息(最近的对话、工具调用记录)
  2. 长期记忆检索:若短期记忆不足,触发向量检索/关键词搜索/图谱查询,从外部存储获取相关知识
  3. 结果融合:将短期和长期记忆检索结果合并,按相关性排序,去重
  4. 上下文增强:将检索到的记忆注入当前推理上下文,增强生成的准确性和连贯性

💾 记忆序列化与反序列化

记忆需要在会话挂起/恢复Agent 迁移多 Agent 共享等场景下进行序列化与反序列化。

方案序列化格式适用场景优缺点
JSON 快照 结构化 JSON 会话挂起/恢复、调试 ✅ 简单直观 ❌ 无法存储向量/嵌入
Message List OpenAI 消息格式 多轮对话恢复 ✅ 与 LLM API 兼容 ❌ 占用空间大
向量嵌入存储 Float 数组 + 元数据 长期记忆持久化 ✅ 支持语义检索 ❌ 不可逆(无法还原原文)
Summary 压缩 自然语言摘要 长期对话的上下文压缩 ✅ 节省空间 ❌ 信息有损
Protobuf/MessagePack 二进制格式 高性能场景、跨语言 ✅ 紧凑高效 ❌ 可读性差

序列化设计原则

  • 完整性:序列化后的数据应能完整恢复 Agent 的记忆状态
  • 兼容性:版本演进时保持向前/向后兼容
  • 可扩展性:支持自定义记忆类型和元数据的扩展
  • 安全性:敏感记忆数据应支持加密序列化
  • 高效性:大规模记忆数据的序列化/反序列化性能
💡 架构建议 推荐采用混合序列化策略:短期记忆使用 Message List 格式与 LLM 无缝对接;长期记忆使用向量嵌入 + JSON 元数据,兼顾检索效率与可读性;跨 Agent 迁移使用 Protobuf 保证效率和跨语言兼容。