切换主题

Prompt Cache 为什么没省钱?用 prompt-cache-skills 排查 AI 编程缓存

Easton editorial illustration: central cache vault with stacked prompt blocks, cold request entering the vault, warm request reusing the cached blocks, small timestamp block diverted away from the cache

"prompt-cache-skills 仓库提供按 Agent harness 分类的缓存修复技能,并要求在应用 diff 后通过真实缓存用量字段验证。"

你的 Claude Code 或 Cline 每月账单可能比实际应费高出 30-50%。不是因为用量大,而是 Prompt Cache 没生效。

很多 AI 编程 Agent 默认会开启 prompt caching,但配置里一个小改动就能让整个缓存前缀失效:系统提示塞了时间戳、cache key 计算错误、缓存开关没打开,或者 TTL 设得太短。这些变化不会报错,账单也不会提示,你只会看到每月的 API 成本居高不下。

prompt-cache-skills 是一个 drop-in 技能库,专门修复这些”悄悄失效”的缓存配置。合适场景下,缓存命中率可以从接近零提高到 80% 甚至更高。下面会解释缓存计费原理、列举四大失效原因、展示技能库的典型修复案例,并提供验证方法。

Prompt Cache 怎么帮你省钱

Prompt Cache 的省钱逻辑很简单:稳定的前缀内容可以被缓存,重复使用时计费远低于普通输入 token。

各家 API 的计费字段名不同,但原理一致:

计费类型计费特点适用场景代表厂商
cache_creation_input_tokens首次创建缓存,费用通常高于普通 token长前缀首次请求Anthropic
cache_read_input_tokens缓存命中,费用远低于普通 token(约 10%)稳定前缀多次复用Anthropic
普通输入 token按正常费率计费短请求或前缀频繁变化所有厂商
cached_tokens(OpenAI)缓存命中,费用降低约 50%稳定前缀复用OpenAI
cached content(Gemini)按缓存时长计费长上下文场景Google Gemini

以 Anthropic 为例,如果你的系统提示有 2000 token,每天通过同一个 Agent 复用 100 次,缓存命中时这 2000 token 会走 cache_read 计费,约为普通输入 token 的 10%。单这一项就能节省约 90% 的输入成本。

缓存真正有效的前提是:前缀内容稳定且会被多次复用。如果你的系统提示每次请求都变(比如包含时间戳或随机 ID),缓存前缀每次都会重新计算,cache_creation 的成本反而可能比普通请求更高。

为什么你的 Agent 缓存总是失效

这些失效原因不会报错,你只会看到账单数字,却找不到具体的浪费点:

  1. 易变消息破坏前缀。系统提示前缀里塞了时间戳、随机 ID 或其他每次请求都会变的内容,导致整个缓存前缀作废。这是最常见的失效原因。

  2. Cache key 错误或缺失。某些 Agent 工具没有正确设置缓存标记,或者使用自定义 cache key 但计算逻辑有误。缓存前缀虽然内容稳定,但 API 无法识别为可缓存内容。

  3. 默认没开缓存。部分 Agent 工具默认关闭 prompt caching,需要手动在配置文件里开启。你以为 Agent 会自动处理,结果一直走普通 token 计费。

  4. TTL 太短。缓存有效期设置过短(比如 1 小时),而你的实际请求间隔超过了 TTL,每次请求时缓存都已过期。

具体症状因 Agent 而异,prompt-cache-skills 仓库的 README 里有按工具分类的症状描述。如果你怀疑某个失效原因,可以先对照仓库里的 SKILL.md 看是否匹配你的工具。

prompt-cache-skills 是什么

prompt-cache-skills 是一组 drop-in 技能,任何 AI 编程 Agent 都能自己读取并应用:

