Appearance
L02-15 缓存:精确缓存 + 语义缓存能省多少钱
全局中心内容:缓存省的是钱和延迟,代价是「可能答旧的」——必须有失效策略兜底。 全局讲解主线:重复提问的比例 → 两层缓存 → 语义缓存风险 → 失效设计 → 编码 → 收益测算。
P1 · 产出页
中心内容:精确缓存 + 语义缓存双层,命中率与节省金额可度量。
- 讲解技巧
- 开场数字:企业知识库场景,30%~50% 的提问是重复的(同一批人问同一批制度)。
- 这句话直接建立了缓存的价值感。
- 时长:20s
P2 · 两层缓存
中心内容:精确缓存按字符串哈希,语义缓存按向量相似度。
页面内容:两级缓存流程图与命中判定
讲解技巧
- 精确缓存是零风险的,能扛掉大部分重复。先上它。
- 语义缓存能额外覆盖「措辞不同但意思相同」的提问,但有答错的风险。
时长:5min
P3 · 语义缓存的风险
中心内容:相似度 0.95 的两个问题,答案可能完全不同。
页面内容:三个高危反例(差一个否定词 / 差一个数字 / 差一个时间)
讲解技巧
- 这页是本节的警示牌:「年假有几天」和「年假有没有上限」向量极近,答案完全不同。
- 给安全建议:阈值取 0.95 以上 + 只缓存事实型问答 + 敏感领域关闭。
时长:6min
P4 · 失效设计
中心内容:文档更新必须联动清缓存,否则用户拿到旧答案。
页面内容:缓存 key 绑定 sourceId 列表;文档更新时批量失效
讲解技巧
- 讲清最稳妥的做法:缓存条目里记录它依赖了哪些 sourceId,增量更新后按 sourceId 反查失效。
- 兜底:无论如何都要有 TTL,别让缓存永不过期。
时长:5min
P5 · 编码:缓存实现
中心内容:缓存要放在检索之前,命中就跳过全链路。
页面内容:CacheAsideRetriever;命中/未命中埋点
讲解技巧
- 讲清缓存位置:缓存的是最终答案,不是检索结果,这样能省掉生成调用(最贵的那一步)。
- 提醒:流式输出场景要把缓存答案也按流式吐出,否则前端体验不一致。
时长:6min
P6 · 命中率与收益测算
中心内容:先测命中率,再决定要不要上语义缓存。
页面内容:命中率 → 节省调用次数 → 节省金额的计算公式
讲解技巧
- 给一个算法:节省 = 命中率 × 单次成本 × 日调用量。
- 判断标准:精确缓存命中率如果不到 15%,说明问题分布很分散,语义缓存也救不了。
时长:4min
P7 · 缓存污染与穿透
中心内容:一次性问题和恶意刷量会污染缓存。
- 讲解技巧
- 讲两个防护:缓存条目有上限 + LRU 淘汰;未命中也要防穿透(同一 query 并发只放行一个回源)。
- 时长:3min
P8 · 避坑与小结
中心内容:缓存让「答案变旧」这件事变得隐蔽,必须有可观测。
- 讲解技巧
- 引出下一节:灌库这种重活不能拖垮在线服务——02-16 异步化与批处理。
- 时长:2min
讲师备忘
| 项 | 内容 |
|---|---|
| 课前必做 | 准备重复提问比例统计;准备三个语义缓存高危反例 |
| 最容易超时处 | P3 风险部分容易被追问「那到底敢不敢用」——给明确建议 |
| 学员最常问 | 「语义缓存阈值取多少?」答:起步 0.98,实测无误答再降到 0.95 |
| 现场备用 | 无 Redis → 用 Caffeine 本地缓存演示精确缓存层 |