为什么长对话的 Token 会更便宜?
阅读时间约 10 分钟每个 token 进入 Attention 层时,都要和两个固定的权重矩阵做乘法, 得到 Key 和 Value 向量——这两个向量就是缓存的对象。
sin(30°) = 0.5,已知就不必每次重算三角函数。KV Cache 就是把这个"已知结果"存起来查表用。
相同前缀的 token 直接从缓存读取,只有新 token 需要重新计算。
模型看到的只是一串 token——不区分谁说的,全部都需要 K/V,全部存入缓存。 随着对话轮次增加,命中率越来越高。
缓存命中 = 跳过 K/V 矩阵乘法。计算量从 O(N) 降到近似 O(1)。 厂商据此对命中 token 打折,约为正常价格的 10%。
不是"一个矩阵",而是按层、按注意力头分开存储的多组向量。
每层独立存 K/V,互不影响
多头注意力,各头独立计算
越长的对话占显存越多
通常固定,由模型架构决定
📐 实际大小:2 × 32层 × 32头 × 1000token × 128维 × 2字节(fp16) ≈ 500 MB —— 上下文越长,显存占用线性增长
K/V 是确定性函数的输出,两个输入(token embedding + 权重)都固定,结果永远相同,可以安全复用。
命中 = 跳过矩阵乘法,GPU 算力省下来。厂商对命中 token 打折,约为正常价格的 10%。
不是近似,是精确相等的浮点数——与重算完全一致,零误差,不影响任何输出质量。
用户消息 + 模型回答全部缓存。模型不区分谁说的,都需要 K/V,地位完全平等。
四维张量 [L层 × H头 × N token × d维],上下文越长显存越多,是显存 vs 算力的权衡。
稳定内容(System Prompt / 文档)放最前,变化内容追加在末尾——保证前缀缓存最大命中。
KV Cache = 用显存空间换计算时间 · 命中率越高,Token 越便宜