kimik3.io/定价/提示词缓存

Kimi K3 提示词缓存

缓存命中的输入 $0.30 / 百万 token,未命中 $3.00——同样的 token,价差 10 倍。触发机制月之暗面(Moonshot AI)几乎没写进文档,所以我们自己实测了一遍。

K3 的缓存在前缀重复时自动触发——不需要任何参数。同一个前缀发两次,第二次调用里重复的部分按 $0.30 / 百万 token 计费,而不是 $3.00。文档没写、我们实测出来的三件事:命中按 256 token 为一块计算,凑不满一块的尾部不进缓存;第一次发送的前缀一律全价,不存在部分缓存;prompt_cache_key 没有产生任何可测出的差别

实测于 2026-07-16,走 api.moonshot.ai,模型 kimi-k3——测量方法

自动触发:首次全价,重复才有折扣

缓存没有开关,也不需要任何参数:只要这次请求的开头(前缀)和之前某次请求完全一致,就会自动命中。有没有命中、命中了多少,看响应里的 usage.prompt_tokens_details.cached_tokens 字段就知道。

我们生成了一批从未发送给月之暗面的全新随机前缀,确保第一次调用之前不可能存在任何缓存——下文把这种第一次调用称作「冷调用」,重复发送称作「热调用」——然后把每个前缀原样发送两次:

// 第一次调用,全新的 12,504 token 前缀
"usage": {
  "prompt_tokens": 12504,
  "completion_tokens": 32
  // 完全没有 cached_tokens 字段
}

// 第二次调用,前缀逐字节相同,约 2 秒后
"usage": {
  "prompt_tokens": 12504,
  "completion_tokens": 32,
  "prompt_tokens_details": {"cached_tokens": 12288}   // 96 个 256 token 的块
}

从 1.3k 到 29k token,我们测过的每一个前缀,冷调用的缓存命中都是 0。第一次发送没有任何折扣,折扣从第二个请求起才存在——也就是说,前缀从不重复的业务永远享受不到,提示词再大也没用。

块大小是 256 token

缓存命中不是按单个 token 计算的。九组测试里,cached_tokens 每一次都是 256 的整数倍,凑不满一块的尾部(最多 255 token)不缓存:

从未发送过的全新前缀,先冷调用再热调用。kimi-k3,2026-07-16。
prompt_tokens 冷:命中 热:命中 未缓存尾部 块数(÷256)
1,32401,280445
2,51102,3042079
5,06104,86419719
7,22807,1686028
10,09509,98411139
12,504012,28821648
14,428014,3369256
20,056019,9688878
28,986028,92858113

未缓存的尾部永远凑不满一块

每个热前缀未缓存的 token 数 · 九组前缀,1.3k–29k · 实测于 2026-07-16

256 = 一个缓存块 0 128 256 1,324 token 前缀——未缓存 44 2,511 token 前缀——未缓存 207 5,061 token 前缀——未缓存 197 7,228 token 前缀——未缓存 60 10,095 token 前缀——未缓存 111 12,504 token 前缀——未缓存 216 14,428 token 前缀——未缓存 92 20,056 token 前缀——未缓存 88 28,986 token 前缀——未缓存 58 44 207 197 60 111 216 92 88 58 1.3k 2.5k 5k 7.2k 10k 12.5k 14.4k 20k 29k 前缀大小(token)
尾部以上的部分全部由缓存按 $0.30 / 百万 token 提供。尾部的上限就是 256 token 的块大小——对 29k 的前缀只是零头,对小前缀却可能是提示词的大半。

实际结论就是:缓存的收益与前缀大小成正比。一个 300 token 的前缀最多只有一个可缓存的块,外加最多 255 token 缓存不了的尾部——你提示词的大半都在按全价走。一个 50k 的前缀有将近 200 个块,尾部只是零头。小提示词就别为缓存命中做工程优化了。

