本地 LLM 能继续对话,因为运行时保持了激活上下文可用,也因为 KV Cache 让模型复用已经做过的计算工作。
听起来像记忆,但这和学到的知识、数据库、或长期个人记忆不是同一回事。
#四个概念一次拆清
#Context(上下文)
模型在生成 token 时能看到的所有信息。包括:
- System prompt
- User messages
- Assistant responses
- 任何通过 API 传入的内容
这是模型「看到」的东西,但每次请求都是独立的,不跨 session 保留。
#Chat History(聊天历史)
你在 UI 里看到的对话记录。它保存在应用层,不在模型层。每次对话,你的消息和 AI 的回复都被存储起来,下次请求时重新发送给模型。
模型「记起」对话,是因为你在每次请求时把历史消息重新发给它,而不是模型真的记住了。
#KV Cache(键值缓存)
这是模型内部的技术实现。
当模型处理一个序列时,它需要计算每个 token 的 Key 和 Value 向量。KV Cache 保存这些计算结果,这样下次生成 token 时不需要重新计算之前所有 token 的 K 和 V。
作用:加速生成 ——但它是模型内部的一次性计算副产品,不是存储机制。
#Long-term Memory(长期记忆)
模型权重中编码的知识。这是预训练时学到的,在模型的生命周期内保持固定。
不包括你上周告诉它的任何事情,不包括你的偏好,不包括你上传的文档(除非你把它放到当前请求的上下文中)。
#为什么本地 LLM 能「继续」对话
一个常见的初级解释:
「模型记住了我说的。」
这方向上是有用的,但技术上是粗糙的。
模型本身不是在改权重。不是在永久学习你的偏好。不是在把消息加到内部知识里。
相反,运行时把你的之前的 tokens 保存在激活 session 中,模型在生成下一个 token 时可以 attend 到这些 tokens。
那个激活 session 是临时的。
#关键区别
正常推理时,模型不是从对话中学习。 它是用对话作为激活上下文。
当你关掉窗口、清除 session、或重启服务时,那个 KV Cache 就消失了。除非你的应用层把聊天历史保存下来,并在下次请求时重新发送给模型,否则模型不记得任何事情。
这就是为什么「session memory」这个词容易误导——它听起来像记忆,实际上只是「当前激活上下文窗口内的临时可用」。
#为什么模型会「忘记」
当对话超出 context window 时,早期的 tokens 会被推出窗口。此时模型无法再 attend 到它们,看起来就像「忘了」之前说过的内容。
这不是模型真的忘了,而是那些内容不在它能看到的上下文中了。
KV Cache 是计算优化,不是记忆系统。 模型没有真正记住任何东西——它只是在你愿意支付 token 的范围内,把足够的上下文维持在它能访问的地方。