✨ 复制成功!

以文会友,打造好学人设!

📋 已复制到剪贴板:

Agent 的记忆机制如何设计?短期记忆、长期记忆、工作记忆分别怎么存储和检索?如何避免记忆污染和上下文爆炸?

创建时间:2026-10-19 更新时间:2026-10-19 阅读次数:1061 次 分类:Agent与RAG应用

1、先给一个核心判断标准

判断一套 Agent 记忆设计好不好,有一个很实用的标准:

用户三个月前说过一句偏好,你现在能不能准确地取回来,同时不把上周已经改过的旧值也带回来?

答不上来,通常不是检索算法的问题,而是把性质完全不同的记忆塞进了同一个容器。

所以记忆设计的第一步不是选向量库,而是分层。

2、短期记忆(工作记忆):当前任务的上下文

短期记忆是什么:当前会话或任务正在使用的信息。生命周期等于任务或会话,会话结束即丢弃(除非主动保存)。

存储:

  • 上下文窗口本身、消息列表、任务状态。
  • 不需要“检索”,需要的是装配和压缩:token 预算怎么分、哪些该保留、哪些该折叠。

检索方式:

  • 直接访问,不走向量检索。
  • 按时间顺序取最近 N 轮,或者按任务状态取当前活跃的子目标。

关键取舍:

  • 上下文窗口是有限预算。长期记忆、对话历史、检索知识、当前问题都在抢同一个窗口。
  • 短期记忆的铁律是:最小必要信息集,而不是完整聊天记录。上下文越长,模型注意力越分散,性能反而下降。
  • 管理手段是压缩、裁剪、折叠,而不是检索。

一句话:短期记忆是“舞台”,任何长期记忆最终都要被注入这里才生效,但它本身不需要检索,需要的是装配。

3、长期记忆:跨会话的稳定事实与偏好

长期记忆是什么:跨会话、跨任务需要保留的信息。典型内容:用户偏好、账号属性、领域事实、明确要求。

存储:

  • 不要用向量库。长期记忆的访问模式是“按需取用”,不是“找一个最像的”。
  • 你需要的查的是 user_id → 偏好集合,而不是“和这句话语义最近的十条记录”。
  • 推荐:关系表或文档存储,字段显式定义,有 schema。取值按主体键直接查,不走向量。
  • 同一键有多个来源时,按“来源可信度 + 时间新旧”裁决,保留变更历史。

检索方式:

  • 按主体键精确查询。
  • 会话开始时一次性注入用户画像,这是最便宜且最有价值的内存操作。

关键取舍:

  • 长期记忆量少但必须准确。用向量做这件事会得到两个后果:取回来的字段不确定,以及无法做精确的覆盖更新。
  • 写入路径必须收敛:不要让模型直接写长期记忆。模型的一次幻觉如果直接落库,会永久污染记忆,后续所有任务都会读到这个脏值。正确做法是模型输出“候选记忆 + 置信度 + 依据”,由规则层裁决是否入库。

一句话:长期记忆是“档案柜”,按 key 精确查,写入要审批,不能用语义相似度替代精确性。

4、情景记忆:过去发生过什么

情景记忆是什么:具体事件的记录。“上个月处理过一笔类似的退款,当时走了人工审批”。特点是量大、允许模糊、主要访问方式是相似度检索。

存储:

  • 向量库适合做语义召回入口。

  • 但向量只能解决“和当前情况看起来像的历史案例”,解决不了关系传导。如果问题涉及“A 和 B 相关、B 又和 C 相关”,答案在结构里,不在语义里。所以情景层的常见组合是:向量做入口召回,图做多跳扩展。

  • 写入时打标签:时间、主体、动作类型。检索时先按标签过滤再算相似度,能砍掉大部分噪声。

检索方式:

  • 向量相似度召回 + 元数据过滤 + 重排序。

  • 按事件切分,不按 token 数切。固定长度切片会把一次完整交互切成碎片,检索回来每块都不完整。

关键取舍:

  • 向量擅长语义相似,不擅长关系推理。

  • 上图的时机不是一开始,而是当关系型问题反复出现、向量明显答不对的时候。

一句话:情景记忆是“案例库”,用向量找相似案例,用图找关系邻居,用元数据过滤噪声。

5、如何避免记忆污染

记忆污染是指:错误、过时、过度泛化的知识条目被写入长期记忆,后续通过检索不断被读到,错误级联放大。

(1)写入闸门(Write Gate)

不要让所有生成的内容都入库。研究提出的 Failure-Gated Hierarchical Memory 用专门的 Critic 模型对所有从情景缓冲写入长期记忆的候选条目做裁决:APPROVE、REJECT_REDUNDANT、REJECT_CONFLICT。

工程上的轻量做法:

  • 模型输出“候选记忆 + 置信度 + 依据”。
  • 规则层决定是否入库。低置信度不入库,冲突条目走人工或保留旧值。
  • 同一键的更新要保留变更历史,出问题能追溯“这个值是被谁、什么时候覆盖的”。

(2)冲突裁决

同一事实有多个来源时,按“来源可信度 + 时间新旧”择一。长期记忆的更新不是简单覆盖,而是裁决。

(3)定期清理与归档

  • 规则层面的清理:过期事件、重复条目、低价值碎片。
  • 但不建议无差别地用遗忘曲线删除,有实验显示基于遗忘曲线的管理虽然控制了记忆大小,但任务性能会明显下降。

(4)反思与提炼

Reflexion 式的反思日志可以存入情景记忆,但反思本身也可能污染。低质量的反思如果被当作事实存储,会误导后续决策。所以反思应该标记为“经验/假设”,而不是“事实”。

6、如何避免上下文爆炸