prompt_cache_key:我们测不出任何效果

月之暗面的 API 文档里列了一个 prompt_cache_key 参数,描述是用于会话级缓存,多轮对话「推荐」使用。照这个描述,你会以为缓存要靠它才能开启。实测并非如此——至少对前缀复用来说不是。

我们做了一组干净的对照测试:全新前缀,第一次调用就显式带上 prompt_cache_key,然后再发一次完全相同的调用。结果和不带 key 的情况分不出任何差别

全新前缀,各约 10k token。2026-07-16。
设置第 1 次:命中第 2 次:命中
不带 prompt_cache_key09,984
prompt_cache_key09,984

冷调用同样未命中,热调用同样命中。该做的,自动前缀缓存已经全做了。重复前缀的业务不需要这个参数——如果你加了它并指望换来折扣,那折扣也不是它给的。

省钱但不省时间

这一条出乎我们意料。直觉上,缓存命中省掉了计算,理应更快。但对同一前缀比较冷、热两次调用,总耗时并没有稳定变快

同一前缀,先冷调用再热调用,非流式。2026-07-16。
prompt_tokens变化
1,3243.56s3.80s变慢
2,5113.02s4.29s变慢
7,2283.99s3.54s变快
14,4284.38s4.27s≈ 持平
28,9865.22s3.78s变快

在这些规模下,批次间的随机波动完全淹没了缓存效应——别忘了 K3 每次调用都要花几秒推理,这才是耗时的大头。把提示词缓存当成计费优化,而不是延迟优化。要提速,看我们的延迟实测

缓存能保持多久

一个预热的前缀在 210 秒后仍返回同样的 12,032 个缓存 token,在 30 秒、90 秒、210 秒三次探测中没有任何衰减。

这是下限,不是 TTL——我们探测到这里就停了。月之暗面没有公布 TTL、没有公布最小前缀长度,也没说缓存写入是否额外收费,我们不会替它编数字。能确定的是:几分钟内复用的前缀仍会命中缓存,这已经覆盖了最要紧的 agent 循环场景。

怎样稳定拿到缓存价

  • 把稳定的字节放最前面。系统提示词、工具定义、长文档排在前头;每轮变化的用户输入放最后。缓存匹配的是前缀——靠前的一处改动会让它后面的全部失效。
  • 别让会变的内容混进前缀。一个时间戳、一个请求 ID、一段键序被重排的重新序列化 JSON——任何一个都会改变字节,让你悄无声息地掉回 $3.00 / 百万 token。这是团队丢了折扣却毫无察觉的最常见方式。
  • 同一个前缀的请求集中发。针对同一份文档的二十个问题,应该是一个热前缀加二十条短尾巴。
  • 小提示词别做缓存工程。低于约 256 token 时没东西可缓存;低于约 1k 时,尾部就是账单的大头。
  • 接受冷调用。每个冷周期的第一个请求都要付全价。把它算进预算,而不是想方设法绕开它。
  • 在生产环境盯住 cached_tokens这是确认命中率符合预期的唯一办法。字段没出现,就是没命中。

这个价差值多少钱

一个带 50,000 token 固定前缀的 agent,每天处理 200 个请求——日均 1,000 万输入 token:

场景费率每天每 30 天
每个请求都未命中$3.00 / 1M$30.00$900.00
前缀持续命中缓存$0.30 / 1M$3.00$90.00
差额$27.00$810.00

按 2026-07-16 官方费率的算术推演,只算输入。便宜的那一行是理想化的——冷调用照付全价,尾部永远不缓存。输出无论如何都按 $15.00/1M 计费,而在这种负载下,推理 token 的开销可能超过你的全部输入账单。这是上下限,不是报价。

测测你自己的命中率

这里的每个数字,几分钟就能复现。EvoLink 在 OpenAI 兼容接口上承载 kimi-k3——注册即送 10 个免费额度。

获取 EvoLink API key