LLM 记忆分层架构:解决多轮对话体验断裂的工程实践

上下文窗口有限,是 LLM 落地最大的产品体验障碍之一。 这篇文章完整记录我们如何设计短期 / 长期 / 画像三层记忆架构, 让用户在长对话中感知不到窗口切换的存在——包括技术方案、产品决策取舍,以及实际落地时踩过的坑。

问题从哪里来

在我们开始构建 AI 智能问答系统的时候,遇到了一个很典型的产品问题: 当用户在一个客服会话里聊了二十几轮之后,AI 突然"失忆"了—— 它不知道用户刚才说过自己是会员,不知道对话刚才讨论的是哪个订单。

用户的反馈很直接:"你为什么不记得我刚才说的话?"

这是 LLM 的上下文窗口限制导致的。当前主流模型的上下文窗口在 8K 到 128K token 不等,一旦对话超出窗口,最早的内容就会被截断丢弃。 对于企业级 AI 客服场景,这是一个无法接受的体验问题。

产品层面的核心问题不是"怎么扩大上下文窗口",而是"怎么让用户感知不到窗口的存在"。

三层记忆架构的设计思路

我们借鉴了人类记忆的分层结构,设计了 L1 短期会话 / L2 长期向量记忆 / L3 用户画像 三层架构。 每一层解决不同时间维度的"记忆"问题。

三层记忆架构示意
L1
短期会话记忆(Session Buffer)
当前对话的最近 N 轮 · 直接注入 Context · 毫秒级访问
↓ 窗口满时自动摘要压缩
L2
长期向量记忆(Vector Memory)
历史对话摘要向量化存储 · 语义检索召回 · SQL Server 向量类型
↓ 每次对话结束后异步写入
L3
用户画像(User Profile)
用户偏好 · 身份信息 · 高频问题类型 · 每轮对话增量更新

L1:短期会话记忆

L1 是最直接的层,就是把最近 N 轮对话直接放进 LLM 的 Context 里。 这里的关键决策是 N 取多少

太少(比如 5 轮):用户感觉 AI 健忘;太多(比如 50 轮):Context 很快被填满,而且很多内容是无效的填充。 我们最终选择了 最近 12 轮,配合 token 数量上限双重控制——无论哪个先触发,都触发压缩流程。

💡 工程细节
窗口满时,我们不是简单截断,而是调用一个轻量的摘要 LLM 对最早的 6 轮进行压缩, 生成一段 200 token 以内的摘要,替换原始内容写回 Context。这样历史信息不会完全丢失。

L2:长期向量记忆

当一个用户今天问了关于退款的问题,三天后又来问,AI 应该能感知到这是同一个人的同一个问题链。 L2 解决的是跨会话的记忆问题。

实现上,我们在每次对话结束后(异步,不阻塞主流程), 将对话摘要通过 bge-m3 模型 Embedding 成向量, 存入 SQL Server 2025 的原生向量类型(我们刻意避开了引入独立向量数据库的运维复杂度)。

检索时,用用户当前输入的向量做语义检索,召回最相关的历史记忆片段, 作为额外上下文注入 L1 的 Context 里。

L3:用户画像

L3 是最"产品感"的一层。我们维护了一个结构化的用户画像:

  • 身份信息:会员等级、注册时长、历史消费
  • 偏好信息:惯用语言风格(正式 / 口语)、关注的产品品类
  • 问题类型分布:这个用户历史上 80% 的问题都是关于物流的

L3 的数据在每轮对话结束后增量更新,并在每次对话开始时以结构化 Prompt 的形式注入 Context 的系统提示区。 这让 AI 从第一句话就能"认识"这个用户。

几个关键的产品决策

1. 用户感知不到窗口切换是核心设计目标

所有技术方案都服务于这一个产品目标。衡量方式很简单: 在 UAT 测试中,让测试人员聊 30 轮以上,看他们能不能感知到"AI 重置了"。 达标标准是:100 个测试用例中,感知到断裂的不超过 5 个。

2. 压缩摘要的质量是瓶颈

L1 → L2 的压缩摘要质量直接影响长期记忆的可用性。 我们花了大量时间在摘要 Prompt 的调优上,最终确定了一套 强制保留关键实体(订单号、问题类型、未解决事项) 的摘要格式。

3. 多租户数据隔离不能妥协

我们的系统服务多个企业客户,每个企业的用户记忆数据必须严格隔离。 在 L2 和 L3 的存储层,我们实现了 JWT + 行级数据隔离, 确保一个租户的 AI 绝对无法访问另一个租户的记忆数据。

落地结果

上线后我们监控了三个核心指标:

  • 会员自助解决率:65%——上线前这个数字接近 0(全人工)
  • 客服工单量降低 30%——高频简单问题被 AI 消化,人工客服可以专注复杂案例
  • 用户满意度(点赞率):87%——多轮对话体验的满意度是关键驱动因素
📝 一点反思
三层记忆架构解决了"记忆"问题,但带来了新的复杂度:如何保证摘要的准确性、 如何处理用户画像的"遗忘"(避免过时信息污染)、如何控制向量检索的召回精度…… 这些是下一阶段需要继续优化的方向。AI 产品没有"完成"的时候,只有当前版本。

总结

LLM 记忆问题的本质是一个产品体验问题,而不仅仅是技术问题。 技术上有很多方案,但哪个方案最终被选择,取决于产品目标—— 我们要的是"用户感知不到窗口切换",而不是"上下文窗口最大化"。

三层记忆架构是在当前约束下(成本、运维复杂度、团队能力)达到产品目标的最优解。 如果你在构建类似的系统,希望这篇文章对你有参考价值。

欢迎通过邮件和我交流:shaoyanyan91@163.com


本文首发于邵炎炎个人博客。转载请注明出处。