प्रॉम्प्ट कैशिंग और लागत अनुकूलन
यदि आपके कई अनुरोध एक बड़ा, अपरिवर्तनीय हिस्सा साझा करते हैं — एक लंबा सिस्टम प्रॉम्प्ट, एक बड़ा दस्तावेज़, एक टूल कैटलॉग — तो प्रॉम्प्ट कैशिंग API को हर कॉल पर उसे फिर से पढ़ने के बजाय संसाधित प्रीफ़िक्स का पुनः उपयोग करने देती है। यह कैश्ड हिस्से पर लागत और लेटेंसी दोनों घटाती है।
- मानसिक मॉडल: एक स्थिर प्रीफ़िक्स के बाद एक कैश ब्रेकपॉइंट, जिसे कॉल्स में पुनः उपयोग किया जाता है
- Python और TypeScript में cache_control के साथ ब्रेकपॉइंट को कैसे चिह्नित करें
- वह एक अपरिवर्तनीय नियम जो इसे बनाता या बिगाड़ता है — प्रीफ़िक्स बाइट-दर-बाइट समान होना चाहिए
- यह पुष्टि करने के लिए usage फ़ील्ड्स को कैसे पढ़ें कि आपको वास्तव में कैश हिट मिल रहे हैं
- कैशिंग सबसे ज़्यादा कहाँ फ़ायदेमंद है, और इसे बैचिंग व सही आकार चुनने के साथ कैसे जोड़ें
यह कैसे काम करता है (मानसिक मॉडल)
आप स्थिर प्रीफ़िक्स के बाद एक कैश ब्रेकपॉइंट चिह्नित करते हैं। पहली कॉल पर इसे संसाधित और कैश किया जाता है; आगे की कॉल्स जो बिल्कुल वही प्रीफ़िक्स साझा करती हैं, वे कैश हिट करती हैं और उसके लिए बहुत कम भुगतान करती हैं।
ब्रेकपॉइंट चिह्नित करें (कॉपी-पेस्ट)
cache_control को अंतिम स्थिर ब्लॉक में जोड़ें — यहाँ, एक बड़ा सिस्टम प्रॉम्प्ट। उपयोगकर्ता की बारी इसके बाद आती है और स्वतंत्र रूप से बदलती रहती है; चिह्नित ब्लॉक तक और उसे शामिल करके सब कुछ कैश किया जाता है।
- वह बड़ा, अपरिवर्तनीय हिस्सा ढूँढें — एक लंबा सिस्टम प्रॉम्प्ट, एक बड़ा दस्तावेज़, या कई अनुरोधों में पुनः उपयोग किया जाने वाला एक टूल कैटलॉग।
- अंतिम स्थिर ब्लॉक को ephemeral प्रकार के cache_control से चिह्नित करें, ताकि उस तक और उसे शामिल करके प्रीफ़िक्स कैश हो जाए।
- उपयोगकर्ता की बारी को चिह्नित ब्लॉक के बाद रखें — यह हर कॉल पर स्वतंत्र रूप से बदलती है और पूरी कीमत पर बिल की जाती है।
- प्रतिक्रिया usage से cache_read_input_tokens पढ़ें। शून्य से अधिक का मतलब है कि आपको कैश हिट मिला।
- Python
- TypeScript
import anthropic
client = anthropic.Anthropic()
message = client.messages.create(
model="claude-sonnet-5",
max_tokens=1024,
system=[
{
"type": "text",
"text": LARGE_STABLE_PROMPT, # long, unchanging — the cached prefix
"cache_control": {"type": "ephemeral"},
}
],
messages=[{"role": "user", "content": "Summarize the key points."}], # varies per call
)
print(message.usage.cache_read_input_tokens) # > 0 means you got a hit
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic();
const message = await client.messages.create({
model: "claude-sonnet-5",
max_tokens: 1024,
system: [
{
type: "text",
text: LARGE_STABLE_PROMPT, // long, unchanging — the cached prefix
cache_control: { type: "ephemeral" },
},
],
messages: [{ role: "user", content: "Summarize the key points." }], // varies per call
});
console.log(message.usage.cache_read_input_tokens); // > 0 means you got a hit
पहली कॉल कैश को भरने के लिए एक छोटा राइट प्रीमियम चुकाती है; उसी प्रीफ़िक्स वाली हर बाद की कॉल इसे इनपुट कीमत के एक अंश पर वापस पढ़ती है। प्रीफ़िक्स पात्र होने के लिए पर्याप्त लंबा होना चाहिए — कुछ हज़ार टोकन, मॉडल पर निर्भर — वरना यह चुपचाप कैश नहीं होगा।
वह अपरिवर्तनीय नियम जो इसे बनाता या बिगाड़ता है
:::warning कैशिंग प्रीफ़िक्स-सटीक होती है एक कैश हिट के लिए ज़रूरी है कि कैश्ड प्रीफ़िक्स बाइट-दर-बाइट समान हो। सबसे आम बग: प्रॉम्प्ट के शीर्ष के पास एक मौन अमान्यकर्ता — एक टाइमस्टैम्प, एक बदलता यूज़र नाम, एक पुनः-व्यवस्थित टूल सूची — जो प्रीफ़िक्स को बदल देता है और चुपचाप आपकी हिट दर को शून्य कर देता है। :::
हर स्थिर चीज़ को पहले रखें, हर परिवर्तनशील चीज़ को अंत में, और प्रीफ़िक्स को वास्तव में स्थिर रखें।
जाँचें कि यह वास्तव में काम कर रहा है
मान न लें — इसे प्रतिक्रिया के usage से वापस पढ़ें:
cache_creation_input_tokens— इस कॉल में कैश को लिखे गए टोकन (पहला अनुरोध)।cache_read_input_tokens— कैश से परोसे गए टोकन (बचत)।input_tokens— बिना कैश वाला शेष, पूरी कीमत पर बिल किया गया।
यदि उन दोहराए गए अनुरोधों में जिन्हें एक प्रीफ़िक्स साझा करना चाहिए, cache_read_input_tokens शून्य बना रहता है, तो कोई मौन अमान्यकर्ता सक्रिय है — इसे ढूँढने के लिए दो कॉल के बीच रेंडर किए गए प्रॉम्प्ट बाइट्स का अंतर निकालें।
यह सबसे ज़्यादा कहाँ फ़ायदेमंद है
- उपयोगकर्ताओं भर में पुनः उपयोग किए जाने वाले लंबे सिस्टम प्रॉम्प्ट।
- RAG / दस्तावेज़ Q&A जहाँ वही स्रोत पाठ बार-बार क्वेरी किया जाता है।
- कई टर्न में एक निश्चित टूल कैटलॉग और निर्देशों वाले एजेंट।
ऑफ़लाइन वर्कलोड के लिए कैशिंग को बैचिंग के साथ, और सबसे बड़ी संयुक्त बचत के लिए मॉडल का सही आकार चुनने (एक मॉडल चुनना) के साथ जोड़ें — देखें लागत और लेटेंसी।
स्वयं जाँचें
0/3- स्थिर प्रीफ़िक्स के बाद एक कैश ब्रेकपॉइंट चिह्नित करें; पहली कॉल इसे लिखती है, बाद की कॉल्स इसे सस्ते में वापस पढ़ती हैं।
- एक कैश हिट को बाइट-दर-बाइट समान प्रीफ़िक्स चाहिए — स्थिर सामग्री को पहले, परिवर्तनशील सामग्री को अंत में रखें।
- प्रॉम्प्ट के शीर्ष के पास मौन अमान्यकर्ता (टाइमस्टैम्प, नाम, पुनः-व्यवस्थित टूल) चुपचाप हिट दर को शून्य कर देते हैं।
- usage से सत्यापित करें: cache_read_input_tokens > 0 का मतलब हिट है; दोहराए गए अनुरोधों में शून्य का मतलब है कि कोई अमान्यकर्ता सक्रिय है।
- कैशिंग पुनः उपयोग किए गए सिस्टम प्रॉम्प्ट, RAG, और एजेंट के लिए सबसे ज़्यादा फ़ायदेमंद है; इसे बैचिंग और मॉडल के सही आकार के साथ जोड़ें।