维度说明
定位一组 drop-in 技能,AI 编程 Agent 可自行读取并应用的修复补丁
目标在合适场景下将缓存命中率从坏的或部分的提高到 80-99%
适用 AgentClaude Code、Codex、Cline、Cursor、Devin、Gemini CLI、OpenCode、Aider、Continue、Roo Code 等
仓库地址https://github.com/OnlyTerp/prompt-cache-skills
使用方式指向仓库 → Agent 自动应用 → 验证命中;或手动按 skills/ 目录 patch
省时优势省去自己研究各家 API 缓存细节的时间

项目当前约 99 stars,skills 列表和命名可能会调整,具体以仓库 README 为准。

与手动排查相比,这套技能库的优势在于:你不需要自己去翻各家 API 的 prompt caching 文档、对比不同 Agent 的配置差异、猜测哪个字段破坏了缓存前缀。仓库里的每个 skill 都已经识别了具体的失效原因,提供了对应的修复 diff 和验证方法。

怎么用 prompt-cache-skills 修复你的 Agent

有两种方式:让 Agent 自动修复,或者手动按 skills/ 目录修改。

方式一:让 Agent 自动修复(推荐)

第一步,指向仓库。复制这句话发给你的 AI 编程 Agent:

读 https://github.com/OnlyTerp/prompt-cache-skills,把 skills/ 里匹配我当前使用的 harness 的每个技能都应用:确认目标 → 落 diff → 按 SKILL.md 验证

第二步,Agent 会识别你当前使用的工具(比如 Cline、Continue、Aider 等),然后列出匹配的技能清单。你会看到每个技能针对的失效原因。

第三步,审查 diff。每个技能目录下有 SKILL.md 文件,说明修改目标和具体改动。仔细阅读后确认这些修改是否安全。

第四步,应用修改。确认后让 Agent 落 diff,修改你本机或项目的配置文件。建议修改前先备份原配置。

第五步,验证命中。使用 tools/check_cache.py 工具验证缓存是否生效。具体方法见下文”怎么验证缓存真的命中了”。

方式二:手动修复

如果你不想让 Agent 自动修改配置,可以手动应用。

第一步,访问仓库:https://github.com/OnlyTerp/prompt-cache-skills

第二步,浏览 skills/ 目录,找到你使用的工具对应的技能。比如 cline-fix-volatile-msg 或 continue-enable-defaults。

第三步,阅读 SKILL.md。每个技能目录下都有说明:目标、症状、修复点、验证方法。

第四步,按说明手动修改你的配置文件。

第五步,使用 tools/check_cache.py 验证缓存命中。

安全提示

让 Agent 自动落 diff 意味着直接改你本机或项目的配置。建议先看 SKILL.md,理解每个修改点。确认后再让 Agent 自动改。修改前先备份原配置文件。

技能库详解(典型修复案例)

仓库里的每个技能都是一个完整的修复:有明确的目标 Agent、症状描述、修复 diff 和验证方法。以下是部分典型案例:

技能名目标 Agent症状修复点
cline-fix-volatile-msgCline系统提示前缀包含时间戳,每次请求前缀都变移除或固定易变消息
cline-openai-cache-keyCline + OpenAIOpenAI 缓存 key 计算错误修正 cache key 生成逻辑
cline-pin-timestampCline时间戳导致缓存失效固定时间戳或移除
continue-fix-volatile-msgContinue系统提示包含易变字段清理易变消息
continue-enable-defaultsContinue默认未开启 prompt caching启用缓存配置
continue-gemini-explicitContinue + GeminiGemini 缓存配置缺失显式设置缓存参数
aider-1h-ttlAider缓存 TTL 仅 1 小时,频繁过期延长 TTL 或调整请求频率
aider-cache-default-onAider默认关闭缓存启用默认缓存开关
opencode-detect-openai-compatOpenCodeOpenAI 兼容模式缓存失效检测并正确处理 OpenAI 兼容 API
opencode-bedrock-doc-blocksOpenCode + BedrockBedrock 文档块缓存问题修正文档块缓存策略

