Skip to content

LLM 应用应该如何设计缓存?

3 分钟速学卡

30 秒口述: 我会把 LLM 缓存按层设计:精确响应缓存、语义缓存、检索缓存、工具结果缓存、Prompt 前缀缓存和长任务中间产物缓存承担不同职责。缓存键必须包含所有影响输出的身份、权限、模型、Prompt、语料、索引、工具状态和策略版本,并配合 TTL、主动失效与旁路审计。缓存优化的是重复计算,不应缓存高风险副作用或把历史答案当成实时业务真值。

  • 本质: LLM 缓存首先是等价性和权限设计,其次才是命中率优化。
  • 核心机制: 按响应、语义、检索、工具和中间产物分层;缓存键绑定身份、权限和全部影响输出的版本。
  • 关键判断: TTL 与事件驱动主动失效配合使用;用错误复用率和失效延迟约束成本收益。
  • 项目落地: 故障演练:用户撤权后仍命中旧答案缓存。先关闭受影响命名空间并清除跨权限条目,再核对缓存键中的 tenant_id、权限指纹、策略版本与索引版本。
  • 边界与坑: “Query 相同就复用答案”:忽略身份、权限、会话和版本;“设置 TTL 就够了”:删除、撤权和规则变更往往需要主动失效。

目录

面试官为什么问

这道题考察成本意识、一致性、权限隔离和失效策略。真正的难点不是 Redis API,而是定义“哪些结果等价、何时过期、谁可以复用”。

小白先看懂

餐厅会预制常卖的基础汤底,却不会把上一位客人的定制菜直接端给下一位过敏客人。汤底对应安全可复用的前缀或中间结果,顾客身份与忌口对应租户和权限,保质期对应 TTL,菜单版本对应 Prompt 与知识版本。

技术上,精确缓存要求规范化输入与完整版本一致;语义缓存允许相似 Query 命中,但风险更高。类比没有覆盖概率相似度和撤权传播,因此高风险场景要宁可未命中,也不能跨权限复用。

主题图与核心原理

图:教学图片|LLM 应用应该如何设计缓存?

替代文本: 围绕“LLM 应用应该如何设计缓存?”组织的中文教学图,通过分区、箭头和标签解释核心机制。

LLM 应用应该如何设计缓存?教学图片

读图结论: 命中率服从正确性;撤权与变更必须主动失效。

这张图片用于建立主题机制的直觉。精确公式、参数、失败分支和事实边界仍以正文与 Mermaid 为准。

图片生成记录: model=gpt-image-2generated=2026-07-15prompt_version=v1reviewed=2026-07-16review_basis=user-confirmed查看生成 Prompt

图:LLM 多层缓存与失效边界

替代文本: 请求依次查询精确、语义、检索和工具缓存;每层都受权限、版本与时效约束,未命中才进入模型计算。

图表加载中…

读图结论: 缓存键决定安全边界,主动失效决定更新速度,命中率不能凌驾于权限和正确性。

设计时先定义每层的输入、价值、风险和失效事件。对模型答案可存 context_hash 与版本指纹;对实时价格、库存和权限结果使用短 TTL 或不缓存;对执行真实动作的工具调用使用幂等记录而非答案缓存。

项目和生产视角

故障演练: 用户撤权后仍命中旧答案缓存。先关闭受影响命名空间并清除跨权限条目,再核对缓存键中的 tenant_id、权限指纹、策略版本与索引版本;长期用撤权事件主动失效、召回后二次授权和跨租户回归测试防复发。

评估缓存要同时看安全命中率、错误复用率、节省 Token、P95、陈旧答案率和失效传播延迟,不能只追求总命中率。

常见错误回答

  • “Query 相同就复用答案”:忽略身份、权限、会话和版本。
  • “设置 TTL 就够了”:删除、撤权和规则变更往往需要主动失效。
  • “语义缓存命中越高越好”:相似问题不一定有相同事实条件和安全边界。

递进追问

  1. 精确缓存和语义缓存的风险有什么不同?
  2. RAG 检索缓存键至少要包含哪些版本?
  3. 文档删除后怎样让索引、答案和缓存一致失效?
  4. 如何防止缓存击穿和热点 Key?
  5. 什么时候宁可不缓存?

关联阅读

总结

一句话记忆: LLM 缓存首先是等价性和权限设计,其次才是命中率优化。

  • 按响应、语义、检索、工具和中间产物分层。
  • 缓存键绑定身份、权限和全部影响输出的版本。
  • TTL 与事件驱动主动失效配合使用。
  • 用错误复用率和失效延迟约束成本收益。