60 秒回答模板

AI 模型调用缓存要先判断哪些结果可以缓存。确定性分类、embedding、图片特征、结构化抽取和低温度生成比较适合;强个性化、高随机性、实时上下文依赖和敏感数据要谨慎。缓存 key 不能只 hash 用户输入,还要包含模型名、模型版本、prompt 版本、系统指令、参数、语言、用户或租户边界、工具上下文和 schema 版本。缓存分两类:精确缓存用于完全相同请求,语义缓存用 embedding 找相似问题但要有相似度阈值和质量校验。过期策略要根据业务变化、模型升级、prompt 改版和数据时效设置 TTL 或主动失效。工程上要防缓存击穿、并发重复调用、脏数据污染和隐私串租。指标看命中率、节省成本、延迟下降、错误复用率、用户满意度和版本切换后的回归。

考点 缓存前先分级
难度 真实面经题
回答目标 说明哪些能缓存、如何命中、何时失效、如何防止错误复用和隐私问题。

深入解析

01

先确定缓存对象和风险等级

AI 调用不是所有都适合缓存。embedding、OCR 后处理、商品标签抽取、意图分类、低温度问答和规则化 JSON 输出比较适合,因为相同输入应得到稳定结果。开放式创作、多轮上下文回答、实时价格库存、用户隐私强相关和带随机采样的生成不应简单复用。缓存策略要按任务分级:可全局复用、仅租户内复用、仅用户内复用、不可缓存。

02

cache key 要表达完整语义边界

最常见错误是只对用户文本做 hash。实际 key 应包含模型供应商、模型名、模型版本、prompt 模板版本、system prompt、输出 schema、temperature、top_p、工具结果版本、检索语料版本、语言、租户和权限边界。输入文本还要做规范化,例如去掉无意义空白、统一大小写、排序 JSON 字段,但不能把会改变语义的信息删掉。

03

精确缓存和语义缓存取舍不同

精确缓存安全、可解释,适合相同输入重复出现的场景,例如热门问题、商品描述标签化和固定分类任务。语义缓存通过 embedding 召回相似请求,可以提升命中率,但风险是相似不等于相同,尤其是数值、时间、权限和否定词会导致错误复用。语义缓存应设置高阈值、领域白名单、答案校验、低置信度回源模型,并记录用户纠错反馈。

04

过期、一致性和观测决定能否上线

缓存要有 TTL、版本前缀、主动失效和灰度策略。模型升级时可以双读旧缓存但写新缓存,或按版本完全隔离;prompt 改版、schema 变更、权限变化、业务状态变化和知识库更新应触发 key 版本变化。工程上要用 singleflight 或分布式锁防止缓存击穿,用负缓存处理稳定失败但要短 TTL,用加密和访问控制保护敏感内容,并防止外部输入污染共享缓存。指标要看命中率、回源率、节省 token/GPU 时间、延迟下降、 stale-hit 率、缓存错误率、质量回归和过期后抖动。

易错点

  • 只用原始输入文本做 key,忽略模型、prompt、参数、schema 和权限边界。
  • 把高随机性或强实时依赖的生成结果当成确定性结果缓存。
  • 语义缓存阈值过低,把“相似问题”错误复用成“相同答案”。
  • 缓存敏感数据但没有租户隔离、加密和访问控制。
  • 没有防缓存污染或缓存投毒策略,错误结果被大量复用。
  • 没有防击穿机制,热门 miss 时反而把模型服务打爆。

面试官追问

同一个输入不同用户能共用缓存吗?

要看输出是否依赖用户权限、画像和上下文。公共分类或通用标签可以全局复用;涉及用户历史、会员权益、私有文档或租户数据时,必须把用户、租户或权限版本放进 key,甚至直接禁止跨用户复用。

语义缓存怎么控制错误命中?

需要高相似度阈值、领域白名单和二次校验。对包含数字、时间、否定、权限、实时数据的请求要降级为精确缓存或直接回源模型。还可以让缓存结果带置信度和来源,低置信度时不复用。

模型升级后缓存怎么办?

最稳妥是把模型版本放进 key,新模型写新缓存,旧缓存自然过期。若成本压力大,可以灰度复用部分稳定任务的旧缓存,但要有抽样回归和错误回滚。不能让新模型无条件读取旧模型的所有结果。

流式生成结果可以缓存吗?

可以缓存最终完整结果,也可以缓存中间结构化结果,但不建议缓存半截 stream。命中缓存时可以模拟流式输出,但存储层应保存完整文本、schema 版本和生成参数,避免恢复出不完整答案。