为什么prompt cache里不能让每个token都成为cache breakpoint
回复 群友 5892: 不是原理上不能,而是“每个 token 都能作为复用边界”和“API 允许每个 token 设置 breakpoint”是两回事。 可以把 breakpoint 理解成书签:表示“到这里为止的整个前缀,要留下一个可复用入口”,不是只缓存书签所在的那个 token。 从推理原理看,对于常见的因果 Transformer,前缀不变、计算条件一致,就可以复用对应的 KV。因此,实现逐 token 的前缀复用在原理上是可行的。 但工程上不一定划算:每个位置都暴露成缓存入口,会增加索引、查找、过期管理等开销;按块组织更容易批量管理和搬运。这里不意味着必须把所有前缀各复制一份,底层可以共享存储。 而且,粒度更细不能突破前缀依赖。例如: 旧请求:A B C D 新请求:A X C D 即使每个 token 都有断点,通常也只能复用 A,后面的 C D 不能因为文字一样就直接复用,因为它们的上下文变了。 具体到 Claude,官方当前规定:断点设在内容块边界,最多 4 个,并有最低缓存长度。这是接口和工程选择,不是 Transformer 的数学限制;官方也没有公开说明“为什么恰好选 4 个”。 所以核心是:更细的粒度能减少一点重算,但要付出更多管理成本,不一定更快、更省。 官方文档: https://platform.claude.com/docs/en/build-with-claude/prompt-caching