Claude Code 的 Cache Scope,为什么缓存会认机器、目录和前缀

📅 2026/7/3 11:12:34
Claude Code 的 Cache Scope,为什么缓存会认机器、目录和前缀
我今天看 Claude Code 的 prompt caching 时,最容易误判的点不是 TTL,也不是 5 分钟和 1 小时的价格差,而是 cache scope。很多人会自然以为,只要是同一个 Git 仓库、同一个模型、同一段对话,缓存就应该复用。实际运行起来,经常出现一个很反直觉的现象,同一个项目换了目录,命中率突然掉下去。同一台机器开两个 worktree,一个在repo-main,一个在repo-feature,明明代码历史很接近,Claude Code 却像遇到一个新世界,又从头构建 prefix。这个现象不是 bug,而是 Claude Code 的设计选择。Anthropic 的 Prompt caching 文档说得很清楚,缓存是在 prompt 的某个 prefix 上恢复,主要目的是减少重复任务、固定上下文和长对话里的处理时间与成本,命中时不用重新处理整段重复输入。官方文档还说明,prompt caching 会引用tools、system、messages这个顺序里的完整 prefix,直到被标记为 cache control 的 block 为止。也就是说,所谓缓存,不是简单缓存一句问题,也不是缓存某个仓库名,而是缓存一段从工具定义、系统提示词到消息历史的连续前缀。只要前缀中较靠前的位置发生变化,后面的缓存自然跟着失效。回到 Cache scope 这块,Claude Code 在交互式编码场景里会把运行环境塞进 system prompt。这里面包含 working directory、平台、当前 shell、OS 版本、是否处于 Git 仓库、自动记忆路径等动态信息