为什么Agent需要记忆?

传统大语言模型的上下文窗口本质上是"短期工作记忆",一旦对话超出窗口长度,早期信息就会丢失。而真正的智能体需要在跨会话、跨任务的长周期运作中保持上下文连贯性——这就要求我们构建结构化的记忆系统。

记忆系统的三层架构

1. 工作记忆(Working Memory)

工作记忆对应Agent当前正在处理的上下文,通常映射为LLM的context window。工程实现上需要注意以下几点:

  • 动态裁剪策略:不是简单截断,而是基于注意力权重或摘要压缩来保留关键信息
  • 滑动窗口+摘要:将溢出的历史对话通过小模型生成摘要,注入到新窗口头部
  • 多模态工作区:除文本外,缓存当前任务相关的图片、表格、代码片段

一个典型实现是使用Redis作为热数据存储,配合embedding检索,将相关历史片段动态注入context。

2. 情景记忆(Episodic Memory)

情景记忆记录Agent过去的交互经历,包括时间、场景、行为和结果。实现方式通常是向量数据库存储:

记忆条目结构:
{
  "id": "ep_001",
  "timestamp": "2026-07-16T10:00:00Z",
  "task": "数据分析任务",
  "actions": ["读取CSV", "生成图表", "撰写报告"],
  "outcome": "成功生成季度销售分析报告",
  "embedding": [0.12, -0.34, ...],
  "metadata": {"user_id": "u123", "session_id": "s456"}
}

检索时,将当前任务描述编码为向量,在数据库中做kNN查询,召回最相关的N条历史经历。

3. 语义记忆(Semantic Memory)

语义记忆是Agent的"知识库",存储事实、概念和规则。与RAG系统类似,但更强调知识的结构化组织和增量更新:

  • 本体图谱:使用知识图谱存储实体关系
  • 文档库:向量索引+全文检索双路召回
  • 技能库:Agent掌握的工具调用模式和Prompt模板

记忆的写入与遗忘

记忆系统最关键的不是存储,而是遗忘机制。人脑会自动遗忘无关信息以保持认知效率,Agent同样需要:

  • 衰减权重:每条记忆有一个decay score,随时间递减,长期未被检索的记忆降权
  • 合并压缩:相似记忆条目通过聚类合并,提取共性模式
  • 主动遗忘:低质量记忆(如失败且无参考价值的尝试)直接删除

实践中的策略是设置三层保留周期:

  1. 7天内:完整保留所有细节
  2. 7-30天:保留摘要和关键决策点
  3. 30天以上:仅保留高价值模式和教训

工程实现要点

存储选型

记忆层推荐存储理由
工作记忆Redis / 本地内存低延迟,频繁读写
情景记忆Milvus / Pinecone向量检索为主
语义记忆Neo4j + 向量库图查询+向量混合

检索融合

最终注入prompt的记忆来自三层的融合结果。推荐的重排策略:

  1. 先从语义记忆中获取top-k相关知识
  2. 从情景记忆中获取相似场景的过往经历
  3. 将两者与当前工作记忆中的上下文合并
  4. 按相关性分数统一排序,截断到token预算内

现有框架的参考实现

LangChain的ConversationBufferMemoryConversationSummaryMemory是简化版实现。MemGPT项目则提供了更完整的分层记忆架构,值得深入研究。AutoGPT的长期记忆模块也采用了向量存储+检索的方案。

总结

记忆系统是Agent从"单次对话工具"进化为"持续运作智能体"的核心基础设施。三层架构——工作记忆、情景记忆、语义记忆——各有侧重,工程实现需要平衡存储成本、检索延迟和遗忘策略。随着Agent应用场景从简单问答走向复杂自动化流程,记忆系统将成为决定Agent能力上限的关键变量。