编程基础篇 · 哈希与缓存:空间换时间

缓存:AI 账单的隐形折扣

上一课的哈希表解决了「怎么瞬间找到」,这一课解决另一个问题:算过的东西,别再算第二遍。你在模型价格表上见过的「缓存命中五折甚至一折」,账单上省下的每一分钱,背后都是同一种收纳方式——把算过的结果存起来,下次直接取。

先想一个日常场景

你算过一次「37 × 89 = 3293」,第二天有人又问你 37 × 89 等于几——你会重新列竖式吗?不会,你直接报答案。缓存就是电脑的这种「直接报答案」:把算过的结果按 key 存进上一课的哈希表,下次遇到同样的 key,一步直达取结果。哈希表管「存哪、怎么找」,缓存管「什么值得存」。两课合起来才是完整的「空间换时间」。

交互 1 · KV Cache:同一段开头别算两遍

大模型每生成一个字,都要「回头看」前面所有 token,给每个 token 算一份注意力的中间结果。关键在于:只要前缀一模一样,这些中间结果就一模一样——那第二轮对话还重算它干嘛?下面每个小方块是一个 token,先点「播放第一轮」,再点「播放第二轮」。留意第二轮里绿色方块出现的速度:它们没有被计算,是直接从缓存取的。

正在计算(烧算力) 本轮算过 缓存命中,免算 还没轮到
第一轮对话
系统提示词 + 问题①,每个 token 都要从零计算
第二轮对话
前缀(系统提示词 + 第一轮全部内容)一字没变
先播第一轮,看每个 token 逐个点亮计算
第二轮的计算量对比(方块数 = 要算的 token 数)
没有 KV Cache
0 个 token
有 KV Cache
0 个 token
KV Cache 缓存的是「算过的注意力中间结果」(每个 token 的 Key 和 Value,名字就是这么来的),不是缓存答案本身。对话每多一轮,前缀就更长、省得就更多——真实场景里系统提示词动辄几千 token,轮轮重算等于轮轮全价买单。模型厂商价格表上「缓存命中的输入 token 打一折」,指的正是这些绿色方块。
一个立刻能用的验收直觉:KV Cache 只认「前缀一模一样」。如果你的应用每轮都把系统提示词改一个字(比如把当前时间拼在最前面),缓存就轮轮失效,账单直接翻几倍。把会变的内容放到提示词末尾、固定内容放开头——这是花一分钟就能省一大笔的架构习惯。
交互 2 · 语义缓存的账单

KV Cache 省的是「同一段开头」,还有一种更狠的:同样的问题,答案整个都别再算。客服机器人每天被问 1 万次「怎么退货」,问法五花八门但意思相同——把「意思」当 key(用向量相似度判断,第十课细讲),命中就直接返回存好的答案,一次模型调用都不用发。拖动命中率滑块,留意月账单的变化。

场景:客服机器人每天 10,000 次提问,每次调用大模型约 0.02 元,一个月 30 天。命中缓存的提问直接返回存好的答案,不产生调用费
0%
这个月要付
¥6,000
每天 10,000 次全部真实调用
缓存帮你省下
¥0
这就是Harness 核心篇讲过的语义缓存策略在省钱

⚠️ 但是——退货政策改了怎么办?

缓存里还躺着按旧政策生成的标准答案,机器人会一本正经地拿它继续回答十天半个月,比不缓存错得更稳定、更理直气壮。所以工程师常说:缓存最难的不是存,是知道什么时候作废(术语叫「缓存失效」,计算机科学两大难题之一)。常见做法:给缓存设个保质期(比如 24 小时过期)、或者政策一更新就主动清掉相关条目。设计任何缓存前先想好这一步,否则省下的钱会用客诉还回来。

它在 AI 世界的真身

「算过的别再算」这一招无处不在,下面四个你天天在享受的东西,本质上是同一个结构。

🧠

KV Cache

大模型推理的标配:前缀 token 的注意力中间结果只算一次。没有它,长对话根本跑不动

💬

语义缓存

把「问题的意思」当 key,相似提问直接复用答案。高频客服场景能砍掉一大半调用费。

🌐

浏览器缓存

图片、样式文件下载一次就存本地,第二次打开网页秒开——你刷网页快,一半功劳是它的。

🗺

CDN

把内容提前存到离你最近的机房,全国用户都像访问本地服务器。缓存 + 地理位置,还是那一招。

✅ 这一课想和你分享的