LLM 缓存技术:前缀缓存与语义缓存实战

AI 应用的账单里,最扎眼的一行是「同样的请求反复花钱」。客服问答、文档总结、内容审核、批量生成——这些场景的输入高度重复,而每一次重复都是一次完整的推理计费。缓存,就是把这部分「重复计算」变成「一次计算」最直接的杠杆。做得好的团队,靠缓存能把 API 账单砍掉 50%~70%,同时让命中请求的延迟趋近于零。

LLM 缓存有两条技术路线:前缀缓存(利用厂商的 Prompt Caching,改请求结构,零运维)和语义缓存(自建一层,按语义相似度命中,需要运维)。两者互补,本文全部讲透,并给出缓存键设计、TTL 策略与命中率监控的实战细节。

一、先理解计费结构:缓存省在哪

一次 LLM API 调用的费用 ≈ 输入 token × 输入单价 + 输出 token × 输出单价。绝大多数应用输入远大于输出(长 system prompt、长文档、长对话历史),所以输入侧是省钱的主战场。两类缓存的省钱机制不同:

一句话:前缀缓存省「重复读」,语义缓存省「重复算」。前者靠改请求,后者靠加一层。

二、前缀缓存:让厂商帮你省

主流模型厂商(GPT-5 系列、Claude 4、DeepSeek、Gemini 等)都支持 Prompt Caching,机制大同小异:请求前缀与最近请求一致时自动命中,命中部分按折扣价计费。使用上几乎零成本,但有三个工程纪律:

  1. 稳定内容放前面:把 system prompt、few-shot 示例、固定工具定义放在消息列表最前面,把「每次变化的部分」(用户消息、动态数据)放最后。前缀一旦插入一个变化的 token,后面全部失效。
  2. 结构保持一致:同一场景用同一套消息模板(相同的 role 序列、相同的 system 内容),别每次拼装出微妙的差异——缓存是字节级前缀匹配,多一个空格都可能 miss。
  3. 注意缓存生命周期:各厂商缓存保留时间不同(几分钟到几小时不等),高并发场景命中率更高;低流量场景可能还没来得及命中就过期了。

实测效果参考:长 system prompt(2000+ token)的应用,开启前缀缓存后输入成本普遍下降 40%~70%。注意:折扣比例和计费口径各厂商不同,以官方文档为准;聚合网关场景下,缓存折扣通常已体现在返回的 usage 字段里,可以直接对账。

三、语义缓存:自建的第二道防线

前缀缓存管不住「换了个说法问同一个问题」的场景。语义缓存的做法:把用户输入做 embedding,与缓存里的问题向量比对,相似度超过阈值直接返回缓存答案。实现很轻:

import redis, numpy as np

r = redis.Redis(host="localhost", port=6379, decode_responses=True)

def semantic_get(query: str, threshold: float = 0.93):
    qv = embed(query)                       # 向量化用户输入
    for key in r.scan_iter(match="qa:*", count=100):
        v = np.frombuffer(bytes.fromhex(r.hget(key, "vec")), dtype=np.float32)
        if cos_sim(qv, v) >= threshold:
            return r.hget(key, "answer")    # 命中,零推理成本
    return None

def semantic_put(query: str, answer: str, ttl: int = 86400):
    key = f"qa:{hash(query)}"
    r.hset(key, mapping={"vec": embed(query).tobytes().hex(), "answer": answer})
    r.expire(key, ttl)

三个关键参数:阈值(0.90~0.95 之间调,太低误命中、太高命中率低)、TTL(文档类 24h~7d,动态数据要更短)、embedding 模型(用中文效果好的模型,和文档检索共用一套即可)。命中时建议同时返回「缓存命中」标记,方便监控和排查。

四、缓存键设计:粒度决定命中率

语义缓存只解决「问法不同、意思相同」,更常见的是「完全相同的请求」——这类用精确缓存更便宜更快。缓存键设计是命中率的胜负手:

五、TTL、一致性:缓存的另一半

缓存省钱的代价是「可能返回旧内容」,管理这个风险靠 TTL 与一致性策略:

场景TTL策略
FAQ / 产品文档问答24h~7d内容变更时主动失效(写操作时清相关键)
新闻 / 行情 / 时效性内容1~10 分钟过期即失效,不主动缓存「明显过时」的答案
翻译 / 格式化 / 确定性任务长期(30d+)同一输入命中即返回,几乎无风险
个性化回答(含用户信息)不缓存隐私与正确性双重风险

一个重要的边界:含有用户隐私的请求不要进共享缓存——缓存键里不能有明文个人信息,答案也不能落盘到共享存储,这是合规底线,也是LLM API 安全的基本要求。

六、哪些场景不该缓存

判断标准就一句话:这个问题的答案,在 TTL 内对所有人(或同组人)都成立吗?成立就缓存,不成立就别碰。

七、命中率监控与成本测算

缓存要「看得见」才能持续优化。三个指标上墙:前缀缓存命中率(usage 里的 prompt_tokens_details.cached_tokens / total)、语义缓存命中率(命中数 / 请求数)、缓存节省金额(未命中成本 − 命中成本)。用聚合网关的用量统计功能最省事——我们 DrAI 控制台直接给出每 Key 的 token 明细与缓存命中情况,不用自己埋点。

落地顺序建议:先开前缀缓存(零成本改造,立刻见效)→ 再给高频确定性场景加精确缓存 → 最后上语义缓存(收益最大但最需要调阈值)。三层叠加,实测大部分知识型应用能把账单砍掉 60% 以上,这笔账值得细算——《AI API 成本优化》里有完整的成本拆解方法。

八、常见坑

缓存是 AI 应用降本增效的第一杠杆,也是架构成熟度的试金石。想看清自己的请求里有多少「重复计算」?注册 DrAI,控制台直接看每 Key 用量明细,顺手把前缀缓存和模型路由一起开了。

⚡ 让每一分钱都花在刀刃上

注册 DrAI,一个 API Key 调用 40+ 模型,用量统计、缓存命中、模型路由都帮你做好,Pro 套餐仅 $9.99/月。

免费注册 →   查看定价

📚 延伸阅读

AI API 成本优化:12 个立省 60% 的方法模型路由、上下文压缩、语义缓存与包月订阅,实测可将 AI API 调用成本降低 60%。 LLM API 延迟优化:从 3 秒到 300 毫秒TTFT 与 TPOT 拆解、流式输出、连接复用、模型路由与缓存,一份完整的延迟优化账单。 RAG 实战指南:用 pgvector 搭建企业知识库从文档切分、向量化到检索与生成的完整 RAG 落地,附可直接运行的 SQL 与代码。
🌐 中文