为什么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,随时间递减,长期未被检索的记忆降权
- 合并压缩:相似记忆条目通过聚类合并,提取共性模式
- 主动遗忘:低质量记忆(如失败且无参考价值的尝试)直接删除
实践中的策略是设置三层保留周期:
- 7天内:完整保留所有细节
- 7-30天:保留摘要和关键决策点
- 30天以上:仅保留高价值模式和教训
工程实现要点
存储选型
| 记忆层 | 推荐存储 | 理由 |
|---|---|---|
| 工作记忆 | Redis / 本地内存 | 低延迟,频繁读写 |
| 情景记忆 | Milvus / Pinecone | 向量检索为主 |
| 语义记忆 | Neo4j + 向量库 | 图查询+向量混合 |
检索融合
最终注入prompt的记忆来自三层的融合结果。推荐的重排策略:
- 先从语义记忆中获取top-k相关知识
- 从情景记忆中获取相似场景的过往经历
- 将两者与当前工作记忆中的上下文合并
- 按相关性分数统一排序,截断到token预算内
现有框架的参考实现
LangChain的ConversationBufferMemory和ConversationSummaryMemory是简化版实现。MemGPT项目则提供了更完整的分层记忆架构,值得深入研究。AutoGPT的长期记忆模块也采用了向量存储+检索的方案。
总结
记忆系统是Agent从"单次对话工具"进化为"持续运作智能体"的核心基础设施。三层架构——工作记忆、情景记忆、语义记忆——各有侧重,工程实现需要平衡存储成本、检索延迟和遗忘策略。随着Agent应用场景从简单问答走向复杂自动化流程,记忆系统将成为决定Agent能力上限的关键变量。