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

आम तौर पर, एआई वर्कफ़्लो में किसी मॉडल को एक ही इनपुट टोकन बार-बार पास किया जा सकता है. 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 });

कैश मेमोरी से लागत में कैसे बचत होती है

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

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

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

ज़रूरी बातें

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

  • कॉन्टेक्स्ट कैश मेमोरी के लिए, इनपुट टोकन की संख्या कम से कम 4,096 होनी चाहिए. साथ ही, ज़्यादा से ज़्यादा संख्या, दिए गए मॉडल के लिए तय की गई संख्या के बराबर होनी चाहिए. (टोकन की गिनती करने के बारे में ज़्यादा जानने के लिए, टोकन गाइड देखें).
  • यह मॉडल, कैश मेमोरी में सेव किए गए टोकन और सामान्य इनपुट टोकन के बीच कोई फ़र्क़ नहीं करता. कैश मेमोरी में सेव किया गया कॉन्टेंट, प्रॉम्प्ट का प्रीफ़िक्स होता है.
  • कॉन्टेक्स्ट कैश मेमोरी पर, दर या इस्तेमाल की कोई खास सीमा नहीं होती. GenerateContent के लिए तय की गई स्टैंडर्ड दर की सीमाएं लागू होती हैं. साथ ही, टोकन की सीमाओं में कैश मेमोरी में सेव किए गए टोकन भी शामिल होते हैं.
  • कैश मेमोरी में सेव किए गए टोकन की संख्या, कैश मेमोरी सेवा के बनाएं, पाएं, और सूची बनाएं ऑपरेशन से usage_metadata में दिखती है. साथ ही, कैश मेमोरी का इस्तेमाल करने पर भी GenerateContent में दिखती है.