上下文爆炸的本质是:所有可用的记忆都想挤进有限的 token 窗口。

(1)预算分配,而不是全量注入

给上下文窗口划预算:对话历史、检索知识、长期记忆各占一定比例。长期记忆虽然分配最少,但信息密度最高,三句话的用户画像可能比 30 轮历史更有价值。

(2)按需检索,而不是每轮全量注入

  • 会话开始时注入一次用户画像。
  • 每轮根据当前 query 检索相关的事实和情景。
  • 不要每轮都重新注入全部长期记忆,用户画像不会在上一轮和这一轮之间变化。

(3)排序不只看相似度

向量距离衡量的是语义相似,不衡量“是否仍然真实”“是否曾经重要”“是否被后续事实推翻”。按相似度检索后,应该用置信度 × 时间衰减 × 类别权重重排。半衰期是最值得测量而不是猜测的参数。

(4)去重

两条记录用不同措辞表达同一事实,都会获得高分,浪费两份预算。排名后、组装前要去重。

(5)短期记忆压缩

历史对话不是越长越好。递归摘要、滑动窗口、关键信息提取,都是控制短期记忆规模的手段。

7、一句话总结

Agent 记忆要分三层设计:短期记忆是上下文窗口,靠装配和压缩,不靠检索;长期记忆是精确的事实与偏好,用结构化存储按 key 查,写入要闸门;情景记忆是事件案例库,用向量召回 + 元数据过滤 + 图扩展。避免污染靠写入裁决和冲突管理,避免上下文爆炸靠预算分配、按需检索、多维排序和去重。

8、这道面试题的质量点评

优点

结构完整:三层记忆的存储/检索 + 两个工程难题,覆盖了记忆系统的核心。

区分度很好:

初级:能说短期放上下文、长期放向量库。

中级:能说长期记忆不该用向量、写入要有控制。

高级:能说写入闸门、冲突裁决、预算分配、多维排序、情景层向量+图组合。

贴近真实痛点:记忆污染和上下文爆炸是 Agent 上线后最常见的两个问题。

有追问空间:可以追问写入闸门的具体实现、长期记忆的 schema 设计、向量+图怎么组合、遗忘策略。

缺点

偏难:如果候选人只做过简单 RAG,可能只答“短期上下文 + 长期向量库”,后两问答不好。

容易混淆概念:短期/工作/长期/情景/语义/程序,术语多,候选人可能混着说。

缺少场景约束:没问“你实际项目记忆规模多大?遇到过污染吗?”

没覆盖程序记忆:技能/工作流这类“怎么做事”的记忆也是 Agent 记忆的一部分,题目没提。

总体评价

质量:上。 适合中高级岗位,能有效区分“知道记忆分层概念”和“真正设计过 Agent 记忆系统”的人。建议追问:

“长期记忆的写入闸门具体怎么实现?”

“情景记忆什么时候需要图,什么时候向量就够了?”

“时间衰减的半衰期怎么定?”

“记忆污染你实际遇到过吗?怎么发现的?”

“程序记忆(技能)怎么管理?”

9、怎么回答才是最好的

回答原则

  • 先给分层框架:短期、长期、情景,各管什么。
  • 重点说存储选型:短期靠窗口,长期靠结构化存储,情景靠向量+图。
  • 讲两个工程难题:污染靠写入闸门,爆炸靠预算和按需。
  • 主动提取舍:长期记忆不用向量的原因、情景图上图的时机。
  • 结合实践:说“我们长期记忆用 SQLite,情景用向量+元数据过滤”。

推荐回答结构

“Agent 记忆要分三层,因为性质完全不同。短期记忆是当前任务的上下文,生命周期等于会话,靠上下文窗口和压缩,不需要检索。长期记忆是跨会话的稳定事实和偏好,量少但必须准确,用结构化存储按 key 查,不要用向量库。情景记忆是过去的事件案例,量大允许模糊,用向量召回 + 元数据过滤,需要关系推理时加图。”

“长期记忆用向量会出两个问题:取回来的字段不确定,无法做精确覆盖更新。所以用关系表或文档,按主体键直接查,写入不让模型直接写,模型输出候选 + 置信度,规则层裁决。”

“避免污染的核心是写入闸门。模型的一次幻觉如果直接落库,后续所有任务都会读到脏值。要有 Critic 或规则层裁决,冲突按来源可信度和时间裁决,保留变更历史。”

“避免上下文爆炸靠预算分配和按需检索。给对话历史、检索知识、长期记忆分预算,长期记忆虽然分得少但信息密度高。排序不只看相似度,还要乘置信度和时间衰减。排名后去重。”

“我们实际用 SQLite 存长期记忆,情景记忆用向量 + 时间/主体过滤,需要关系时加图。写入走规则闸门,每周人工抽查。”

加分点

  • 提到 长期记忆不要用向量、按 key 查、写入闸门。
  • 提到 情景记忆向量+图组合、按事件切分、元数据过滤。
  • 提到 记忆污染、冲突裁决、变更历史。
  • 提到 预算分配、按需检索、多维排序、去重。
  • 提到 Critic 裁决、置信度。
  • 结合真实记忆系统设计经验。

减分点

  • 只说“短期上下文,长期向量库”。
  • 不知道长期记忆用向量的问题。
  • 不知道记忆污染是什么。
  • 只说“压缩上下文”避免爆炸。
  • 分不清短期和工作记忆。

📌 面试天下网:一款服务于大一新生的口袋书,让大家在无聊的公共课上可以学习大模型技术!
📌 网站公告:【悬赏 200 元/篇】寻找“大模型面试战场”的一手回忆录
📌 网站公告:【大模型/Agent面试陪练1V1指导】正式启动......

评论专区

评论加载中...