为什么 Agent 需要记忆

大模型本身是无状态的——每次调用都是从零开始,不记得上一次聊了什么。做 Agent 应用时,你必须自己给它加上记忆。没有记忆的 Agent 就像一个每次见面都要重新自我介绍的同事,用起来非常别扭。记忆系统是 Agent 从「聊天机器人」变成「长期助手」的关键一步。

Agent 的记忆分两类:短期记忆是当前对话的上下文(你刚说了什么、Agent 刚答了什么),长期记忆是跨会话保留的信息(用户叫什么、喜欢什么、之前做过什么决策)。两者存储方式不同,使用时机也不同。

没有记忆的 Agent 是一次性的工具,有记忆的 Agent 才是长期助手。记忆决定了 Agent 能不能真正理解你的需求。
本文核心知识点
  • 短期记忆当前对话的上下文,存在提示词里。
  • 长期记忆跨会话的用户偏好和事实,存在外部存储。
  • 记忆检索根据当前问题从长期记忆里捞出相关信息。
  • 记忆更新新信息进来要写入,过时信息要淘汰。
Agent 记忆机制配图:中央发光大脑连接下方堆叠存储库,周围浮动标签图标,蓝色渐变扁平风格
Agent 记忆系统的示意:大脑状的核心连接短期缓存与长期存储库。

短期记忆:对话上下文

短期记忆就是当前对话的完整上下文。用户和 Agent 一来一回的对话历史,每次请求都要带着。上下文窗口有限,对话轮次多了就要做摘要——这部分前面上下文工程那篇已经讲过。短期记忆的核心问题是:保留多少、怎么压缩、什么时候该截断。

# 短期记忆的滑动窗口策略
# 1. 保留最近 N 轮原文(比如最近 5 轮)
# 2. 更早的对话做摘要,压缩成几句话
# 3. 每次新请求把摘要 + 最近 N 轮一起塞进提示
# 4. 关键决策和事实要显式标注为「需要记住」

长期记忆:用户偏好与历史事实

长期记忆是跨会话保留的信息。用户说过「我是素食主义者」,下次推荐餐厅就应该推荐素食餐厅。用户说过「我在做一个电商网站」,下次问技术问题就应该围绕电商场景。这些信息需要存在外部存储里,每次新会话开始时检索出来塞进系统提示。

长期记忆存什么
  • 用户画像职业、行业、技术栈、偏好。
  • 历史决策之前讨论过的方案、做过的选择。
  • 项目背景用户在做的项目是什么、进展到哪了。
  • 明确要求用户说过「以后别再问我这个」这类指令。

记忆存储:向量数据库与摘要

长期记忆存在哪?最常用的方案是向量数据库。每一条记忆(比如「用户喜欢简洁风格」)存成一条记录,附带它的向量嵌入。需要回忆的时候,拿当前问题的向量去做相似度检索,捞出最相关的几条记忆塞进提示词。

记忆类型存储方式检索方式
用户画像结构化 KV 存储直接读取
历史对话摘要向量数据库语义检索
项目文档向量数据库RAG 检索
对话原文短期上下文窗口滑动窗口

记忆检索:什么时候该回忆什么

不是每次请求都要把所有长期记忆塞进去——那会把上下文窗口撑爆。正确做法是:用户问一个问题,先拿这个问题去向量库里检索,只捞出和当前问题相关的 3-5 条记忆,塞进提示词。不相关的记忆就不塞,省 Token 也不干扰模型。

# 记忆检索的基本流程
# 1. 用户发来新问题 Q
# 2. 把 Q 转成向量,去长期记忆库做相似度检索
# 3. 取出 top-K 条最相关记忆(比如 top-5)
# 4. 把这 5 条记忆拼到系统提示里
# 5. 连同当前对话上下文一起发给模型