GoForum🌐 V2EX

「缓存命中率」是个伪指标,应该看未命中的缓存

heimoshuiyu · 2026-06-27 16:53 · 0 次点赞 · 0 条回复

https://i.imgur.com/vIiY7Qa.jpg

命中率的问题很简单:它是一个百分比,分母是你的总 token 数。上下文越长、子 agent 开得越多、工具调用越频繁,分母就越大,命中率自然就越低——但这跟 provider 的缓存质量没关系,是你自己用得多。一个百分比把「你怎么用」和「 provider 缓存好不好」混在一起,根本看不出问题出在哪。

换成绝对值就清晰了:

未命中 = 上一条的总 token 数 − 这一条从缓存读回的 token 数

就是这一轮有多少 token 被白白重新处理了。理想情况是 0 ,值越大浪费越多,用户在为这些 token 付钱。要是这个值突然飙上去,说明缓存挂了——可能是有问题的插件打断了缓存,或者 provider 的缓存过期了。

跑了下自己 16 万条消息,发现不同模型差异巨大:DeepSeek-v4 有 85% 的对话连上一轮的输出都能缓存住,GLM-4.7 有 63%,但 GPT-5.5 只有 0.3%。vLLM 和 SGLang 本来就支持输出侧 KV 复用,那些不支持的模型纯粹是没开这个能力,用户的钱就这么烧了。

把这个指标做成了可视化看板,点击某天还能下钻到具体会话,看每条消息的缓存命中细节:

https://i.imgur.com/dsmyIkR.png

直接读 OpenCode 的 SQLite ,本地一个二进制就能跑。

GitHub: https://github.com/heimoshuiyu/opencode-token-dashboard

如果你也在用 OpenCode ,可以看看自己的缓存未命中是多少。

0 条回复
添加回复
你还需要 登录 后发表回复

登录后可发帖和回复

登录 注册
主题信息
作者: heimoshuiyu
发布: 2026-06-27
点赞: 0
回复: 0