agent-Specialization/cache_research/official_china/usage_fields_reference.md
JOJO 3a4ea67e26 feat(stats): token 统计新增缓存命中追踪与命中率展示
- utils/token_usage.py:usage 归一化补全缓存命中字段提取,覆盖
  prompt_tokens_details/input_tokens_details.cached_tokens(OpenAI 系)、
  顶层 prompt_cache_hit_tokens(DeepSeek)、顶层 cached_tokens(Kimi/Step)、
  cache_read_input_tokens(Anthropic 系)、cachedContentTokenCount(Gemini);
  Anthropic 语义下把缓存读/写加回总输入以统一口径,normalize 保持幂等
- 对话级统计新增 total_cached_input_tokens 与 cache_exempt_input_tokens
  (首轮/深度压缩后首轮未命中缓存的输入视为冷启动成本,豁免出命中率分母;
  压缩通过 cache_cold_start_pending 标记在下一次真实调用时判定)
- token_update 广播与 token-statistics 接口同步携带新字段
- TokenDrawer 面板新增「累积缓存输入」「缓存命中率」(前端按 缓存/(总输入-豁免) 换算)
- 深色模式下「当前上下文」数字由灰色 --accent 改为 --text-primary(白)
- 附 cache_research/ 各厂商缓存字段调研文档(代码注释引用)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-29 12:16:48 +08:00

3.8 KiB
Raw Blame History

国内官方 LLM API 缓存字段速查(官方示例 JSON 摘录)

配套报告:同目录 README.md。以下 JSON 均为各厂商官方文档原文示例摘录,直接复制进实验脚本对照。

1. DeepSeek —— usage 顶层命中/未命中

"usage": {
  "prompt_tokens": 16,
  "completion_tokens": 10,
  "total_tokens": 26,
  "prompt_cache_hit_tokens": 0,
  "prompt_cache_miss_tokens": 16,
  "completion_tokens_details": { "reasoning_tokens": 0 }
}

2. Moonshot Kimi —— usage 顶层 cached_tokens官方示例原文

非流式响应:

"usage": { "prompt_tokens": 19, "completion_tokens": 21, "total_tokens": 40, "cached_tokens": 10 }

流式响应(最后一个 chunkfinish_reason=stop 时携带):

"usage": {"prompt_tokens":19,"completion_tokens":13,"total_tokens":32,"cached_tokens":12}

请求参数 prompt_cache_key(官方原文):“用于缓存相似请求的响应以优化缓存命中率。对于 Coding Agent通常是代表单个会话的 session id 或 task id退出并恢复会话时应保持不变。对于 Kimi Code Plan此字段为必填以提高缓存命中率。” 官方《上下文缓存指南》PDF 示例亦出现 usage.prompt_tokens_details.cached_tokens,两处并存,实验需双读。)

3. 通义千问 Qwen阿里云百炼OpenAI 兼容)

隐式命中:

"usage": { "prompt_tokens": 3019, "completion_tokens": 104, "total_tokens": 3123,
           "prompt_tokens_details": { "cached_tokens": 2048 } }

显式cache_control ephemeral

"usage": { "prompt_tokens": 2174, "completion_tokens": 0,
           "prompt_tokens_details": { "cache_creation_input_tokens": 2156, "cached_tokens": 0 } }
// 第二次请求命中cache_creation_input_tokens=0, cached_tokens=2156

原生 DashScopeusage.prompt_tokens_details['cached_tokens'](部分海外地域视觉模型为顶层 usage.cached_tokens,官方注明后续升级)。

4. 智谱 GLM

官方文档只给出字段名,未公布具体示例数字,以下为字段结构示意(值用占位符):

"usage": { "prompt_tokens": <int>, "completion_tokens": <int>, "total_tokens": <int>,
           "prompt_tokens_details": { "cached_tokens": <int> } }

5. 字节豆包(火山方舟 Context Chat API

"usage": { "prompt_tokens": 28, "completion_tokens": 4, "total_tokens": 32,
           "prompt_tokens_details": { "cached_tokens": 18 } }

(需创建 ctx-* 缓存并传 context_id或 Responses API 传 "caching":{"type":"enabled"} / previous_response_id。)

6. MiniMax

OpenAI 兼容格式:

"usage": { "prompt_tokens": 1200, "completion_tokens": 300, "total_tokens": 1500,
           "prompt_tokens_details": { "cached_tokens": 800 } }

Anthropic/Messages 格式(自动或显式均可出现):

"usage": { "input_tokens": 108, "output_tokens": 91,
           "cache_creation_input_tokens": 0, "cache_read_input_tokens": 14813 }

7. 阶跃星辰 Step —— usage 顶层 cached_tokens

"usage": { "cached_tokens": 512, "prompt_tokens": 591, "completion_tokens": 120, "total_tokens": 711 }

8. 百度文心(千帆 ModelBuilder

"usage": { "prompt_tokens": 159, "completion_tokens": 89, "total_tokens": 248,
           "prompt_tokens_details": { "cached_tokens": 128 } }

统一读取优先级(实验脚本建议)

usage = resp.get("usage") or {}
pdet = usage.get("prompt_tokens_details") or {}
cached = (
    usage.get("prompt_cache_hit_tokens")          # DeepSeek
    or usage.get("cached_tokens")                  # Kimi / Step / 部分 DashScope
    or pdet.get("cached_tokens")                   # Qwen/GLM/豆包/MiniMax/千帆
    or pdet.get("cache_read_input_tokens")         # Anthropic 兼容
    or 0
)