案例:Headroom 代理 vs DeepSeek Prefix Caching 冲突排查

日期: 2026-06-07 排查人: 大锤 → 老克 → Peter 系统链路: Hermes Agent → Headroom(localhost:8787) → DeepSeek V4 Flash API


背景

预期通过 Headroom 代理的上下文压缩功能降低 token 消耗和 API 费用。安装后使用一天,发现费用异常——单纯对话(无编码)的日消耗超过平时一整天(含高强度编码)的费用。

排查过程

第一轮:定价假设偏差

错误假设: DeepSeek V4 Flash 的缓存折扣为 50%(0.07/M)——来自第三方博客和 Headroom 内部计算。

事实: DeepSeek 官方定价显示缓存命中价仅 $0.0028/M,是全价的 2%,即 98% 折扣。一个定价假设的偏差导致整篇分析结论全歪。

教训: API 定价必须查官方文档,第三方估算值标注”需验证”。

第二轮:Headroom 压缩效果实测

指标数值
请求总数458
输入 tokens(压缩前)41,379,628
输入 tokens(压缩后发 API)24,568,077
压缩节省16,811,551(40.6%)
输出 tokens147,969

第三轮:缓存命中率分析

指标数值
缓存读取 tokens20,012,544
缓存写入 tokens594,556
未缓存 tokens4,555,533
Token 级缓存命中率79.5%
请求级缓存命中率99.8%

几乎每个请求都有部分缓存命中,但命中率不高。

第四轮:根因定位

矛盾链:

  1. Hermes CCR(对话压缩)在上下文达到 ~64K 时触发(今日 38 次)
  2. CCR 每次做三件事:重写消息结构、追加压缩提示到 system prompt、旋转 session_id
  3. Headroom 的 SessionTrackerStore(model + system_prompt[:500]) 哈希标识会话
  4. CCR 改了这两者 → Headroom 认为新会话 → prefix freeze 重置
  5. DeepSeek 的前缀缓存从零开始积累
  6. 38 次 CCR = 38 次缓存硬重置

Headroom 统计盲区: tokens_lost_to_cache_bust = 0——它只跟踪自身 SmartCrusher 导致的缓存失效,不知道上游 CCR 的存在。

最终方案

拆掉 Headroom,Hermes 直连 DeepSeek API。

费用对比

时段模式费用
5月(2000+ 消息超长会话)直连 DeepSeek¥2-3/天
今天(191 轮对话)经 Headroom¥3.93/天
预判直连后直连 DeepSeek更低

关键:直连时前缀稳定,缓存几乎全命中(0.14/M),得不偿失。

关键发现

  1. 多层优化工具可能互相抵消: CCR 压缩 → 打断缓存 → 成本反升
  2. 不要假设”多一层总是好的”: 引入优化工具前应设基准线,安装后对比验证
  3. API 定价以官方为准: 一次定价引用错误可让整篇分析结论全歪
  4. DeepSeek 缓存价值远超预期: $0.0028/M 的超低价意味着缓存稳定性比压缩更重要

方法论沉淀

引入优化工具前的验证清单

  • 当前基准线已记录(token 数 + 费用)
  • 只引入一个优化层(避免多变量干扰)
  • 该工具会否与现有层冲突?(压缩 vs 缓存、路由 vs 限流等)
  • 有明确的成功/失败判定标准

API 定价信息源分级

级别来源可信度
A官方定价页面高,直接使用
B官方 SDK/API 响应高,但需确认字段含义
CHeadroom/OpenRouter 等代理计算中,需交叉验证
D第三方博客/评测低,标注”需验证”

后续跟踪

  • Headroom 项目迭代中(PR #625 prefix stability pinning),日后若解决上游压缩破坏缓存问题,可重新评估
  • 每月复核一次 DeepSeek 缓存命中率和费用趋势