记忆,是把模型变成产品的关键。 没有记忆的 Agent 每一次对话都是一次「初次见面」——它记不住你的偏好、学不会自己的错误、无法在多次交互中持续成长。本文从工程实践角度,系统梳理 AI Agent 记忆系统的架构设计与实现方案。
一、为什么记忆是 Agent 的「灵魂拼图」
大语言模型(LLM)本身是无状态的——每一次 API 调用都是一次全新开始。为了让 Agent 看起来有「记忆力」,开发者会把聊天历史拼接到 Prompt 中。但随着上下文窗口被填满,三个问题随之暴露:
成本飙升:对话每增长一轮,token 消耗翻倍,长对话的 API 成本是初始消息的 100 倍以上
注意力稀释:模型在超长上下文中出现「迷失在中间」效应,关键信息被掩埋
遗忘无可避免:会话结束后一切归零,用户的偏好和 Agent 的经验都无法传承
记忆系统正是为了解决这些问题而生。 它让 Agent 能够在单次对话中保持上下文连贯(短期记忆),同时能跨会话记住用户偏好、历史交互和领域知识(长期记忆)。
二、记忆系统的三大层级
借鉴人类认知心理学,AI Agent 的记忆通常划分为三个层级:
2.1 短期记忆 / 工作记忆(Short-Term Memory / Working Memory)
是什么: 当前会话中模型的活跃上下文窗口,是 Agent 当下「看得见」的工作台。
实现方式: 传递给 LLM 的 Message 对象数组,随着对话进行实时追加。
生命周期: 会话结束或被上下文窗口上限截断时清空。
管理策略:
最佳实践:
保持简短——只保留当前任务需要的信息
保持结构化——用 JSON/Schema 组织而非纯文本
及时清理——任务切换时清除无关上下文
优先级排序——最近的对话往往最重要
# 短期记忆的结构化示例
short_term_memory = {
"session_id": "sess_abc123",
"current_goal": "处理退款申请",
"constraints": {
"order_id": "12345",
"refund_window": "30天"
},
"tool_outputs": [
{"tool": "query_order", "result": {"status": "已交付", "damage_reported": True}}
],
"conversation_summary": "用户收到损坏商品,要求退款"
}
2.2 长期记忆 / 语义记忆(Long-Term Memory / Semantic Memory)
是什么: 关于用户或世界的经过提炼的、客观的事实。它与被学到的具体时间解耦,是跨会话持久化的「知识库」。
示例:
「用户的名字是 Alice,偏好深色模式」
「用户的编程语言是 Python」
「该项目的技术栈是 Node.js + MongoDB」
实现方案:提取 → 存储 → 检索 三阶段循环
短期记忆 → [后台 LLM 提取事实] → 向量化 → 向量数据库 → [检索注入] → 短期记忆
提取阶段: 在用户交互的同时,一个次级 LLM 进程在后台异步运行,从对话中提取客观事实和偏好。
# 提取 Prompt 示例
extract_prompt = """
从以下对话中提取客观事实、用户偏好和持久性知识。
格式化为 JSON 列表。
用户: "我正在把我的后端从 Node 迁移到 Go。另外,请始终使用 4 个空格缩进输出代码。"
输出:
[
"用户正在将后端从 Node.js 迁移到 Go",
"用户偏好使用 4 个空格的代码缩进"
]
"""
检索阶段: 当用户下次回来提问时,系统将当前查询向量化,在向量数据库中搜索最相关的记忆,注入到 System Prompt 中。
# 检索注入示例
relevant_memories = memory.search("帮我写个脚本", user_id="alice_123")
system_prompt = f"""
你是一个得力助手。
关于用户背景:{relevant_memories[0]['text']}
"""
2.3 情景记忆 / 经验记忆(Episodic Memory)
是什么: 过去事件和决策的按时间顺序的记录——不仅包括提取出的事实,还包括完整的上下文:什么步骤被采取了、什么工具被调用了、结果如何。
为什么重要:
让 Agent 从错误中学习(「上次尝试 X 方案失败了」)
提供个性化体验(「用户上次选择了更简洁的答复风格」)
跳过已知的无效路径(「这个 API 已经弃用了」)
保持连续性(「接着上次的进度继续」)
实现方案: 将完整的 Agent 执行轨迹(Trajectory)按任务类型和结果建立索引。当遇到相似任务时,检索成功的轨迹作为 Few-shot 示例。
存储决策,而非日志: 关键洞察是——不要存储原始聊天记录,而是存储结构化的决策记录:
{
"episode_id": "ep_001",
"task_type": "退款处理",
"steps": [
{"action": "查询订单", "result": "已交付"},
{"action": "验证退款窗口", "result": "30天内,符合条件"},
{"action": "发起退款", "result": "成功"}
],
"outcome": "success",
"reflection": "用户满意度高,此流程可复用",
"timestamp": "2026-07-15T10:30:00Z"
}
三、五层记忆架构:生产级的记忆堆栈
在 2026 年的生产实践中,一个成熟的AI Agent 记忆系统遵循五层堆栈架构,每层解决不同的问题:

