← 返回

知识库工程(二):LLM 的记忆从哪里来

系列导航:1 | 2 | 3 | 4

“模型记住了”可能指六件不同的事:训练数据进入参数,当前消息仍在上下文中,推理服务保留了 KV Cache,应用保存了聊天记录,检索器找回一条旧资料,或者 Agent 把经历写进长期存储。这些机制的寿命、容量、成本和风险完全不同。

把它们统称为记忆,会产生常见误判。清空聊天窗口不一定删除服务端保存的摘要,KV Cache 命中也不表示模型拥有长期记忆,向量库召回一段旧对话更不代表这段内容仍然有效。知识库工程先要确定信息存在哪一层,再决定如何写入和遗忘。

参数记忆保存训练中压缩出的规律

预训练通过梯度下降调整模型参数,使下一个 token 的概率分布更接近训练文本。事实、语言规律和推理模式被分散编码在大量权重中,无法按数据库记录逐条定位。模型能够回答某个事实,不等于内部存在一行可直接读取的键值记录。

参数记忆容量大,推理时无需外部查询,更新却很重。继续预训练、监督微调或参数高效微调都可能引入新知识,也可能损伤已有能力。训练语料中的时间边界、冲突信息和错误内容会一起影响参数。需要频繁更新、删除或审计的企业资料不适合只靠参数保存。

上下文窗口是一次推理的工作区

Transformer 使用注意力让当前位置读取上下文中的其他 token。缩放点积注意力写作:

$$ \operatorname{Attention}(Q,K,V)=\operatorname{softmax}\left(\frac{QK^\mathsf{T}}{\sqrt{d_k}}\right)V $$

系统提示词、用户问题、历史消息、检索片段和工具结果都要占用上下文。它们在一次请求中可见,超出窗口后必须截断、摘要或移到外部存储。上下文属于显式输入,修改后无需训练;其缺点是每次读取都会消耗 token 和计算资源。

窗口长度也不能直接换算成有效记忆容量。重复资料会稀释注意力,冲突版本会让模型难以选择,关键证据所在位置会影响结果。Lost in the Middle 说明长上下文模型对中部信息的利用并不稳定。上下文管理需要排序、去重和预算,不能只执行拼接。

KV Cache 是计算缓存

自回归生成每个新 token 时,历史 token 的 Key 和 Value 可以复用。推理服务把它们保存在 KV Cache 中,避免每一步重新计算完整前缀。以普通多头注意力作近似,单个请求的缓存规模与层数 $L$、序列长度 $T$、隐藏维度 $H$ 和数据字节数 $B$ 成正比:

$$ M_{KV}\approx 2LTHB $$

系数 2 对应 Key 与 Value。分组查询注意力、量化和分页缓存会改变实际占用。KV Cache 保存的是模型计算产生的张量,通常随请求结束、实例回收或缓存淘汰而消失。它不负责判断某条信息是否值得长期保存,也不提供按事实更新、权限过滤和来源追踪。

提示词前缀缓存也属于成本优化。多个请求共享相同前缀时,服务端可以复用计算结果;前缀内容仍要通过应用规则进入请求。把缓存命中率称为“记忆能力”会混淆性能与知识管理。

会话历史和摘要由应用保存

多轮对话常把近期若干条消息原样放入上下文,较早内容压缩成摘要。原始记录有较好的可追溯性,但 token 占用持续增长。摘要控制了长度,也会丢失限定条件、否定词和时间信息。若摘要由模型生成,错误概括还会在后续轮次反复被引用。

稳定做法是分开保存原始事件与派生摘要。摘要带上覆盖的消息区间、生成模型、模板版本和时间;用户更正信息后,旧摘要进入失效状态并重新生成。金额、日期、权限和明确偏好等字段可用结构化状态保存,不必全部压缩成自然语言。

flowchart TD A[当前输入] --> B[上下文工作区] C[近期消息] --> B D[会话摘要] --> B E[知识库与长期记忆] --> F[检索与权限过滤] F --> B B --> G[LLM 生成] G --> H{需要长期保存?} H -->|通过规则| E H -->|无需保存| I[仅保留会话事件]

长期记忆需要写入策略

外部存储可以借用认知科学中的分类,但实现仍是工程系统。语义记忆保存相对稳定的事实与概念,例如项目采用的数据库;情景记忆保存带时间和上下文的经历,例如某次升级失败及处理结果;程序性记忆保存执行任务的方法,常体现为工作流、工具说明或技能文件。

一条消息不能因为出现过就自动成为长期记忆。写入前至少检查主体、时间、来源、置信度、敏感级别和有效期。用户说“这次临时用测试库”与“以后都用测试库”有不同寿命。模型从对话中推断出的偏好应标记为推断,不能覆盖用户明确陈述。

检索长期记忆时,可以组合语义相关度、时间衰减和业务重要度:

$$ S(m,q)=\alpha\cos(E_m(m),E_q(q))+\beta R(m)+\gamma I(m) $$

$R(m)$ 表示时间或访问频率,$I(m)$ 表示经规则约束的重要度。系数需要通过真实任务评测,不能照搬固定值。身份、租户和会话范围应先过滤,再计算相似度,避免先召回越权内容后再遮盖。

记忆系统还要会更新和遗忘

向量库中的旧记录不会自行过期。同一事实反复写入会产生近似副本,新旧状态可能同时被召回。写入链路需要实体标识、时间区间和版本关系。新信息可以追加为事件,再由合并任务生成当前视图;用户更正应保留变更轨迹,同时让旧值退出默认检索范围。

遗忘至少包含四种动作:按期限过期、按用户请求删除、按来源撤销、对重复内容合并。删除向量只是其中一步,原文、关键词索引、摘要、缓存和备份都有各自的清理周期。受法规或审计要求约束的记录,还要区分“不可再用于回答”和“必须保留审计凭证”。

MemGPT 提出的虚拟上下文管理把有限上下文视为快速层,把外部存储视为容量更大的慢速层,通过数据移动扩展长对话。Generative Agents 则保存经历、按相关性等信号检索,并生成更高层的反思用于规划。两项工作都指出一个关键点:长期记忆依赖外部状态管理,LLM 本身只参与抽取、选择、归纳或使用。

从知识库到个人记忆还差一层治理

文档知识库通常由管理员或数据源提供,内容边界明确;个人记忆来自对话和行为,可能包含隐私、误解与短期情绪。两者可以共用检索技术,不能共用默认写入规则。个人记忆应允许查看、更正、删除和关闭,并把用途限制在用户授权的范围内。

设计记忆时可以依次追问:谁写入,依据是什么,保存多久,谁能读取,冲突如何解决,删除覆盖哪些副本。只要其中一项无法回答,这条“记忆”就还不具备进入长期上下文的条件。

参考资料