你上一句刚说过的话,下一轮对话它就忘了;你喂给它的秘密,换个窗口它一无所知。 这不是它"笨",而是 Transformer 的推理架构天生是无状态的。 下面从原理一层层拆开:为什么它没有记忆、它"记得"的到底是什么、以及真要记忆该怎么办。
准确说法很重要:模型其实"记得"两类东西,只是都不叫"你的对话记忆"。
把所有"智能"的背后化简,大模型每次回答做的,只是一个输入→输出的映射:
注意右边没有"记忆变量"。f 是个无状态函数:同样的输入,永远得到同样的输出(在温度=0时);它不读取、也不写入任何跨调用的状态。模型权重 W 在推理期间是只读的。
第 2 次调用时,系统里还存着第 1 次的记忆:
每次调用彼此独立,没有 state 链路:
prompt 里而已。模型自己从没"存"过。哪怕在同一次调用内部,模型也只处理你这次送来的 token。调用一结束,它的临时计算缓存(KV Cache)立刻被丢弃,什么都不留。
模型"懂什么"全写在几十亿~万亿个参数(权重)W 里,这些参数是训练阶段算出来的。推理时为了稳定和高效,权重被冻结——模型没有"写入自己"的通道。要改它,只能离线重新训练/微调,而不是"顺手记住你这句话"。
Transformer 的 Self-Attention 计算的是:当前输入序列里,每个词对其他词的关联。它没有指向"过去对话"的指针。你不在输入里放历史,历史对它就是"不存在"。
模型是一个词一个词往外蹦(自回归)。每生成一个词,它只看"已生成的 + 输入的"。生成完,调用结束——没有一步是"把这次对话写进某处"。记忆这个动作,从架构里就不存在。
其实工程上完全可以给模型加记忆模块,但主流推理 API 故意做成无状态,是有道理的:
实用方案都是在模型之外存状态,再在每次调用时把相关状态拼回 prompt。常见三类:
| 记忆类型 | 存在哪 | 跨会话? | 典型实现 |
|---|---|---|---|
| 参数记忆 | 模型权重 W | ✓(但人人共享) | 预训练 / 微调 |
| 上下文记忆 | 本次 prompt 窗口 | ✗(仅本轮) | 把历史贴进消息 |
| 外部记忆 | 数据库/向量库/文件 | ✓(按用户隔离) | RAG、会话服务、用户画像 |