标准回答
记忆压缩的目标是在有限 token 预算内保留对完成任务最有用的信息,常见方法可分为几类。
滑动窗口与截断
只保留最近 N 轮对话或最近若干 token,超出部分直接丢弃。实现最简单、延迟最低,但会硬性丢失早期信息,适合上下文依赖弱的闲聊或短任务。
摘要式压缩(Summary Memory)
用 LLM 对历史做滚动总结:每当历史增长到阈值,就把旧消息压成一段摘要,新对话继续追加,再次超限时把摘要与新内容一起重新总结。能在小 token 占用下保留长期脉络,代价是摘要会丢细节、且每次总结要额外调用一次模型。
按重要性筛选与淘汰
给每条记忆打分(重要性、时间新近度、被引用频率),用 LRU 或打分排序淘汰低价值记忆。比单纯截断更聪明,能留住关键事实,但打分策略本身需要调优。
向量化外部记忆 + 按需检索
把历史写入向量库,当前轮只检索与 query 相关的 top-K 片段注入 prompt,而非携带全量历史。这是相对「无损」的方案,可支撑超长记忆,但引入检索系统与额外延迟、成本,且召回不准会漏信息。
实体/事实抽取存结构化记忆
从对话中抽取关键实体、属性、偏好等存为结构化条目(如 key-value 或图)。压缩比高、可精确更新与去重,适合存用户画像类长期事实,但抽取本身可能出错。
分层记忆与 token 预算管理
组合上述方法:短期记忆保留近期原文细节,长期记忆只存摘要或结构化事实,并为每一层分配 token 预算,按预算动态决定保留多少原文、注入多少检索结果。这是工程中最常用的综合方案。
常见误区
⚠️ 常见踩坑
把记忆压缩简单等同于「截断旧消息」——直接截断会丢掉早期的关键约束或用户偏好,导致 Agent 前后行为不一致;正确做法是先做重要性判断或摘要,把关键信息以更省 token 的形式留下,而不是无差别删除。
追问
追问 1:滚动摘要会越压越失真,如何缓解?
不要只保留摘要:采用「分层 + 锚点」策略,长期层存摘要、同时把关键事实抽取成结构化条目单独留存,避免反复总结导致细节流失。也可对重要原文片段做向量化外部存储,需要时检索回原文核对,让摘要只承担索引和脉络作用,而非唯一信息源。
追问 2:怎么判断一条记忆是否「重要」?
常用多因子打分:语义上与当前任务/目标的相关度、信息的稀有度(用户明确给出的约束、偏好、决定通常高分)、时间新近度(加时间衰减)、以及被后续引用的频率。可让 LLM 直接对每条记忆打重要性分,或用规则给特定类型(如用户身份、硬性约束)加权,再按总分排序保留或淘汰。
追问 3:压缩后如何评估信息损失是否可接受?
构造一组依赖长期历史才能答对的探针问题(如「我之前说的预算是多少」),对比压缩前后 Agent 的回答准确率;同时监控任务成功率、用户重复澄清的频率等线上指标。若关键约束类问题答错率上升,说明压缩过激,应提高重要信息的保留预算或改用检索方案。
🔗 相似问题
同一考点的不同问法,面试官可能换着问,一起刷更稳
没找到想看的面试题?把你想看的告诉我们 →
延伸学习
按主题分类的相关资源,便于系统复习