起步建议: 并非所有 Agent 都需要五层架构。从「短期 + 长期 + 语义」三层开始,随着 Agent 能力成熟逐步添加其余层级。
四、主流框架的记忆实现对比
Google ADK
通过 events_compaction_config 设置上下文处理策略:
from google.adk.apps.app import App, EventsCompactionConfig
app = App(
name='my-agent',
root_agent=root_agent,
events_compaction_config=EventsCompactionConfig(
compaction_interval=3, # 每 3 次调用触发压缩
overlap_size=1 # 包含前一个窗口的最后一次调用
),
)
LangChain
通过 SummarizationMiddleware 处理上下文:
from langchain.agents.middleware import SummarizationMiddleware
agent = create_agent(
model="gpt-4o",
tools=[...],
middleware=[
SummarizationMiddleware(
model="gpt-4o-mini",
max_tokens_before_summary=4000,
messages_to_keep=20,
),
],
)
Mem0(开源长期记忆框架)
Mem0 自动处理「提取 → 向量化 → 存储 → 检索」的完整循环:
from mem0 import Memory
m = Memory()
# 存储一个事实(信息提取和向量化自动完成)
m.add(
"我正在学习 AI Agent 开发,我喜欢 Python。",
user_id="alice_123"
)
# 基于新的查询检索相关的记忆
relevant = m.search(
"我下一个项目应该用什么语言?",
user_id="alice_123"
)
# 输出:[{'text': '用户喜欢 Python', 'score': 0.89}]
五、记忆管理的最佳实践与避坑指南
✅ 最佳实践
保持最小有效记忆(Minimum Viable Memory)
只存储能改善输出结果的记忆
设置严格的 top_k 限制(如只检索最相关的前 5 条)
设相关性分数阈值,低于阈值的记忆不注入
实施记忆衰减(Memory Decay)
超过一定时间的记忆降低检索权重
定期归档和折叠总结旧的情景记忆
优先保留最近的语义事实
处理矛盾信息
如果用户先说「我爱 Python」后说「我讨厌 Python,只用 Rust」
后台提取 Prompt 需明确指示模型更新或删除旧事实
基于时间戳的新旧覆盖机制
隔离系统指令与用户记忆
注入到 Prompt 的记忆需用
<user_memory>标签清晰标记避免 LLM 把检索到的用户事实误当作核心系统指令
隐私第一
不使用用户标签,而是严格按
user_id、tenant_id隔离实施自动过期策略
提供用户可见、可管理的记忆控制面板
❌ 常见错误
错误一:把所有内容塞进上下文窗口 即使模型支持 100 万 Token,每次传入全量历史不仅成本高昂,还会显著降低输出质量。必须要用基于 RAG 的检索机制。
错误二:保存一切,从不清理 最常见的大坑——无限存储原始聊天日志。结果:检索噪音巨大、相关性极低、成本持续攀升。存储决策而非日志,定期归档和清理。
错误三:不记出处、不标来源 Agent 的长期记忆中如果丢失了信息来源(如知识库文档标题、上次对话时间戳),就无法追溯和验证记忆的真实性。每一条记忆都应该附带来源元数据。
错误四:长期记忆无差别全量加载 把整个用户画像数据库一股脑塞进 Prompt。每次只检索最相关的前 3-5 条,而不是加载整个资料库。
六、前沿趋势
6.1 时间知识图谱(Temporal Knowledge Graph)
Zep 架构采用的 Graphiti 引擎,能够综合对话和业务数据,维护历史关系。在基准测试中以 94.8% 的成绩超越 MemGPT 的 93.4%,证明了图结构在跨会话推理中的优势。
6.2 自改进记忆(Self-Improving Memory)
Agent 学习管理自己的记忆——决定存储什么、遗忘什么、如何组织信息以便高效检索。当前系统仍需手工设计规则,但这已成为最活跃的研究方向之一。
6.3 ENGRAM 范式
一种前沿方法,仅使用完整上下文基线约 1% 的 Token 就达到了最先进的性能。通过高度压缩的表示层替代全量上下文注入,大幅降低成本和延迟。
七、总结
记忆系统是 AI Agent 从「演示级原型」迈向「生产级产品」的分水岭。
构建记忆系统的第一原则: 选择最小的记忆架构,满足当前需求即可。从「短期 + 长期记忆」开始,当系统暴露出新的记忆瓶颈时,再逐步添加情景记忆、图记忆等更复杂的层级。先跑起来,再优化——这在记忆系统的设计中比什么都重要。
本文参考了 Google ADK、LangChain、Mem0、Zep、Anthropic 等团队在 Agent 记忆领域的公开研究成果与实践经验。