← 返回目录
ap1.4实操⏱ 约 9 分钟

缓存的钱:同样的活,账单省 56.8%

一个调整消息顺序的动作,值一半的账单

🔎 最后验证 2026-08📚 来源:本节缓存对比为 ECS 实测(2026-08,deepseek-chat,含 usage 的缓存命中字段,脚本与原始输出见本节代码)🧰 DeepSeek API、Python
为什么学这个

AI 产品最贵的部分往往不是"生成",是每次都重发的那一大坨上下文:系统提示、知识库片段、长规范、对话历史。它们每次都被完整计费——但明明一个字都没变

服务商为此提供了上下文缓存:同样的前缀,第二次起按极低价计费。这一节实测给你看:同一份长文档连问三次,总账单从 0.77 分降到 0.33 分,省了 56.8%——代价是调整一下消息顺序。

💡 打个比方

去复印店:每次都把整本书重印一遍,还是把书留在店里、每次只印新的那几页?缓存就是"把不变的部分留在店里"。你要做的只有一件事:把不变的放前面,变的放后面——这样店家才认得出"这本书我这儿有"。

实测:三次提问的账单

一份约 3600 字的"报销规定"当固定前缀,三个不同问题连续问:

第1次:输入 2514 tok = 命中缓存 0 + 未命中 2514 | 输出 44
  本次成本:0.2602 分(若无缓存也是 0.2602 分)      ← 第一次总要付全价

第2次:输入 2512 tok = 命中缓存 2432 + 未命中 80 | 输出 25
  本次成本:0.0373 分(若无缓存则 0.2562 分)        ← 掉到 1/7

第3次:输入 2513 tok = 命中缓存 2432 + 未命中 81 | 输出 12
  本次成本:0.0348 分(若无缓存则 0.2537 分)

总计:实际 0.3323 分 vs 无缓存 0.7701 分  →  省了 56.8%

看第 2 次那行:2512 个输入 token 里,2432 个命中了缓存——只有你新问的那 80 个 token 按原价算。命中部分的单价大约是未命中的十分之一(具体倍率以服务商价格页为准)。

而且不止省钱:命中缓存的部分不用重新计算,延迟也更低(实测 1.04s → 0.89s)。

怎么让缓存命中:一条规矩

不变的放前面,变的放后面。

具体到消息结构:

messages = [
    {"role": "system", "content": 长期不变的系统提示},      # ← 缓存友好
    {"role": "user",   "content": 知识库片段 + "\n\n问题:" + 用户这次的问题},
]

三个亲手废掉缓存的常见写法(踩了就一分不省):

反面写法为什么废
系统提示里塞当前时间戳每次前缀都不同,永不命中
每次请求把用户 id / 随机 id 放最前面同上
知识库片段每次顺序不同(比如按相关度重排后拼接)前缀变了

RAG 场景(AP4)要特别注意第三条:检索结果每次不同是正常的,但把"稳定的部分"(系统提示、固定的格式要求)提到最前面,至少能让那一段命中。

什么时候缓存最值钱

场景收益
长系统提示 + 大量短问题(客服、助手)⭐⭐⭐ 最典型,省一半起
同一文档多轮问答(本节实验)⭐⭐⭐
多轮对话(历史越来越长)⭐⭐ 前面的历史可命中
每次内容都完全不同(批量处理不同文本)❌ 基本无收益,别指望

🔧 动手做:算清你自己产品的缓存账(12 分钟)

  1. 跑本节代码 cache_money.py,看你自己的命中数字(可能和我的略有差异,缓存策略会调整)。
  2. 亲手废掉它:在 system 消息最前面加一句 f"当前时间:{time.time()}",再跑——命中数应该变成 0,成本回到全价。这是最直观的"反面教材"。
  3. 改回来,再跑一次确认命中恢复。
  4. 算你的账:按你毕业方向估算——系统提示多少 token?每天多少次调用?用「未命中价 × 全量」和「首次全价 + 后续命中价」各算一遍月账单,差多少?
  5. 把结论写进笔记:我的产品里,哪一段是"不变的前缀"?我把它放最前面了吗?

做到这里你应该有:你自己的命中数据 + 一次亲手废掉缓存的实验 + 一份月账单对比。

为什么:成本优化里,缓存是投入产出比最高的一项——不改逻辑、不降质量,只调消息顺序,账单直接减半。而且这个习惯要在第一天就养成:等你的产品跑起来了、提示词写得到处都是时间戳时,再回头改就是重构。

❓ 测验
你的客服助手有一段 2000 token 的系统提示(产品说明+话术规范),用户每次问一句话。怎么组织消息最省钱?
⚠️ 避坑缓存不是「永久有效」,别把它当数据库

两个边界要知道:① 有有效期——前缀缓存通常只保留一段时间(分钟级到小时级,以服务商说明为准),太久没用会失效,下次又是全价;② 不保证命中——服务商侧的缓存是"尽力而为"的优化,不是承诺,你的成本模型不能建立在"必然命中"上。正确姿势:按未命中价格做预算,把命中当作省下来的意外之喜。

🤖 让 AI 帮你重排消息结构
这是我产品的消息结构:【贴出你的 system/user 消息构造代码】。请帮我:1) 找出哪些内容是「每次不变」的,应该提到最前面;2) 指出有没有「亲手废掉缓存」的写法(时间戳/随机 id/顺序不稳定);3) 重排后给出新的构造代码;4) 估算命中缓存后能省多少。
✅ 小结

缓存三句话:不变的放前面(省 56.8%)、时间戳和随机 id 是缓存杀手、按未命中价做预算;它同时还降延迟。

下一节讲一个"不省钱但能救命"的话题:密钥——写进代码推上 GitHub 的那一刻,你的余额就是全世界的了。

下一节 → 密钥与配置:一次事故值多少钱
🔎 来源与核验· 2 条,点开核对
本节每个关键论断都对应一个可追溯的来源 —— 这是本课程"靠谱、不过时"的底线。
「同一 3600 字文档连续三问实测:第 1 次全部未命中(2514 tok,0.2602 分);第 2、3 次命中 2432 tok,单次成本降至 0.0373/0.0348 分;总成本 0.3323 分 vs 无缓存 0.7701 分,节省 56.8%」
📚 ECS 实测 cache_money.py(2026-08,deepseek-chat,usage 含 prompt_cache_hit_tokens)✓ 已核验 2026-08
「命中缓存部分单价约为未命中的十分之一量级;缓存按相同前缀匹配,有有效期且不保证命中(具体以服务商价格页与文档为准)」
📚 DeepSeek 开放平台文档与价格页 + 本节实测✓ 已核验 2026-08
智图软件的赞赏码
都看到这了,打个赏呗!
接下来 · ap1.5
密钥与配置:一次泄露,余额是全世界的
继续读下一节 →