---
title: "缓存命中与压缩的实测画像"
description: "一份 21 天的本机埋点显示缓存命中率 97.3%，91.9% 的单次调用命中率不低于 90%；71 次 micro-compact 中 94.4% 触发于命中率 90% 以上，压缩后未见命中率崩塌。"
---

> Documentation Index
> Fetch the complete documentation index at: https://konghayao.github.io/peri-cool/llms.txt
> Use this file to discover all available pages before exploring further.

# 缓存命中与压缩的实测画像

结论先列在这里，口径与限制在下面。

1. 全期缓存命中率 **97.3%**，分子 3,831,076,279 token，分母 3,938,799,621 token。
2. 命中率不是被少数长会话拉起来的：**91.9% 的单次调用其命中率本身就不低于 90%**，其中 55.6% 不低于 99%。
3. **`micro-compact` 很少见**：窗口内只有 71 次，平均压缩幅度 7.05%，估算节省合计只占全期输入 token 的 0.021%。
4. **未观察到压缩导致命中率崩塌**：压缩后 60 秒内的命中率与从未压缩过的窗口相差 2.3 个百分点，且不呈单调关系。
5. 无法给出金额结论：数据里没有缓存写入量与定价信息。

## 数据底稿与口径

1. **来源**：本机遥测库，只读打开，未写入、未修改任何记录。
2. **范围**：一个主数据集（单机环境），214,394 条观测、44,327 条模型调用记录、2,241 条 trace、1,138 个会话。
3. **窗口**：2026-08-01 至 2026-08-28，其中 21 天有数据。
4. **token 完整率 100%**：44,327 条模型调用记录全部带 token 明细，缓存类结论不受字段缺口影响。
5. **缓存可用样本 42,859 条**（占 96.7%）：排除了输入为 0 或缺少缓存字段的记录。
6. **剔除项**：另一个 project 只有 85 条观测，样本量过小，整体排除。

**命中率的分母必须写清楚**。本文采用的口径是：

```text
命中率 = 缓存读取 token / 输入 token（input 为含缓存的毛输入）
```

这个口径有四条互相独立的依据：实现里命中率的分母就是输入 token；44,327 条记录中没有任何一条出现「输入小于缓存读取」；总量满足「输入加输出等于总量」；本机记录与服务端聚合给出的命中率一致。

**如果换成分母为「缓存读取加输入」的算法，全期结果会从 97.3% 变成 49.3%**，与本机自身记录（触发时命中率均值 0.9455）和服务端聚合（97.2%）同时矛盾。这是本文唯一需要读者留意的口径陷阱。

## 缓存命中率 97.3%

| 指标 | 分子 | 分母 | 数值 |
| --- | ---: | ---: | ---: |
| 全期命中率 | 3,831,076,279 | 3,938,799,621 | 97.3% |
| 服务端聚合命中率 | 3,754,306,103 | 3,860,772,008 | 97.2% |
| 输出占总量比 | 27,572,028 | 3,966,371,649 | 0.70% |

调用级别的分布说明这不是均值效应。

| 单次调用命中率 | 调用数 | 占比 |
| --- | ---: | ---: |
| 99% ~ 100% | 23,812 | 55.6% |
| 90% ~ 99% | 15,585 | 36.4% |
| 50% ~ 90% | 2,676 | 6.2% |
| 低于 50% | 786 | 1.8% |

1. 每五次调用里，有将近三次的命中率在 99% 以上。
2. 低于 50% 的调用只有 1.8%，且没有任何一条调用命中率低于 1%。
3. 按模型看，有足够样本的七个模型都落在 88.7% 到 97.6% 之间：`deepseek-v4-flash` 97.6%（31,975 次）、`peri-sonnet` 97.5%（4,510 次）、`gpt-5.6-sol` 94.9%（2,892 次）、`deepseek-v4-pro` 97.4%（2,101 次）、`mimo-v2.5` 92.7%（1,368 次）、`gpt-5.6-terra` 93.6%（677 次）、`peri-opus` 88.7%（216 次）。
4. 样本少于 500 次的模型（`gpt-5.6-luna` 456 次、`gpt-4o` 23 次、`peri-fable` 2 次）缺少可比的缓存字段或样本太少，不纳入比较。

## 逐日波动

1. 逐日命中率最低是 **91.6%**（2026-08-25，886 次调用）。
2. 逐日命中率最高是 **98.9%**（2026-08-08，836 次调用）。
3. 多数日子集中在 95% 到 98% 之间。
4. 命中率的日间分布与输入字段埋点缺口、与压缩策略切换**没有观察到耦合**。

需要说明的是，低值日正好也是样本量最小的几天之一（8-25 的 886 次、8-24 的 375 次、8-28 的 254 次），样本越小的日子越容易偏离整体水平。这里只做描述，不做因果归因。

