AI Agent记忆系统设计:短期、长期与语义记忆的工程实现
Agent 记不住事?从短期对话缓冲、长期向量库到语义摘要记忆,讲清三类记忆的架构设计、写入时机与检索策略,附主流框架实现方案。
Agent 为什么”转头就忘”
一个能连续帮你干活的 Agent,最大的短板往往是记忆。默认情况下,Agent 只有当前对话窗口——关掉就忘光。要让它在多轮、多天、多任务中”记得住”,需要专门设计记忆系统。
三类记忆,各司其职
借鉴认知科学,Agent 记忆分三层:
1. 短期记忆(工作记忆) 当前对话的上下文。保持任务连贯性,但窗口有限,需要滚动压缩。
2. 长期记忆(事实记忆) 跨会话保留的用户偏好、关键事实。存进向量数据库,按需检索。
3. 语义记忆(摘要记忆) 把长对话浓缩成要点,既省 Token 又保留主干。
架构设计:写入与读取
记忆系统的核心是回答两个问题:什么时候写,什么时候读。
写入时机:
- 对话结束时,抽取”值得记住的事实”存入长期记忆
- 每 N 轮对话,生成一段摘要追加到语义记忆
- 用户显式说”记住这个”时立即写入
读取策略:
- 每条新消息进来,先用当前问题去长期记忆检索相关事实
- 把检索结果 + 最近几轮对话 + 摘要一起拼进上下文
- 分层注入:事实在前,对话在后,摘要兜底
关键:别什么都记
新手最容易犯的错是无差别记录一切,结果检索时噪音淹没信号。正确做法:
- 只记稳定信息:偏好、身份、长期目标
- 时效信息加过期:临时状态标记 TTL
- 冲突时更新而非追加:用户改了偏好,覆盖旧值
实现示意
# 写入长期记忆
memory_store.add(text="用户偏好简洁输出,不用表格",
metadata={"type": "preference", "user": uid})
# 对话前检索
hits = memory_store.search(query=user_input, top_k=3)
context = build_context(hits, recent=last_n_turns, summary=running_summary)
主流框架里,LangGraph 提供持久化状态,Mem0、Zep 专注记忆层,都能省去从零搭建。
评估记忆系统好不好
别只看”能不能记住”,要看:
- 召回率:该记的记住了吗?
- 精确率:检索出来的有没有跑题?
- 冲突处理:偏好变化时是否更新正确?
- 成本:检索和注入带来的额外 Token 开销是否可接受?
小结
好的记忆系统让 Agent 从”每次重新认识你”变成”越用越懂你”。设计要点是分层、择时、去噪:短期保连贯,长期保个性,语义保效率;写入要克制,读取要精准。
记住:Agent 的记忆不是”存得越多越好”,而是”在对的时候用对的信息”。