教程

Claude Cache Diagnostics 教程:定位 Prompt Cache Miss 的真正原因

Claude Cache Diagnostics 解决 prompt cache miss 难排查问题。通过传入上一次 response id,API 会比较请求 fingerprint,告诉你 model/system/tools/messages 哪个部分破坏了缓存 prefix。

2026/6/63分钟 阅读ClaudeEagle

Prompt caching 可以显著降低 Claude API 的成本和延迟,但前提是 prompt prefix 必须逐字节一致。问题是:一旦 cache miss,以前开发者只能看到 usage.cache_read_input_tokens 掉到 0,却不知道哪里变了。

Cache Diagnostics 就是为了解决这个痛点。


Cache Diagnostics 是什么?

它是 Anthropic 的 beta 功能,需要 beta header:

text
anthropic-beta: cache-diagnosis-2026-04-07

使用时,你把上一轮 response 的 id 传给下一轮请求:

json
{
  "diagnostics": {
    "previous_message_id": "msg_xxx"
  }
}

API 会比较两次请求的 fingerprint,并在响应中返回 diagnostics,告诉你第一个分歧点在哪里。


它能发现哪些问题?

常见 cache miss 根因包括:

  • model 变了
  • system prompt 里插入了时间戳
  • tools 顺序被重新排列
  • tool schema 生成顺序不稳定
  • 早期 message 被改写
  • 自动拼接上下文时多了空格或换行
  • 某些应用中间件修改了请求结构

这些变化都可能让 prompt prefix 失去 byte-for-byte identical,从而无法命中缓存。


基本用法

第一轮请求先启用 diagnostics:

json
{
  "model": "claude-opus-4-8",
  "max_tokens": 1024,
  "cache_control": {"type": "ephemeral"},
  "system": "You are analyzing a large document...",
  "messages": [
    {"role": "user", "content": "Summarize section 1."}
  ],
  "diagnostics": {"previous_message_id": null}
}

第二轮传入上一轮的 response id:

json
{
  "diagnostics": {
    "previous_message_id": "msg_012345"
  }
}

如果 diagnostics 是 null,表示没有发现 prefix divergence。若有 cache_miss_reason,就可以定位具体分歧。


如何和 usage 一起读?

Diagnostics 只说明请求结构是否分歧,不完全等于最终是否命中缓存。排查时应同时看:

  • usage.cache_read_input_tokens
  • usage.cache_creation_input_tokens
  • diagnostics.cache_miss_reason

如果 cache read 为 0 且 diagnostics 指向 tools 或 system,说明 prompt 构造确实变了。如果 diagnostics 没有分歧但仍 miss,可能是 cache TTL、模型/平台差异或 cache control 位置问题。


数据保留和安全

官方说明 fingerprints 只包含 hash 和 token-count estimates,不包含原始 prompt 内容;保留时间有限,并且仅用于组织和 workspace 内部的诊断。

该功能符合 ZDR eligibility,但有有限技术保留,应根据官方数据保留说明确认合规要求。


实战建议

  • 所有长会话 Agent 都应在测试环境开启 diagnostics
  • 对 tools 数组做稳定排序
  • 不要在 system prompt 里直接拼当前时间
  • 对自动生成的 schema 做 deterministic serialization
  • cache miss 时先查 diagnostics,而不是盲猜
  • 将 previous_message_id 链接到应用 trace,方便回放

来源:Anthropic 官方文档 - Cache diagnostics | 整理:ClaudeEagle

相关文章推荐

教程Claude Mid-conversation System Messages 使用指南:长会话不再破坏 Prompt CacheClaude Opus 4.8 新增 mid-conversation system messages,可在长会话中途追加系统级指令,不改顶层 system prompt,从而保持缓存 prefix 命中,降低 Agent 循环成本。2026/6/6教程Claude Prompt Caching 完整指南:降低长上下文成本与延迟的 API 实战Claude Prompt Caching 官方能力中文整理:适合缓存的内容、cache_control 使用方法、缓存断点策略、长文档和工具定义复用、成本/延迟收益、常见坑和生产环境落地建议。2026/5/21教程Claude Code 工作流成本优化实战:如何让并行 Agent 扇出复用提示前缀缓存详解 Claude Code v2.1.229 工作流扇出错峰执行优化:如何让共享相同提示前缀的并行子 Agent 复用提示缓存而非重复处理,附配置方法、适用场景和与 Prompt Caching 配置的联动调优建议。2026/8/13教程OpenClaw Prompt Caching 调优指南:cacheRetention、cache-ttl 修剪与心跳保温三件套详解 OpenClaw 提示缓存调优三大配置项:cacheRetention 缓存保留策略、contextPruning cache-ttl 上下文修剪、heartbeat 心跳保温,附配置合并优先级和不同场景的调优建议。2026/8/12教程Claude Batch Processing 完整指南:批量处理任务如何节省 50% API 成本Claude Batch Processing 官方能力中文整理:为什么批处理能省钱、如何创建 batch、custom_id 设计、轮询状态、下载结果、处理失败请求,以及适合大规模分类、摘要、翻译、数据清洗的任务模式。2026/5/21教程OpenClaw Session Pruning 与 Compaction 的区别:谁在悄悄给你的会话上下文瘦身详解 OpenClaw Session Pruning 会话修剪机制:如何在每次 LLM 调用前修剪旧的工具调用结果以降低成本,与 Compaction 压缩机制的区别与配合方式,附智能默认值和手动配置方法。2026/8/12