Skip to main content
Version: Next

Agent 记忆系统

LLM 天生只有上下文窗口这一种记忆:容量有限、按 token 计费、会话结束即消失。Agent 记忆系统的本质,是用工程手段在窗口内外组织信息,让模型"记得住该记的,找得到该找的"。

三层模型​

按生命周期与容量划分:

层载体容量生命周期
工作记忆上下文窗口数千到数十万 token单次任务
任务状态显式状态对象(State)结构化、按字段单次任务(可持久化断点续跑)
长期记忆外部存储(向量库/ KV / 数据库)无上限跨会话

任务状态是最容易被忽略的一层:循环式 Agent 每轮都"重读"整个上下文,对长任务的前几轮注意力会衰减。把"当前子目标、已完成、待办、关键决策"维护成结构化状态,每轮注入提示词头部,等于给了模型一个稳定的任务锚点。LangGraph 的 State、各类框架的 scratchpad 都是这个思路。

短期记忆:上下文管理​

上下文内的信息组织直接决定推理质量:

  • 工具结果瘦身:大结果摘要入上下文,全文留在可回取的位置;
  • 历史压缩:早期轮次只保留决策与关键观察,原始输出滚动淘汰;
  • 信息分层排布:系统指令与任务状态放头部(稳定、每轮刷新),最新观察放尾部(注意力最密集区),中部放历史摘要。

上下文管理没有一劳永逸的配置,正确做法是把上下文长度也纳入监控:超过阈值触发压缩,而不是等到模型开始"忘记"早期约束。

长期记忆:写什么、怎么存、怎么找​

跨会话记忆由三个策略共同决定,任何一个设计失衡都会让记忆系统变成噪声源。

写入策略:不是什么都值得记​

策略做法特点
全量记录存下所有对话简单,检索时噪声大
显式写入模型调用记忆工具主动保存可控,依赖模型的判断
周期反思会话结束时提炼要点入库质量/成本平衡的常用解

生产系统常用组合:会话结束后异步运行一轮"反思",提炼出事实(用户偏好)、事件(做了什么)、经验(什么方案有效)分别入库,并打上时间、主题、重要度标签。

存储形态​

  • 语义记忆(事实与知识):向量化存储 + 检索,复用 RAG 的全部基础设施;
  • 情景记忆(事件与经历):结构化记录 + 时间检索,"上次出现这个问题是什么时候";
  • 用户画像(稳定偏好):键值化的档案,随交互增量修订,每轮直接注入而不是检索。

检索策略​

查记忆不是"相似度 Top-K"一个动作能覆盖的:先按时间新鲜度与权限过滤,再按语义相关性召回,最后按重要度与近期使用加权。检索出的记忆以明确的元信息标注注入("以下是你对用户的既有了解,可能过时"),让模型对记忆保持校准的信任。

记忆的维护​

长期记忆必须回答三个管理问题,否则会随时间腐化:

  • 过时:用户半年前的偏好与今天冲突怎么办——带时间戳,冲突时以新为准并显式提示;
  • 矛盾:两来源记录冲突怎么办——保留来源与置信度,交给模型裁决或触发澄清;
  • 膨胀:检索集越来越大怎么办——定期合并去重、按重要度归档低价值记忆。

最小可用架构​

起步阶段不需要复杂系统,三个组件就够:

会话中:上下文 + 任务状态注入
会话尾:反思提炼 → 写入(向量库 + 画像 KV)
会话起:按用户 ID 检索画像 + 相关记忆 → 注入系统提示

这个架构的检索层就是一个小型 RAG——事实上长期记忆与 RAG 共享同一套技术底座,区别只在"库里的内容是什么"与"谁来写入"。当记忆写入与检索也开始由 Agent 自主决策(何时记、记什么、何时查)时,记忆本身也 Agent 化了——这正是记忆与设计模式中反思模式的天然结合点。