技能列表持续增加,命名可能调整,以仓库 README 和 skills/ 目录为准。如果你使用的 Agent 不在当前列表里,可以参考现有技能的 SKILL.md 和 patch 文件,手动排查类似的缓存问题。

怎么验证缓存真的命中了

prompt-cache-skills 提供了一个验证工具:tools/check_cache.py。它会对比冷/热两次请求,计算缓存命中率。

使用步骤

第一步,获取 check_cache.py。从仓库下载:
https://github.com/OnlyTerp/prompt-cache-skills/blob/main/tools/check_cache.py

第二步,配置 API 凭证。设置环境变量:

  • Anthropic: ANTHROPIC_API_KEY
  • OpenAI: OPENAI_API_KEY
  • Google Gemini: GOOGLE_API_KEY

第三步,运行冷请求(首次请求)。执行:

python check_cache.py --provider anthropic --prompt "你的系统提示" --message "你的用户消息"

观察 cache_creation_input_tokens 字段:

  • 如果有值,说明创建了缓存
  • 记录 input_tokens 数量

第四步,等待 1 秒后运行热请求(重复请求)。再次执行相同命令,使用完全相同的 prompt 和 message。

观察以下字段:

  • cache_read_input_tokens:如果有值且大于 0,说明缓存命中
  • cache_creation_input_tokens:应该为 0 或不存在
  • input_tokens:应该明显减少(被缓存的部分不再计费)

第五步,计算命中率:

命中率 = cache_read_input_tokens / (cache_read_input_tokens + input_tokens)

示例:

  • 首次请求:input_tokens=2000,cache_creation_input_tokens=1800
  • 第二次请求:cache_read_input_tokens=1800,input_tokens=200
  • 命中率 = 1800 / (1800 + 200) = 90%

第六步,判断是否生效:

  • 缓存生效:热请求 cache_read_input_tokens > 0
  • 缓存未生效:热请求 cache_read_input_tokens = 0 或不存在

指标说明

  • cache_creation_input_tokens:Anthropic 字段,首次创建缓存的 token 数
  • cache_read_input_tokens:Anthropic 字段,缓存命中读取的 token 数
  • cached_tokens:OpenAI 字段,缓存命中的 token 数
  • input_tokens:普通输入 token(未缓存部分)

热请求 cache_read_input_tokens = 0 就说明缓存没生效。你需要回到上文的四大失效原因,检查配置是否有易变消息、cache key 错误、默认未开启或 TTL 太短的问题。

什么时候推荐/不推荐用这套技能

这套技能库能修复已知的缓存失效问题,但并不是所有场景都适用:

场景推荐/不推荐原因
长系统提示 + 多次相似请求推荐稳定前缀可复用,缓存收益大
Agent 编程工具(Claude Code、Cline 等)推荐项目专为这些工具设计
月账单 > $50推荐可节省金额大,值得投入
已有 prompt caching 配置但不确信是否生效推荐验证工具帮你确认
短提示 + 单次请求不推荐缓存开销可能大于收益
系统提示频繁变化(如包含实时数据)不推荐前缀不稳定,缓存无法复用
请求间隔超过 TTL(如每天只调几次)需评估缓存可能过期,收益有限
使用不在支持列表的 Agent需评估需手动适配或等待社区贡献技能

如果你的月账单已经超过 50 美元,且使用的是支持列表里的 Agent,投入这套技能库的回报会比较明显。如果你的请求频率较低或前缀频繁变化,缓存收益可能有限,需要先评估是否值得改动配置。

风险与注意事项

