Most teams think about prompt caching as a cost switch. You mark a long, stable block (system prompt, tool definitions, policy text, retrieved reference docs) and the provider reuses the computed key-value tensors for that prefix, billing the reused tokens at a lower rate. The mechanism is exact-match and correctness-neutral: a hit returns the same output as a miss, because the model recomputes nothing it has already seen the vLLM design notes and the caching primer both make this point.
Prefix drift is a different failure. The cache still works. The prefix still matches byte for byte, so you keep getting hits and keep getting the discount. What has changed is the relationship between the cached block and the instructions that follow it. The system block says "you are drafting a renewal email for enterprise accounts." The live instruction block, edited two sprints ago by someone on a different team, now says "summarize the churn risk for this account." Both blocks are individually valid. Together they describe two jobs, and the model splits the difference.
The cost data makes the exposure concrete. Cache reads bill at roughly a tenth of base input on Anthropic and on OpenAI's newer models, so the prefix is the cheap part of the bill the cross-provider guide. The instructions are small in tokens and expensive in consequence. That asymmetry is exactly why drift slips through: cost dashboards cannot see it, and the hit rate stays healthy while the output degrades.
A worked example. A 12,000-token shared prefix at a $3 per million token base rate costs $0.036 uncached and $0.0036 cached. Over 5,000 calls a day that is $180 versus $18 for the stable block. Nobody tears down a cache that is saving $162 a day. But if the instructions have drifted, you are paying $18 a day for a prefix that actively misleads the model on every one of those 5,000 calls. Cheap and wrong is the worst quadrant.



