Claude Code 的 /rewind,为什么回到旧回合还能吃到缓存
今天讨论的这个点很小,却很容易影响 Claude Code 长会话里的体感速度和成本判断。很多人看到/rewind,直觉会把它理解成一种撤销,像 Git 里把分支退回旧提交,或者像 IDE 里把文件恢复到某个历史版本。但在 Claude Code 里,/rewind牵涉的不只是代码文件,还牵涉对话历史、系统提示词、项目上下文,以及服务端 prompt caching 对请求前缀的复用。Claude Code 官方文档对 prompt caching 的解释很直接。每次我们在 Claude Code 里发出一条新消息,它都会产生一次新的 API 请求,模型自身不会跨请求保留记忆,所以 Claude Code 会重新发送完整上下文,包括 system prompt、项目上下文、历史消息、工具结果和新消息。新的内容会追加到末尾,于是相邻两次请求的大部分内容其实是相同的,prompt caching 就是用来避免重复处理这部分不变内容的机制。官方还明确说,API 会匹配请求开头的 prefix,匹配是精确的,只要 prefix 中某个位置发生变化,后面的部分就要重新计算,不存在按文件或按片段拆开的独立缓存。(Claude)把这个机制放回/rewind,事情就清楚了。/rewind做的事,是把当前对话截断回更早的某个 turn。截断之后,保留下来的历史内容,正