我今天正在整理 Claude Code 的 prompt caching 机制时,发现一个很容易被低估的细节,很多时候 Claude Code 变慢,并不是模型突然退化,也不是网络抖了一下,而是我们在会话中间做了一次模型切换。终端里看起来只是敲了一个/model,背后却等于让 Claude Code 带着整段上下文,去另一个模型那里重新排队、重新读取、重新建立缓存。Anthropic 的 Claude Code 文档把这件事讲得很直接,Claude Code 每次发送消息都会发起新的 API request,模型本身不会在两次 request 之间保留记忆,所以 Claude Code 会把 system prompt、项目上下文、历史消息、工具结果和新消息一起重新发送。prompt caching 的价值就在这里,它会复用前面已经处理过的 prompt prefix,只处理新增部分。这个 prefix 匹配是精确匹配,前面的内容一旦变了,后面的部分就要重新计算。说到模型切换,最容易踩坑的点在于,cache 不只是和文本内容有关,也和 model 绑定在一起。Anthropic 文档明确说明,每个 model 都有自己的 cache,用/model切换模型以后,即使会话内容完全相同,下一次 request 也会读取完整 conversation history,并且没有 cache hit。这和很多开发者对缓存的直觉不太一样。我们平时做后端,想到 cache key,可能会想到 URL、参数、用户 ID、tenant、locale、权限范围。到了 Claude Code 这里,model 本身也是 cache key 的核心组成部分。Sonnet 处理过的一