标准回答
精确缓存:最简单也最稳
key = 模型名 + 温度等参数 + prompt 文本的哈希。完全一样的请求直接返回缓存结果,0 延迟 0 花费。适合 FAQ、固定模板、批处理里重复出现的输入。注意参数(temperature、max_tokens)不同结果也不同,必须进 key。
语义缓存:覆盖「问法不同、意思相同」
「怎么退款」和「退款流程是什么」是两个字符串,精确缓存命不中。语义缓存把 query 转成 embedding,在向量库里找最相似的历史问题,相似度超过阈值就复用它的答案。能大幅提升命中率,但要调好阈值。
关键注意点
- 阈值太松会误命中:「北京天气」和「上海天气」语义很近但答案完全不同,命中错的答案比不命中更糟。可对实体/关键词加约束。
- 加 TTL 和主动失效:知识库或底层数据更新时,相关缓存要失效,否则返回过期答案。
- 个性化内容(含用户私有数据)要按用户隔离,实时信息(股价、库存)干脆不缓存。
常见误区
⚠️ 常见踩坑
语义缓存相似度阈值设得太松,把「意思相近但答案不同」的问题误命中(如不同城市/不同金额的查询),返回错误答案——这比缓存未命中危害更大。
追问
追问 1:语义缓存的相似度阈值怎么定?
没有万能值,要用真实 query 对做评测:标注哪些该命中、哪些不该,扫不同阈值看命中率和误命中率的权衡,选误命中可接受范围内命中率最高的点。对答案敏感的场景(金额、城市、时间)调高阈值或加关键实体匹配做二次校验。
追问 2:流式输出的结果能缓存吗?
能。在流结束后把完整输出存下来,下次命中时既可一次性返回,也可以模拟分片「回放」出打字机效果保持体验一致。缓存的是最终完整文本,不是中间分片。
延伸学习
与本题相关的知识库文章、术语、工具与行业资讯。