跳到主内容

什么是 KV 缓存?AI 为什么能「记得住」上文

2026-10-06 发布 来源:我告诉你AI导航 阅读

和 AI 连续聊十几轮,你会发现它并没有越答越慢,这背后有个关键机制在起作用:KV 缓存。它让模型不用在每一轮都重新计算整段上文,是长对话能保持流畅的原因之一。

和 AI 连续聊十几轮,你会发现它并没有越答越慢,这背后有个关键机制在起作用:KV 缓存。它让模型不用在每一轮都重新计算整段上文,是长对话能保持流畅的原因之一。

先说结论:算过的结果存下来复用

KV 缓存的核心思想很朴素:既然前文没有变化,那为前文算出的中间结果就不必重算,直接存下来复用。每多生成一个字,只计算这个新字,其余全部从缓存里取。它省下的是重复计算的时间。

它要解决的问题:每生成一个字都要「回头看」

大模型基于注意力机制工作,生成每个字时都要「回头看」前面所有内容,计算它们与当前字的关系。如果前面已经有 2000 字,这一轮就要重新算 2000 字的注意力;下一轮,再算 2001 字。这样下去,聊得越久、越长,每一步都要重复处理越来越长的上文,速度自然下降。

注意力机制之所以要「回头看」,是因为下一个字的生成依赖它和上文每个位置的相关程度。这段相关性的计算量,随上文长度近似线性增长;没有缓存时,每一步都要把这些计算重做一遍,这是长文本生成变慢的直接来源。

K 和 V 是什么:两组中间结果

在注意力计算里,每个位置的词会被映射成两组向量:Key(键)和 Value(值),再加一个 Query(查询)用来匹配。K 和 V 是由前文内容决定的,一旦前文固定就不再改变;只有当前新词的 Query 是新的。KV 缓存缓存的就是这些 Key 和 Value。

简单理解:K 负责「被谁查到」,V 负责「查到后提供什么信息」。生成过程每前进一步,前文对应的 K、V 都已在缓存里,只需要为新词算一份 K、V 并追加进去。

速查:KV 缓存要点

  • 解决什么:避免每轮都重算整段上文的注意力。
  • 省的是什么:重复计算的时间,不是显存。
  • 代价是什么:缓存本身要占显存,对话越长占得越多。
  • 可复用点:开头相同的前缀可跨请求复用,这是提示词缓存省钱的原因。

一张表:KV 缓存的得与失

维度具体表现需要注意
计算时间长对话每步不必重算前文提速主要来自这里
显存占用缓存随对话长度线性增长长对话成本累积、显存紧张
前缀复用相同开头可跨请求命中缓存把固定说明放最前、保持一致更省

缓存占用显存的多少,与上下文长度、模型规模、精度都相关。本地跑模型时,显存是否够用往往决定了能开多长的上下文,这里会牵涉模型文件格式的选择,比如GGUF这类格式对本地部署的影响。

显存占用还和数值精度相关。同样的上下文,把缓存和权重量化到更低的精度,可以成倍减少占用,代价是可能带来精度损失。这类取舍在本地部署里很常见:模型文件用什么格式、加载到显存后占多少空间,直接决定了你能开多长的对话。

提示词缓存:把复用延伸到请求之间

KV 缓存不只在一个会话内部起作用。如果每次请求都以同一段固定说明开头,这段说明的 K、V 只需算一次,后续请求可以直接复用,这就是「提示词缓存」能降低费用的原理。它的前提很严格:前缀字节必须完全一致,哪怕差一个空格,缓存命中都会受影响。

它做不到什么

KV 缓存省的是时间,不是显存,这是最容易被误解的一点。它甚至要额外占用显存,长对话下显存压力不降反升。它也不改变模型对内容的理解——它只是避免重复劳动,不提升「记性」本身,模型的记忆上限仍由上下文窗口决定。

还有一个边界:前缀复用的前提是开头内容完全一致。哪怕开头差一个字,后续缓存的命中都会受影响,所以「把固定说明放最前并保持一致」才有效。想理解计算开销的量化口径,可以看FLOPS;关心权重文件在显存里的加载方式,可以看safetensors。

对普通用户来说,不必深究 K、V 的具体数值,但可以带走两条实用结论:长对话确实更耗资源,要留意工具的上下文长度上限;把重复的说明固定放在最前面并保持一致,有助于命中前缀缓存、降低实际开销。

反馈页面信息

请描述需要更正的地方,页面标题和网址会自动附上。

也可以发邮件至 [email protected]