跳到正文

Agent记忆分层:摘要与检索协同

Agent 场景下摘要生成、检索与更新机制的协同设计

原题:当AI Agent需要处理超长历史记忆(如数千轮对话或跨天任务上下文)时,受限于大模型的上下文窗口长度和推理效率,应如何设计高效、可扩展的记忆管理机制?请结合实际场景,系统阐述记忆的分层存储、摘要生成、检索策略、更新与刷新机制,并说明各组件的协同方式与权衡考量。

Agent · 高德真题

回答与解析

核心架构:三层记忆体系

工作记忆(Working Memory) → 短期记忆(Short-term) → 长期记忆(Long-term)
   (当前对话窗口)        (小时-天级)           (永久存储)
      20-100轮            摘要+关键事件          向量库+结构化存储

各层设计要点

1. 工作记忆(热数据)

  • 保留原始对话的最近N轮(如50轮)
  • 直接注入prompt,保证即时连贯性
  • 触发条件:token数>阈值或对话轮数>上限时,触发下沉

2. 短期记忆(温数据)

  • 增量摘要:每K轮用轻量模型生成"发生了什么+用户意图变化"
  • 关键事件提取:识别决策点、用户确认、任务状态变更
  • 存储格式:[(timestamp, summary, entities, importance_score)]

3. 长期记忆(冷数据)

  • 向量数据库:对话片段embedding + 元数据(时间、主题、情绪)
  • 结构化存储:用户画像、偏好、历史任务结果(如SQL/图数据库)

检索策略:混合召回

场景 策略 实现
即时上下文 工作记忆直接读取 最近N轮
近期相关 短期记忆语义匹配 摘要向量Top-K
远期细节 长期记忆多路召回 向量相似度 + 时间衰减 + 关键词过滤

关键技巧:检索时拼接[当前query + 近期摘要]作为查询,提升相关性


更新与刷新机制

  • 被动压缩:工作记忆满时,最旧内容→生成摘要→下沉
  • 主动摘要:检测到任务完成/话题切换时,立即生成章节摘要
  • TTL+重要性:短期记忆设置7天过期,但高重要性事件(如用户投诉)标记永久保留
  • 冲突解决:新摘要与旧记忆冲突时,保留时间戳最新的,或触发澄清对话

高德场景的特殊考量

导航/出行Agent的典型场景:

  • 跨天行程:用户周一规划周末路线,周三继续询问——需保留"规划中"状态
  • 地点偏好:长期记忆重点存储"家/公司/常去地点"的POI关联
  • 实时性权衡:交通状况不存长期记忆,只存"用户偏好避开高速"这类规则

成本权衡:摘要用7B模型,主推理用70B;向量检索用HNSW索引,召回 latency <50ms

学习建议

建议从RAG和Agent架构基础入手,理解向量检索、摘要模型和分层记忆设计模式,结合论文与开源项目(如MemGPT)实践核心流程。

口语版讲法(约4分钟)

  • 本质是记忆分层与检索的权衡
  • 三层记忆:工作/短期/长期
  • 混合检索策略,用近期摘要辅助查询
  • 更新机制:被动压缩+主动摘要+TTL+冲突解决
  • 落地风险:成本、延迟、一致性

这道题其实问的是,当对话历史长到几千轮甚至跨天的时候,怎么让Agent既记得住又反应快。核心矛盾就是大模型窗口有限,推理成本也高,所以不能一股脑全塞进去。我的思路是用分层记忆加混合检索来解耦合。

先说记忆分层。我分成三层:工作记忆、短期记忆和长期记忆。工作记忆就是最近几十轮对话,直接塞进prompt,保证即时连贯性。但满了就得下沉,触发条件可以是token数超阈值或者轮数到上限。下沉到短期记忆,这里我会做两件事:一是增量摘要,每K轮用轻量模型总结发生了什么和用户意图变化;二是提取关键事件,比如决策点、用户确认、任务状态变更。存储格式是带时间戳、摘要、实体和重要性分数。长期记忆就存到向量库里,对话片段做embedding,加上元数据比如时间、主题、情绪。另外用户画像、偏好这些结构化数据我会丢到SQL或图数据库里。

检索策略是混合召回。工作记忆直接读最近N轮;短期记忆做语义匹配,把摘要向量化取Top-K;长期记忆多路召回,结合向量相似度、时间衰减和关键词过滤。这里有个技巧:检索时把当前query和近期摘要拼接起来作为查询向量,能显著提升相关性。

更新和刷新机制分几种情况。被动压缩就是工作记忆满时,最旧的内容生成摘要下沉。主动摘要在检测到任务完成或话题切换时立即做,生成章节摘要。短期记忆我设TTL比如7天,但高重要性事件比如用户投诉会标记永久保留。冲突解决很简单,新摘要和旧记忆冲突时,保留时间戳最新的,或者触发澄清对话让用户确认。

举个例子,导航Agent。用户周一规划周末路线,周三继续问,短期记忆里要保留‘规划中’这个状态。长期记忆重点存家、公司、常去地点的POI关联。但实时交通状况不存长期记忆,只存‘用户偏好避开高速’这类规则。

落地风险我得特别提一下。首先是成本权衡,摘要用7B模型,主推理用70B,向量检索用HNSW索引,召回延迟要控制在50毫秒以内。如果不满足这个延迟,用户会感觉卡顿。另一个坑是短期记忆TTL设太短,高重要性事件丢了,所以上线前我会重点检查重要性打分逻辑。

另外我还想提一个延伸点:当记忆里包含图片、语音等多模态信息时,怎么统一管理?比如用户发了一张截图问‘这个路况怎么样’,单纯文本摘要会丢信息。我的想法是给多模态内容也生成文本描述存到短期记忆里,但这样会引入Hallucination风险,描述不准反而误导Agent。这个平衡挺难拿捏的。

所以整体上,我更倾向把记忆管理看作一个分层过滤加动态权衡的系统,而不是一个静态的存储方案。核心就是根据场景选对策略,并且随时监控延迟和召回质量做调整。

关键一句:多模态内容(如图片)如何融入记忆管理,文本描述会引入幻觉风险。

面试官还可能这样问

  1. 问法 1 · 场景切入

    假设你在做一个电商客服Agent,用户从上周就开始咨询退货,中间断断续续聊了十几轮,今天又来说订单的事。Agent怎么记住之前的退货进度和用户说过的理由?上下文窗口肯定塞不下,你怎么设计记忆机制?

  2. 问法 2 · 层层追问

    Agent处理长对话时你一般怎么管历史?……如果对话持续了上千轮,上下文窗口放不下怎么办?……那你怎么保证不丢关键信息,同时还能快速找到相关的历史?

  3. 问法 3 · 直球架构

    给AI Agent设计一个支持超长历史(比如数千轮对话)的记忆管理系统,要分层存储、有摘要生成和检索策略。你怎么分几层?各层用什么存储?检索时怎么混合召回?更新和过期怎么处理?

同模块相关题目