本地 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 的范围内,把足够的上下文维持在它能访问的地方。