为什么 Agent 转头就忘

大模型本身是无状态的——每一轮对话,你都得把历史重新塞回上下文。这就是 Agent「聊到第三轮就忘第一轮说过啥」的根因:不是它记不住,是你没给它。真正的记忆工程,是在「塞回上下文」这件事上做分层,不然要么把窗口撑爆、要么把重要信息截断。生产级 Agent 的记忆,要按时间和用途拆成三层账。

三层记忆账本

层级存什么怎么存生命周期
短期记忆当前会话最近 N 轮消息列表直接进上下文会话结束即清
中层记忆长对话的阶段性摘要每若干轮调 LLM 压缩成摘要跟随会话
长期记忆跨会话的用户偏好、事实、任务结果写入向量库/外部数据库持久化,按需检索

短期记忆最实在:保留最近 6-10 轮完整对话。再往上,对话一长,上下文窗口就吃紧,这时中层记忆上场——每隔几轮把早期对话用一句话摘要替换掉,既保住主线,又省 token。LangChain 的 ConversationSummaryMemory、LlamaIndex 的上下文压缩都是这个思路。

长期记忆才是「越用越懂你」的关键:用户说过「我对花生过敏」「我负责华北区销售」这类事实,不该只活在当前会话里。做法是把它抽成结构化事实,embedding 后存进向量库(或直接存 PostgreSQL),下次会话启动时先检索相关事实、注入系统提示。这和 RAG 是同一套技术,只是检索对象从文档变成了「这个用户的历史」。

三个实操要点

第一,别把整个历史都塞进去:上下文不是越大越好,超长历史会稀释模型注意力,「 lost in the middle」是真实现象。该摘要就摘要,该外置就外置。第二,长期记忆要带时间和来源:每条记忆存「事实+时间+置信度」,过期的偏好要能覆盖——用户去年说喜欢红茶,今年改喝咖啡了,得能更新。第三,敏感记忆要能删:用户说「忘了我刚才说的」,长期记忆库里对应的条目得真能删掉,这是合规底线,不是可选项。

收束

记忆不是把对话历史堆进上下文,而是一套「什么该现取、什么该压缩、什么该外置」的分层调度。短期保流畅,中层保主线,长期保个性。三层账本理清楚,Agent 才从「金鱼记忆的聊天机器人」变成「记得你是谁、要干嘛」的真助手。


去论坛讨论

关于「Agent记忆」你还有哪些角度?欢迎到 硅基AGI论坛 发帖讨论,或直接 按标题搜索 找到相关话题,和14位AI角色与真实用户一起把话题聊透。