Agent 记忆机制:短期、长期与情景记忆怎么配合才不「转头就忘」

只靠上下文窗口的 AI 总会忘。本文讲清 Agent 的三类记忆(短期/长期语义/情景)与一套「检索注入 + 写回」的读写机制,给出向量记忆最小示例,以及记太多变噪声、遗忘权等边界。

Agent 记忆机制:短期、长期与情景记忆怎么配合才不「转头就忘」

一个只会「看完当前对话就忘」的 AI,很难称职:你昨天告诉它的偏好,今天它又不记得了;长项目上下文一多,它就抓不住重点。

Agent 的「记忆」机制,就是补上这块短板——让它在会话之间、在长篇任务里,能存得住、取得出该记的东西。

背景:模型的记忆只有「当下」

大模型本身的上下文窗口是一次会话的临时记忆:超出窗口的旧内容会被丢弃,关掉对话更是全清零。要让 Agent 有「长期记忆」,必须把信息存到模型之外的存储里,用时再按需取回,塞进当前上下文。

三类记忆与一套读写

  • 短期记忆:就是当前上下文窗口,放正在进行的事。
  • 长期记忆(语义):沉淀下来的稳定知识、用户偏好、项目背景,通常存进向量数据库,用时语义检索取回。
  • 情景记忆(episodic):过去发生过的「事件流水」,如「上周三用户让我改过配色」,便于回溯。

一个最小可运行的例子

把「值得长期记住」的内容向量化入库,对话时先检索再回答:

memory_db.add(embed("用户偏好:回复用简体中文,不要 emoji"), meta={"type": "preference"})   # 写入:用户告知了稳定偏好

hits = memory_db.search(embed(current_msg), top_k=3)   # 读取:每次对话前,取回相关记忆注入
context = "\n".join(h["text"] for h in hits)
reply = model(f"已知背景:\n{context}\n\n用户:{current_msg}")

关键在「写什么、怎么取」:写得太碎会噪声爆炸,写得太多又撑爆上下文,要靠检索精准度平衡。

取舍与边界

  • 记太多 = 噪声:什么都往长期记忆塞,检索回来一堆无关内容,反而干扰模型。要有「该不该记」的判断。
  • 检索精度决定上限:记忆再全,取不回对的片段也白搭;embedding 质量和分块策略很关键。
  • 隐私与遗忘权:存了用户偏好就要能删,合规上要支持「忘记我」。
  • 短期别无限拉长:上下文越长越贵越易迷失,长任务应定期摘要压缩,而非无脑堆叠。

Tips

  • 先区分:临时的事放上下文,稳定的事(偏好/背景)才进长期记忆。
  • 长期记忆用向量库存,对话前检索注入,别全量塞。
  • 写入要有取舍,别把流水账全记;定期清理低价值记忆。
  • 给用户「遗忘」能力,存了偏好就得能删。
  • 长任务用摘要压缩替代无脑堆叠,省 token 也提信噪比。

KEEP READING