第4章 应用层缓存:语义缓存与响应缓存 章节摘要:本章跟着一条"把缓存键从字面升级为语义"的主线走。第 2 章守显存层、第 3 章守平台层,靠的都是字节级精确匹配——问题一换说法,前缀就对不上,缓存全部 miss。本章把缓存键从"字符串"换成"问题在向量空间里的坐标",让"怎么问"不再决定"能否命中"。你会看到语义缓存如何用一次嵌入计算的代价,省掉一整次模型推理;也会看到它最锋利也最危险的一面:一个错误答案一旦被命中复用,会被放大成成千上万个错误回答。这一层离业务最近、见效最快、但风险结构最特殊,读完你将为第 5 章的多级缓存实战备好概念与防线。 一条主线 我们有一个客服问答系统,每天接几万句用户提问。
章节摘要:本章跟着一条"把缓存键从字面升级为语义"的主线走。第 2 章守显存层、第 3 章守平台层,靠的都是字节级精确匹配——问题一换说法,前缀就对不上,缓存全部 miss。本章把缓存键从"字符串"换成"问题在向量空间里的坐标",让"怎么问"不再决定"能否命中"。你会看到语义缓存如何用一次嵌入计算的代价,省掉一整次模型推理;也会看到它最锋利也最危险的一面:一个错误答案一旦被命中复用,会被放大成成千上万个错误回答。这一层离业务最近、见效最快、但风险结构最特殊,读完你将为第 5 章的多级缓存实战备好概念与防线。
我们有一个客服问答系统,每天接几万句用户提问。第 3 章的 Prompt 缓存能帮我们复用长系统提示和公共前缀,省下 prefill 的算力;可它救不了"同一个意思十种问法"的局。用户问"你们退货要几天""多久能退款""退钱一般几个工作日到账"——这三句语义相同,字面却毫无公共前缀,平台缓存每条都当新请求,老老实实跑完整推理。算力是预付的,每一次本可避免的推理都是一笔没收回来的沉没成本。
语义缓存要解决的,正是这层"字面不同、意思相近"的浪费。它把每个问题先嵌入成一个向量,再拿向量去已存向量的库里找"最像"的那个;只要足够像,就直接把上次算好的答案还回去,连模型都不叫醒。主线就从这里展开:先讲动机与原理,再手把手定阈值,然后直面它特有的污染风险,最后落到三级串联的工程架构。
这套思路在全书里是第一次把"缓存键"的含义从字符串升级为向量——前几章的缓存键都是确定性的(KV 位置、prompt 前缀),只有到了应用层,缓存键才变成"意思够不够近"这种概率判断。这也是为什么这一层的风险性质和其他层截然不同:前几层的命中要么对要么不命中,应用层却要时刻面对"半对"的灰色地带。
本章真正的认知拐点是:语义缓存省下的不是"一点算力",而是整段推理的"调用权";但它换来的,是把单次错误变成长尾放大的"放大器"。所以这一层不能孤立地看命中率——命中率越高,越要问"命中的都是对的吗"。最终落点是:语义缓存必须被放进一个有兜底、有分级、有失效机制的多级架构里,才有资格谈收益。
第 4 章把概念和红线都摆好了,第 5 章就上手把它们落成工程:在 vLLM 上跑前缀缓存、自建缓存网关、让 Agent 的多轮消息也能追加命中,并用三张仪表盘把命中率、误命中率、节省成本盯起来。主线从"语义能命中"推进到"在生产里稳稳地命中"。