在使用这套技能库之前,你需要了解以下风险:

  1. 项目较新。当前约 99 stars,skills 列表和命名可能会调整,具体以仓库 README 为准。技能库会持续更新,命名和结构可能变化。

  2. 自动修改配置需谨慎。让 Agent 自动落 diff 意味着直接改你本机或项目的配置文件。建议先看 SKILL.md 理解每个修改点,再决定是否让 Agent 自动改。

  3. 各家计费字段不同。Anthropic 使用 cache_creation/cache_read,OpenAI 使用 cached_tokens,Gemini 使用 cached content。具体字段名以各家官方文档为准。

  4. 缓存不是万能。一次性短调用、前缀频繁变化的场景,缓存基本没用甚至更贵。不要在所有场景都强求缓存。

  5. 验证工具局限。check_cache.py 目前主要针对 Anthropic API 设计。OpenAI 和 Gemini 的缓存验证需查阅各自官方文档。

  6. 命中率非保证。“80-99% 命中率”只是项目自述目标。实际命中率取决于前缀长度、请求频率、TTL 设置等多种因素。

下一步与延伸阅读

如果你想进一步降低 AI 编程成本,可以阅读:

官方资源:

用 prompt-cache-skills 排查并验证 Prompt Cache

从识别 Agent harness、审查修复到冷请求和热请求对比,确认缓存是否真的命中。

  1. 1

    步骤 1: 确认缓存适用场景

    先确认请求包含会重复使用的长而稳定前缀;短提示、单次请求或频繁变化的系统提示不适合强行缓存。
  2. 2

    步骤 2: 匹配对应技能

    在 prompt-cache-skills 的 skills 目录中找到与你当前 Agent harness 和模型服务商匹配的技能。
  3. 3

    步骤 3: 审查目标和 diff

    阅读对应 SKILL.md,确认目标文件、修改范围、风险和验证方法,自动落 diff 前先备份原配置。
  4. 4

    步骤 4: 应用最小修复

    按技能说明修复易变消息、cache key、缓存开关或 TTL,不把无关配置一起改动。
  5. 5

    步骤 5: 运行冷请求

    用 check_cache.py 或服务商的用量字段执行第一次请求,记录普通输入和缓存创建 token。
  6. 6

    步骤 6: 运行热请求并比较

    使用完全相同的 prompt 和 message 再请求一次,确认缓存读取 token 大于零,并计算实际命中率。

常见问题

prompt-cache-skills 支持哪些 AI 编程工具?
仓库面向 Claude Code、Codex、Cline、Cursor、Devin、Gemini CLI、OpenCode、Aider、Continue、Roo Code 等 Agent,但具体可应用的修复取决于当前 skills 目录和你的 harness;应以仓库最新 README 为准。
修复后缓存命中率一定能达到 80% 以上吗?
不能保证。80% 到 99% 是项目在合适场景下描述的目标区间,实际结果取决于前缀长度与稳定性、请求频率、模型服务商和 TTL,必须用真实用量字段验证。
缓存命中能省多少钱?
节省幅度取决于服务商、模型、缓存创建或存储费用以及实际复用次数。长而稳定的前缀被多次复用通常收益更明显,短请求或低频请求可能不划算。
让 Agent 自动修改配置安全吗?
自动落 diff 会改动本机或项目配置。先阅读 SKILL.md、确认目标文件和修改范围、备份原配置,再应用并执行验证;验证失败时应回滚。
如果使用的 Agent 没有对应技能怎么办?
可以参考已有技能的症状、diff 和验证方法,手动排查稳定前缀、cache key、默认开关和 TTL,但不要直接套用不匹配的补丁。

11 分钟阅读 · 发布于: 2026年7月29日 · 修改于: 2026年7月30日

当前属于系列阅读第 5 / 5 篇

Prompt 工程实战指南

如果你是从搜索进入这篇文章,建议顺手补上上一篇或继续下一篇,这样更容易把同一主题读完整。

查看系列总览

相关文章

BetterLink

想持续收到这个主题的更新?

你可以直接关注作者更新、订阅 RSS,或者继续沿着系列入口往下读,避免下次又回到搜索结果重新找。

关注公众号

评论

使用 GitHub 账号登录后即可评论

Easton BlogEaston Blog