## compact 很少见，幅度也不大

1. 统计期内共 **71 次 `micro-compact`**，全部由自动触发。
2. 平均压缩前规模 166,882 token，压缩后 155,124 token，平均估算节省 11,758 token，相对降幅 **7.05%**。
3. 71 次压缩的估算节省合计 834,823 token，只相当于全期输入 token 的 **0.021%**。
4. 单次节省的最小值为 0，最大值为 114,896 token（估算），差异很大。
5. 其中 57 次（80.3%）就地完成，14 次（19.7%）升级为更大范围的压缩；升级原因里 13 次是阈值超出，1 次是回收不足。
6. 统计期内没有一次压缩失败。
7. 平均耗时 31,146 毫秒（约 31 秒），这个耗时不可忽略。
8. `micro_cleared` 字段在 71 次记录里**全部为 0**：这是一条观察，成因在数据中没有找到证据，不能读成正常或异常。

上述节省数字全部来自带 `estimated_` 前缀的估算字段，必须按估算对待，不能当作实际节省。

## compact 与缓存的关系

| 分组 | 调用数 | 平均单次命中率 |
| --- | ---: | ---: |
| 压缩后 60 秒内 | 592 | 0.9486 |
| 压缩后 1 到 10 分钟 | 1,781 | 0.9712 |
| 压缩后 10 分钟以上 | 7,373 | 0.9549 |
| 该窗口内从未压缩 | 359 | 0.9663 |

1. **触发时缓存几乎总是热的**：94.4% 的压缩发生在命中率不低于 0.9 时，74.6% 发生在不低于 0.99 时，触发时命中率均值 0.9455。
2. **四组极差只有 0.0226（2.3 个百分点）**，且不呈单调关系：60 秒内最低，1 到 10 分钟反而最高。
3. **结论限定在「未见崩塌」**：2.3 个百分点无法排除会话难度、任务类型、时间分布等混杂因素，这是推断而不是机制事实。
4. 要做因果结论，需要同一会话内的对照，本数据不具备该条件。

## 交叉验证

1. **自下而上与服务端聚合对齐**：由观测明细汇总的输出 token 合计 27,572,028，与服务端聚合值完全相等。
2. **输入侧相差 30,000 token，相对差 0.0008%**，属可接受范围。
3. **两个口径的命中率互相验证**：明细侧 97.3%，服务端侧 97.2%。

## 替代解释

1. **工作负载本身高度重叠**：这份数据来自工具密集型、多轮迭代的长会话环境，上下文天然重叠，命中率高是这种负载的正常结果。
2. **窗口是历史数据**：2026 年 8 月的记录，当前版本行为可能已经变化。
3. **少量大 day 主导总量**：8-11 单日 8,273 次调用，占总量的近两成，全期命中率受大样本日影响明显。

## 诚实边界

1. **不能给金额结论**：缓存写入量字段在全部 44,327 条记录中都不存在，也没有定价信息，因此无法计算费用节省或净收益。
2. **不能把估算当实际**：所有压缩节省数字都带「估算」二字，来源是自述为估算的字段。
3. **不能比较 8-15 前后**：该日前后的压缩记录命名口径不同，且此前记录缺少必要字段，任何「压缩变多或变少」的说法都不成立。
4. **不能跨 8-18 至 8-23 做前后对比**：这连续六天完全没有数据。
5. **不能用 8-08 至 8-14 做提示词组成分析**：该窗口的输入字段完整率为 0%。
6. **不能代表全部用户**：这是单机单人的环境（3 个 user_id、1 个主 project），样本严重偏向这台机器的工作负载。
7. **不能把统计期内的观察外推到其他用法**：以短对话为主的用法，命中率很可能显著不同。

## 局限

1. 有效窗口只有 21 天，且是采集时点约四个月前的历史数据。
2. 压缩样本仅 71 次，分布在 6 个不连续的日子，任何分组都会落到个位数量级，统计功效不足。
3. 压缩缺少「未触发」对照组，无法回答「如果不压缩会怎样」。
4. 5.63% 的观测存在父链断裂，不影响 token 与缓存字段，但影响一切依赖父子关系的分析。
5. 有个别分组（例如压缩时命中率为 0 的记录）样本极少，本文未对其单独下结论。

## 复核方式

1. 所有数字来自只读查询，未做估算与补齐。
2. 关键口径已交叉验证：明细汇总与服务端聚合、命中率与触发时记录三方吻合。
3. 命中率的两个分母算法都列出过数值，读者可用自己的数据复算并比对。

继续阅读[工具 token 消耗](/peri-cool/posts/research/tool-token-consumption/)与[超长会话统计画像](/peri-cool/posts/research/long-session-study/)。

Source: https://konghayao.github.io/peri-cool/posts/research/cache-hit-rate-study/index.mdx
