आम तौर पर, एआई वर्कफ़्लो में किसी मॉडल को एक ही इनपुट टोकन बार-बार पास किया जा सकता है. Gemini API, कैश मेमोरी सेव करने के दो अलग-अलग तरीके उपलब्ध कराता है:
- कैश मेमोरी में अपने-आप डेटा सेव होना (अपने-आप होता है, लागत में बचत होने की कोई गारंटी नहीं है)
- साफ़ तौर पर कैश मेमोरी में सेव करना (मैन्युअल, लागत में बचत की गारंटी)
Gemini 2.5 मॉडल पर, कैश मेमोरी में डेटा अपने-आप सेव होने की सुविधा डिफ़ॉल्ट रूप से चालू रहती है. अगर किसी अनुरोध में कैश मेमोरी में मौजूद कॉन्टेंट शामिल होता है, तो हम आपके लिए शुल्क में हुए बचत को अपने-आप लागू कर देते हैं.
साफ़ तौर पर कैश मेमोरी में सेव करने की सुविधा तब काम की होती है, जब आपको लागत में बचत करनी हो. हालांकि, इसके लिए डेवलपर को कुछ और काम करना पड़ता है.
कैश मेमोरी में अपने-आप सेव होना
Gemini 2.5 के सभी मॉडल के लिए, कैश मेमोरी में डेटा अपने-आप सेव होने की सुविधा डिफ़ॉल्ट रूप से चालू होती है. अगर आपका अनुरोध कैश मेमोरी में मौजूद डेटा पर लागू होता है, तो हम लागत में होने वाली बचत को अपने-आप लागू कर देते हैं. इसे चालू करने के लिए, आपको कुछ भी करने की ज़रूरत नहीं है. यह 8 मई, 2025 से लागू होगा. कॉन्टेक्स्ट कैश मेमोरी के लिए, इनपुट टोकन की कम से कम संख्या 2.5 Flash के लिए 1,024 और 2.5 Pro के लिए 2,048 है.
कैश मेमोरी में मौजूद कॉन्टेंट को फिर से इस्तेमाल करने की संभावना बढ़ाने के लिए:
- प्रॉम्प्ट की शुरुआत में, बड़े और सामान्य कॉन्टेंट डालें
- कुछ ही समय में मिलते-जुलते प्रीफ़िक्स वाले अनुरोध भेजने की कोशिश करना
रिस्पॉन्स ऑब्जेक्ट के usage_metadata
फ़ील्ड में, कैश मेमोरी में सेव किए गए उन टोकन की संख्या देखी जा सकती है जो हिट हुए थे.
एक्सप्लिसिट कैशिंग
Gemini API की साफ़ तौर पर कैश मेमोरी में सेव करने की सुविधा का इस्तेमाल करके, मॉडल को कुछ कॉन्टेंट एक बार पास किया जा सकता है. इसके बाद, इनपुट टोकन को कैश मेमोरी में सेव किया जा सकता है. इसके बाद, अगले अनुरोधों के लिए कैश मेमोरी में सेव किए गए टोकन का रेफ़रंस दिया जा सकता है. कुछ मामलों में, कैश मेमोरी में सेव किए गए टोकन का इस्तेमाल करना, टोकन के एक ही कॉर्पस को बार-बार पास करने की तुलना में कम लागत का होता है.
टोकन का सेट कैश मेमोरी में सेव करने पर, यह चुना जा सकता है कि टोकन अपने-आप मिटने से पहले, कैश मेमोरी में कितने समय तक सेव रहे. कैश मेमोरी में सेव रहने की इस अवधि को टाइम टू लिव (टीटीएल) कहा जाता है. अगर यह सेट नहीं किया जाता है, तो टीटीएल डिफ़ॉल्ट रूप से एक घंटे पर सेट हो जाता है. कैश मेमोरी में सेव करने की लागत, इनपुट टोकन के साइज़ और टोकन को सेव रखने की अवधि पर निर्भर करती है.
इस सेक्शन में यह माना गया है कि आपने Gemini SDK (या curl) इंस्टॉल किया है और आपने क्विकस्टार्ट में दिखाए गए तरीके से, एपीआई पासकोड कॉन्फ़िगर किया है.
कैश मेमोरी का इस्तेमाल करके कॉन्टेंट जनरेट करना
इस उदाहरण में, कैश मेमोरी में सेव किए गए सिस्टम निर्देश और टेक्स्ट फ़ाइल का इस्तेमाल करके कॉन्टेंट जनरेट करने का तरीका बताया गया है.
import {
GoogleGenAI,
createUserContent,
createPartFromUri,
} from "@google/genai";
const ai = new GoogleGenAI({ apiKey: "GEMINI_API_KEY" });
async function main() {
const doc = await ai.files.upload({
file: "path/to/file.txt",
config: { mimeType: "text/plain" },
});
console.log("Uploaded file name:", doc.name);
const modelName = "gemini-2.0-flash-001";
const cache = await ai.caches.create({
model: modelName,
config: {
contents: createUserContent(createPartFromUri(doc.uri, doc.mimeType)),
systemInstruction: "You are an expert analyzing transcripts.",
},
});
console.log("Cache created:", cache);
const response = await ai.models.generateContent({
model: modelName,
contents: "Please summarize this transcript",
config: { cachedContent: cache.name },
});
console.log("Response text:", response.text);
}
await main();
कैश मेमोरी की सूची बनाना
कैश मेमोरी में सेव किए गए कॉन्टेंट को वापस पाना या देखना मुमकिन नहीं है. हालांकि, कैश मेमोरी में सेव किए गए मेटाडेटा (name
, model
, displayName
, usageMetadata
,
createTime
, updateTime
, और expireTime
) को वापस पाया जा सकता है.
अपलोड किए गए सभी कैश मेमोरी के मेटाडेटा की सूची देखने के लिए, GoogleGenAI.caches.list()
का इस्तेमाल करें:
console.log("My caches:");
const pager = await ai.caches.list({ config: { pageSize: 10 } });
let page = pager.page;
while (true) {
for (const c of page) {
console.log(" ", c.name);
}
if (!pager.hasNextPage()) break;
page = await pager.nextPage();
}
कैश मेमोरी अपडेट करना
कैश मेमोरी के लिए, नया ttl
या expireTime
सेट किया जा सकता है. कैश मेमोरी के बारे में कुछ और बदलाव नहीं किया जा सकता.
यहां दिए गए उदाहरण में, GoogleGenAI.caches.update()
का इस्तेमाल करके कैश मेमोरी के ttl
को अपडेट करने का तरीका बताया गया है.
const ttl = `${2 * 3600}s`; // 2 hours in seconds
const updatedCache = await ai.caches.update({
name: cache.name,
config: { ttl },
});
console.log("After update (TTL):", updatedCache);
कैश मेमोरी मिटाना
कैश मेमोरी सेवा, कैश मेमोरी से कॉन्टेंट को मैन्युअल तरीके से हटाने के लिए, मिटाने की सुविधा देती है. यहां दिए गए उदाहरण में, GoogleGenAI.caches.delete()
का इस्तेमाल करके कैश मेमोरी मिटाने का तरीका बताया गया है.
await ai.caches.delete({ name: cache.name });
साफ़ तौर पर कैश मेमोरी में सेव करने की सुविधा का इस्तेमाल कब करना चाहिए
संदर्भ कैश मेमोरी का इस्तेमाल उन स्थितियों में किया जाता है जहां छोटे अनुरोधों के ज़रिए, शुरुआती संदर्भ का बार-बार रेफ़रंस दिया जाता है. इस्तेमाल के उदाहरणों के लिए, कॉन्टेक्स्ट कैश मेमोरी का इस्तेमाल करें. जैसे:
- सिस्टम के बारे में ज़्यादा निर्देश देने वाले चैटबॉट
- लंबी वीडियो फ़ाइलों का बार-बार विश्लेषण करना
- बड़े दस्तावेज़ सेट के लिए बार-बार की जाने वाली क्वेरी
- कोड रिपॉज़िटरी का बार-बार विश्लेषण करना या गड़बड़ी ठीक करना
साफ़ तौर पर कैश मेमोरी में डेटा सेव करने की सुविधा से लागत कैसे कम होती है
कॉन्टेक्स्ट कैश मेमोरी, पैसे चुकाकर ली जाने वाली एक सुविधा है. इसे ऑपरेशन से जुड़ी कुल लागत को कम करने के लिए डिज़ाइन किया गया है. बिलिंग इन बातों पर आधारित होती है:
- कैश मेमोरी में सेव किए गए टोकन की संख्या: कैश मेमोरी में सेव किए गए इनपुट टोकन की संख्या. इन टोकन को बाद के प्रॉम्प्ट में शामिल करने पर, कम दर पर बिलिंग की जाती है.
- स्टोरेज की अवधि: कैश मेमोरी में सेव किए गए टोकन को सेव रखने का समय (टीटीएल). कैश मेमोरी में सेव किए गए टोकन की संख्या के टीटीएल के आधार पर शुल्क लिया जाता है. टीटीएल के लिए, कम से कम या ज़्यादा से ज़्यादा सीमा तय नहीं की गई है.
- अन्य फ़ैक्टर: अन्य शुल्क भी लागू होते हैं. जैसे, कैश मेमोरी में सेव नहीं किए गए इनपुट टोकन और आउटपुट टोकन के लिए.
कीमत की अप-टू-डेट जानकारी के लिए, Gemini API के कीमत वाले पेज पर जाएं. टोकन की गिनती करने का तरीका जानने के लिए, टोकन के बारे में गाइड देखें.
ज़रूरी बातें
कॉन्टेक्स्ट कैश मेमोरी का इस्तेमाल करते समय, इन बातों का ध्यान रखें:
- कॉन्टेक्स्ट कैश मेमोरी के लिए, इनपुट टोकन की संख्या 2.5 Flash के लिए 1,024 और 2.5 Pro के लिए 2,048 होनी चाहिए. ज़्यादा से ज़्यादा वैल्यू, दिए गए मॉडल के लिए तय की गई ज़्यादा से ज़्यादा वैल्यू के बराबर होती है. (टोकन की गिनती करने के बारे में ज़्यादा जानने के लिए, टोकन गाइड देखें).
- यह मॉडल, कैश मेमोरी में सेव किए गए टोकन और सामान्य इनपुट टोकन के बीच कोई फ़र्क़ नहीं करता. कैश मेमोरी में सेव किया गया कॉन्टेंट, प्रॉम्प्ट का प्रीफ़िक्स होता है.
- कॉन्टेक्स्ट कैश मेमोरी पर, दर या इस्तेमाल की कोई खास सीमा नहीं होती.
GenerateContent
के लिए तय की गई स्टैंडर्ड दर की सीमाएं लागू होती हैं. साथ ही, टोकन की सीमाओं में कैश मेमोरी में सेव किए गए टोकन भी शामिल होते हैं. - कैश मेमोरी में सेव किए गए टोकन की संख्या, कैश मेमोरी सेवा के बनाएं, पाएं, और सूची बनाएं ऑपरेशन से
usage_metadata
में दिखती है. साथ ही, कैश मेमोरी का इस्तेमाल करने पर भीGenerateContent
में दिखती है.