记忆与状态:会话内记忆、外部记忆与状态注入

进阶03-上下文组织与窗口管理⏱ 30 分钟已审校
学习进度:

一句话定义

模型自身没有记忆——所谓"记忆"都是把状态在合适的时机重新注入上下文:会话内靠历史与压缩,跨会话靠外部存储按需取回。

为什么重要

"它刚才还说过的"是用户最常见的抱怨,根因是工程师把记忆当成了模型能力而不是系统设计。分清三层记忆(会话内/跨会话/参数化知识)并掌握状态注入的时机与格式,是客服、助手类产品的核心架构问题。本知识点给出不依赖框架的记忆设计方法,框架选型属于跨站主题。

前置知识

直观类比

医生看病历:诊室里问你今天哪里不舒服(本轮输入),桌上摊着本次就诊记录(工作状态),档案柜里有你的历年病史(长期记忆,按需调阅)——医生不是"记得"你,是"查得到"你;查不到就问,而不是编。

图示

            ┌─ 会话内:历史轮次(超预算 → [[kp-015]] 压缩)
记忆系统    ├─ 工作状态:<state> 键值区,程序维护,每轮常驻注入
            └─ 跨会话:外部存储 --(按判据写入 / 按相关度取回)--> <memory> 区注入
每轮上下文 = [rules][state][memory][近期历史][user_input]

核心概念

  • 会话内记忆(Short-term):当前对话历史本身。上下文还在,记忆就在;被压缩或截断就丢。
  • 跨会话记忆(Long-term):存在外部存储(数据库/文件)的用户画像、偏好、历史结论,按相关度取回注入。
  • 工作状态(Working State):任务进行中的结构化事实(购物车、表单进度、已确认参数),程序维护、每轮注入。
  • 状态注入:把上述记忆以固定分区(<memory>/<state>)放回上下文的动作。
  • 记忆写入判据:决定"什么值得存进长期记忆"的显式标准(用户明确陈述的偏好、稳定属性),防止记一堆闲聊噪声。

原理与机制

三条机制性原则:

  1. 显式优于隐式:靠"模型会记得"不如靠"每轮都注入";关键状态每轮出现在 <state> 区,不依赖注意力在长历史中翻找(注意力衰减与"迷失在中间"(Lost in the Middle));
  2. 结构化优于叙事:状态区用键值对/JSON 而不是段落描述——机器可维护、模型可精读、摘要不掉字;
  3. 写入需要判据与时机:长期记忆应在对话中显式抽取("用户表示:对花生过敏"→ 写入偏好表),写入前过判据(稳定?可复用?用户知情?),并给用户可见的记忆管理入口(伦理与合规要求,见 内容边界、越狱与数据卫生)。

状态注入的时机:每轮固定注入(状态区常驻)优于按需注入——检索式记忆(按相关度取回)适合大体量长期记忆,但引入"该想起没想起"的检索失败模式(那是 RAG 侧议题;本库负责取回后的呈现,遵循 信息放置策略:指令、知识、数据的排布 排布原则)。

公式或模型

本节不适用——记忆是系统设计问题;记忆质量用探针问题集测试("压缩/隔天后,模型是否仍记得 X")。

实例或案例

案例:跨会话偏好的最小实现。 需求:助手记住"用户偏好简洁回复"。操作步骤:① 对话中检测到偏好陈述时,用抽取提示转为结构化记录 {key: "回复风格", value: "简洁", source: "用户明示"};② 写入存储前过判据(稳定、可复用、用户知情);③ 下次会话拼装时注入 <memory> 区并附来源日期;④ 提供记忆查看/删除入口。状态区模板:

<state>
用户目标:退回订单 A10293
已确认:签收 3 天,商品完好
已承诺:全额退款(客服,第3轮)
待办:等待用户确认退款方式
</state>

排错清单:

  • 症状:模型"记错"了用户没说过的事 → 长期记忆里混入了推断/闲聊,收紧写入判据并标注来源;
  • 症状:同一偏好被反复确认 → 写入成功了但注入失败(<memory> 区没拼上),检查模板;
  • 症状:状态区与历史原文冲突(旧轮说"要加急"状态区已改"普通")→ 在提示中声明"<state> 为准,历史冲突内容以状态区覆盖"。

常见误区

  • 把会话历史当长期记忆:窗口一满就丢;跨会话必须外置;
  • 记忆无限写入:不设判据的记忆库很快变噪声源,还会放大隐私风险;
  • 注入了但没声明权威级:不注明"<state> 为准",历史与新状态冲突时模型行为随机。

自测题

  1. 为什么关键状态要每轮注入而不是信任历史?

答:历史会被压缩/沉底,注意力检索不可靠;常驻状态区保证关键事实始终在注意力可达范围。

  1. 写入长期记忆的三条判据?

答:稳定性(不随场景翻转)、可复用性(未来会用到)、用户知情(明示或可查看删除)。

  1. 状态区与历史冲突怎么办?

答:声明状态区权威级覆盖历史;程序侧保证状态区是唯一被维护的"真相源"。

与其他知识点的关系

上下文压缩:摘要、滚动与层级 是会话内记忆的执行层;场景案例集:客服、写作与代码助手 场景案例大量运用状态注入;记忆内容的隐私与删除权见 内容边界、越狱与数据卫生;取回记忆的排布遵循 信息放置策略:指令、知识、数据的排布。

延伸阅读

  • 综述:The Prompt Report(Schulhoff et al., 2024)——上下文管理与记忆结构的归类框架。

来源

  • The Prompt Report: A Systematic Survey of Prompting Techniques (Schulhoff et al.
  • 2024)