कॉन्टेक्स्ट कैश मेमोरी

एआई के सामान्य वर्कफ़्लो में, एक ही इनपुट टोकन को बार-बार किसी मॉडल को पास किया जा सकता है. Gemini API, कैश मेमोरी की सुविधा के लिए दो अलग-अलग तरीके उपलब्ध कराता है:

  • इंप्लिसिट कैश मेमोरी (Gemini 2.5 मॉडल पर अपने-आप चालू हो जाती है. इससे लागत में बचत होने की कोई गारंटी नहीं है)
  • एक्सप्लिसिट कैश मेमोरी (ज़्यादातर मॉडल पर मैन्युअल तरीके से चालू किया जा सकता है, लागत कम करने की गारंटी)

एक्सप्लिसिट कैशिंग उन मामलों में फ़ायदेमंद होती है जहां आपको लागत में बचत की गारंटी चाहिए. हालांकि, इसके लिए डेवलपर को कुछ और काम करना पड़ता है.

इंप्लिसिट कैशिंग

Gemini 2.5 के सभी मॉडल के लिए, इंप्लिसिट कैश मेमोरी की सुविधा डिफ़ॉल्ट रूप से चालू होती है. अगर आपका अनुरोध कैश मेमोरी में मौजूद डेटा से पूरा होता है, तो हम लागत में हुई बचत को अपने-आप लागू कर देते हैं. इसे चालू करने के लिए, आपको कुछ भी करने की ज़रूरत नहीं है. यह 8 मई, 2025 से लागू होगा. कॉन्टेक्स्ट कैश मेमोरी के लिए, हर मॉडल के हिसाब से कम से कम इनपुट टोकन की संख्या यहां दी गई है:

मॉडल कम से कम टोकन सीमा
Gemini 3 Pro की झलक 4096
Gemini 2.5 Pro 4096
Gemini 2.5 Flash 1024

इंप्लिसिट कैश हिट की संभावना बढ़ाने के लिए:

  • अपने प्रॉम्प्ट की शुरुआत में, बड़े और सामान्य कॉन्टेंट को शामिल करें
  • कम समय में, एक जैसे प्रीफ़िक्स वाले अनुरोध भेजने की कोशिश करना

आपको रिस्पॉन्स ऑब्जेक्ट के 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 });

OpenAI लाइब्रेरी का इस्तेमाल करके, कैश मेमोरी को साफ़ तौर पर मैनेज करना

अगर OpenAI लाइब्रेरी का इस्तेमाल किया जा रहा है, तो extra_body पर cached_content प्रॉपर्टी का इस्तेमाल करके, एक्सप्लिसिट कैश मेमोरी की सुविधा चालू की जा सकती है.

एक्सप्लिसिट कैश मेमोरी का इस्तेमाल कब करना चाहिए

कॉन्टेक्स्ट को कैश मेमोरी में सेव करने की सुविधा, खास तौर पर उन स्थितियों के लिए सही है जहां शुरुआती कॉन्टेक्स्ट के बड़े हिस्से को छोटे अनुरोधों से बार-बार रेफ़र किया जाता है. इन जैसे इस्तेमाल के उदाहरणों के लिए, कॉन्टेक्स्ट कैश मेमोरी का इस्तेमाल करें:

  • सिस्टम के निर्देशों के साथ चैटबॉट
  • लंबी वीडियो फ़ाइलों का बार-बार विश्लेषण करना
  • दस्तावेज़ों के बड़े सेट के ख़िलाफ़ बार-बार की जाने वाली क्वेरी
  • कोड रिपॉज़िटरी का बार-बार विश्लेषण करना या गड़बड़ी ठीक करना

एक्सप्लिसिट कैशिंग से लागत कैसे कम होती है

कॉन्टेक्स्ट कैश मेमोरी, पैसे चुकाकर इस्तेमाल की जाने वाली सुविधा है. इसे कुल परिचालन लागत को कम करने के लिए डिज़ाइन किया गया है. बिलिंग इन बातों पर निर्भर करती है:

  1. कैश किए गए टोकन की संख्या: कैश किए गए इनपुट टोकन की संख्या. इन्हें बाद के प्रॉम्प्ट में शामिल करने पर, कम कीमत पर बिल किया जाता है.
  2. स्टोरेज की अवधि: कैश मेमोरी में सेव किए गए टोकन को सेव रखने की अवधि (टीटीएल). कैश मेमोरी में सेव किए गए टोकन की संख्या के टीटीएल के आधार पर बिल भेजा जाता है. टीटीएल के लिए, कोई कम से कम या ज़्यादा से ज़्यादा सीमा नहीं होती.
  3. अन्य कारक: अन्य शुल्क लागू होते हैं. जैसे, कैश मेमोरी में सेव न किए गए इनपुट टोकन और आउटपुट टोकन के लिए शुल्क.

कीमत के बारे में अप-टू-डेट जानकारी के लिए, Gemini API के कीमत वाले पेज पर जाएं. टोकन की गिनती करने का तरीका जानने के लिए, टोकन गाइड देखें.

ज़रूरी बातें

कॉन्टेक्स्ट कैश मेमोरी का इस्तेमाल करते समय, इन बातों का ध्यान रखें:

  • कॉन्टेक्स्ट कैश मेमोरी के लिए, इनपुट टोकन की कम से कम संख्या ये हैं: 2.5 Flash के लिए 1,024, 2.5 Pro के लिए 4,096, और 3 Pro Preview के लिए 2,048. ज़्यादा से ज़्यादा वैल्यू, दिए गए मॉडल के लिए ज़्यादा से ज़्यादा वैल्यू के बराबर होती है. (टोकन की गिनती के बारे में ज़्यादा जानने के लिए, टोकन गाइड देखें).
  • यह मॉडल, कैश किए गए टोकन और सामान्य इनपुट टोकन के बीच कोई अंतर नहीं करता. कैश किया गया कॉन्टेंट, प्रॉम्प्ट का प्रीफ़िक्स होता है.
  • कॉन्टेक्स्ट को कैश मेमोरी में सेव करने पर, इस्तेमाल की कोई सीमा या खास शुल्क नहीं लगता. GenerateContent के लिए, दर की स्टैंडर्ड सीमाएं लागू होती हैं. साथ ही, टोकन की सीमाओं में कैश मेमोरी में सेव किए गए टोकन शामिल होते हैं.
  • कैश किए गए टोकन की संख्या, कैश सेवा के create, get, और list ऑपरेशनों के usage_metadata में दिखाई जाती है. साथ ही, कैश का इस्तेमाल करते समय GenerateContent में भी यह संख्या दिखती है.