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 · 场景切入
假设你在做一个电商客服Agent,用户从上周就开始咨询退货,中间断断续续聊了十几轮,今天又来说订单的事。Agent怎么记住之前的退货进度和用户说过的理由?上下文窗口肯定塞不下,你怎么设计记忆机制?
- 问法 2 · 层层追问
Agent处理长对话时你一般怎么管历史?……如果对话持续了上千轮,上下文窗口放不下怎么办?……那你怎么保证不丢关键信息,同时还能快速找到相关的历史?
- 问法 3 · 直球架构
给AI Agent设计一个支持超长历史(比如数千轮对话)的记忆管理系统,要分层存储、有摘要生成和检索策略。你怎么分几层?各层用什么存储?检索时怎么混合召回?更新和过期怎么处理?