📊 短期与长期记忆
短期记忆和长期记忆的分工协作是 Agent 记忆系统最核心的设计决策。理解二者的区别、联系和协同机制,是构建高效 Agent 的前提。
📋 短期记忆(STM)
- 存储介质:LLM 上下文窗口
- 容量上限:4K~1M tokens(模型相关)
- 访问延迟:零延迟(已在注意力计算中)
- 生命周期:单次会话/任务周期
- 遗忘方式:窗口滑动 / 超出即丢弃
- 数据特征:高保真、结构化对话
🗄️ 长期记忆(LTM)
- 存储介质:向量库 / 图数据库 / 文档存储
- 容量上限:近乎无限(可水平扩展)
- 访问延迟:10~500ms(网络+检索)
- 生命周期:跨会话持久化
- 遗忘方式:TTL / 重要性衰减 / 手动管理
- 数据特征:嵌入向量 / 结构化知识 / 摘要
🪟 上下文窗口 → 短期记忆
LLM 的上下文窗口(Context Window)天然充当了 Agent 的短期记忆。每一次推理,模型都会"看到"窗口内的全部内容:
上下文窗口的组成
| 组成元素 | 说明 | Token 占比 |
|---|---|---|
| System Prompt | Agent 的角色定义、行为约束、工具描述 | 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 记忆系统不是短期和长期的简单叠加,而是动态协同:
- 检索优先级:先查短期记忆(零延迟),未命中再查长期记忆
- 双向流动:短期记忆合并为长期记忆;长期记忆按需加载到短期记忆
- 一致性维护:同一信息的短期和长期版本保持一致,或标记版本差异
- 缓存策略:高频访问的长期记忆缓存到短期记忆中,减少检索延迟