简介:缓冲记忆实现最简单,但成本、延迟与“中间信息丢失”问题会随对话变长持续放大。本文系统对比缓冲、滑动窗口、摘要、混合、实体、向量检索与跨会话持久七种记忆模式的核心差异,给出典型场景匹配与条件化选型建议,帮你为 LLM 应用找到合适的记忆方案,并提示迁移注意事项。
大语言模型本身是无状态的:每次调用只处理当前输入的上下文,不会“记得”上一轮说了什么。所谓“记忆”,本质上是应用层把历史对话以某种方式组织后重新注入上下文的工程手段。而“怎么组织”,直接决定了应用的成本结构、响应延迟、回答准确性与用户长期体验。
多数团队的第一反应是把全部历史原样塞进上下文——也就是缓冲记忆。它的确最简单,但当对话变长,三类问题会集中爆发:
此外,缓冲记忆是会话级的:用户刷新页面或换设备,记忆即清零。
可以做一个示意性成本测算(数字为纯假设,仅用于说明趋势):假设每轮对话平均 100 token、模型输入单价为 0.01 美元/千 token:
用户量放大后,这笔“看不见的输入账单”会成比例放大,且尚未计入输出与延迟成本。正因如此,本文将对业界最常用的七种记忆模式做系统对比,帮你判断“哪一种(或哪几种的组合)适合自己的业务”。
七种模式可以按“信息如何被压缩与检索”排成一条从简到繁的谱系。
1. 缓冲记忆(Buffer Memory)
原理:保存全部历史,每轮全量注入上下文。
优点:信息无损、实现近乎零成本、任何模型都兼容。
缺点:token 成本随轮数增长、长对话变慢、易溢出、无跨会话能力。
适合:一次性短对话(约 5 轮以内)、调试与开发环境、精度要求极高且成本不敏感的场景。
2. 滑动窗口记忆(Buffer Window Memory)
原理:只保留最近 K 轮,更早的直接丢弃。
优点:注入 token 上限恒定,成本与延迟可控、实现简单。
缺点:窗口外信息硬丢失,K 的取值缺少理论依据;模型对“突然失忆”造成的上下文断裂没有感知。
适合:闲聊、轻量问答等对早期历史依赖弱的场景。
3. 摘要记忆(Summary Memory)
原理:用模型把已有对话滚动压缩成一段摘要,每轮注入摘要而非原始历史。
优点:注入 token 近似恒定,保留长程语义。
缺点:压缩有损且可能引入幻觉;摘要质量依赖模型能力;每轮多一次压缩调用,增加延迟与成本。
适合:超长对话、会议纪要类助手等“要大意不要细节”的场景。
4. 混合记忆(Summary Buffer Memory)
原理:近期对话保留原文,较早部分压缩为摘要,两者拼接注入。
优点:在“近期精确”与“远期语义”之间取得平衡,是长会话的常见折中方案。
缺点:实现复杂度上升,摘要与原文的边界管理需要额外逻辑。
适合:客服、陪护式助手等多轮长会话。
5. 实体记忆(Entity Memory)
原理:从对话中抽取实体及其属性、关系,以结构化形式(键值或图谱)保存并注入。
优点:对“用户是谁、偏好什么、涉及哪些对象”这类事实型信息保留精确、可解释、可人工编辑。
缺点:抽取依赖额外模型调用;非实体类信息(语气、氛围)会丢失;图谱构建复杂度较高。
适合:个人助理、客户画像追踪等需要精确记忆事实的场景。
6. 向量检索记忆(Vector Store Memory)
原理:把每轮对话向量化后存入向量库,每轮按当前问题检索最相关的若干条历史注入。
优点:注入成本与对话总长解耦,理论上可支撑无限长历史;按需取用,信息密度高。
缺点:引入向量库组件与检索链路;召回质量受向量表示与切分策略影响,可能“该记的没检索到”;语义相近但事实不同的内容容易混淆。
适合:跨主题长程对话、知识密集型助手。
7. 跨会话持久记忆(Persistent / Long-term Memory)
原理:把记忆从“当前会话”提升为“用户级资产”。通常组合上述模式:会话内用窗口或摘要,会话结束后沉淀用户画像、偏好、关键事实到存储,下次会话开场再注入。
优点:唯一具备跨设备、跨会话连续性的模式,是长期产品体验的基础。
缺点:架构最复杂,涉及记忆的存储、检索、更新、遗忘全生命周期;需要处理新旧记忆冲突与数据合规。
适合:陪伴类产品、个人助理等以“长期记住用户”为核心价值的场景。
七种模式并非互斥的“七选一”,它们共享同一个问题域:
正因为相同点足够多,它们才可以组合使用,而不是非此即彼。
信息保留机制:缓冲是无损全量;窗口是硬截断;摘要是语义级有损压缩;实体是结构化抽取;向量检索是按相关性选择性召回;持久记忆是会话外的沉淀与回注。丢失方式不同,决定了各自的风险面——窗口丢“细节”,摘要丢“精确性”,检索丢“未命中的信息”。
成本结构:缓冲的输入成本随轮数线性增长;窗口近似恒定;摘要恒定但每轮多一次压缩调用;实体与向量检索增加离线处理成本,但线上注入恒定;持久记忆的存储成本随用户量增长。选型时要区分“一次性成本”与“边际成本”。
性能与延迟:窗口、摘要、检索类模式把注入 token 控制在常数级,规避了长上下文的平方级注意力开销;但摘要与检索各自引入额外调用(压缩调用、向量检索),延迟结构从“单次大上下文”变成“检索/压缩 + 中等上下文”。
实现与运维复杂度:缓冲与窗口几乎零依赖;摘要需要可靠的压缩调用链路;实体与向量检索需要抽取、向量化管道与相应存储组件,自建或使用云厂商(如百度智能云)提供的向量数据库、对象存储等通用托管能力可降低运维负担;持久记忆还需要数据模型设计与生命周期管理。复杂度上升意味着故障面扩大:检索超时、摘要失败、存储不可用都需要降级路径。
准确性与可解释性:缓冲与窗口行为完全可预测;摘要可能引入幻觉;实体记忆可解释、可修正;向量检索的效果依赖召回质量,排查“为什么忘了”的成本更高。
跨会话能力:只有持久记忆天然具备,其余模式都活在当前会话里。如果产品要求“换设备还记得”,只有第 7 种可选,且通常需要实体或向量检索作为支撑。
| 模式 | 信息保留 | token 成本 | 延迟 | 实现复杂度 | 跨会话 | 主要风险 |
|---|---|---|---|---|---|---|
| 缓冲记忆 | 无损全量 | 随轮数线性增长 | 随长度恶化 | 极低 | 无 | 溢出、成本爆炸 |
| 滑动窗口 | 近 K 轮无损 | 恒定 | 稳定 | 低 | 无 | 窗口外硬丢失 |
| 摘要记忆 | 语义级有损 | 近似恒定 | 增加压缩调用 | 中 | 无 | 幻觉、细节失真 |
| 混合记忆 | 近期无损+远期摘要 | 受控 | 稳定 | 中 | 无 | 边界逻辑复杂 |
| 实体记忆 | 结构化事实 | 低 | 增加抽取调用 | 中高 | 需配合持久化 | 抽取误差 |
| 向量检索 | 按需召回 | 与总长解耦 | 增加检索延迟 | 中高 | 可支持 | 召回漏失 |
| 持久记忆 | 用户级沉淀 | 存储型成本 | 复合 | 高 | 原生支持 | 记忆冲突与合规 |
混合记忆的示意伪代码骨架:
def build_context(history, k=6):recent = history[-k:] # 近期保留原文old = history[:-k]summary = summarize(old) if old else "" # 远期滚动摘要return ([summary] + recent) if summary else recent
不存在“最优记忆模式”,只有“与对话长度分布、信息密度、成本预算、团队能力相匹配的模式”。
七种记忆模式的差异,本质是“历史信息以什么形态、什么成本进入上下文”的差异:缓冲全量进、窗口截断进、摘要压缩进、实体结构化进、检索按需进、持久跨会话进。选型的决策链也很清晰:先问对话有多长,再问要记什么(细节、语义还是事实),然后评估成本预算与团队能力,最后决定是否需要跨会话。多数真实系统最终是组合形态——会话内混合、会话间沉淀,而缓冲记忆则退回它最擅长的位置:短对话与调试对照。