एआई के सामान्य वर्कफ़्लो में, एक ही इनपुट टोकन को बार-बार किसी मॉडल को पास किया जा सकता है. Gemini API, कैश मेमोरी की सुविधा के लिए दो अलग-अलग तरीके उपलब्ध कराता है:
- इंप्लिसिट कैश मेमोरी (Gemini 2.5 मॉडल पर अपने-आप चालू हो जाती है. इससे लागत में बचत होने की कोई गारंटी नहीं है)
- एक्सप्लिसिट कैश मेमोरी (ज़्यादातर मॉडल पर मैन्युअल तरीके से चालू किया जा सकता है, लागत कम करने की गारंटी)
एक्सप्लिसिट कैशिंग उन मामलों में फ़ायदेमंद होती है जहां आपको लागत में बचत की गारंटी चाहिए. हालांकि, इसके लिए डेवलपर को कुछ और काम करना पड़ता है.
इंप्लिसिट कैशिंग
Gemini 2.5 के सभी मॉडल के लिए, इंप्लिसिट कैश मेमोरी की सुविधा डिफ़ॉल्ट रूप से चालू होती है. अगर आपका अनुरोध कैश मेमोरी से मिलता है, तो हम लागत में हुई बचत को अपने-आप लागू कर देते हैं. इसे चालू करने के लिए, आपको कुछ भी करने की ज़रूरत नहीं है. यह 8 मई, 2025 से लागू होगा. कॉन्टेक्स्ट कैश मेमोरी के लिए, इनपुट टोकन की कम से कम संख्या 1,024 होनी चाहिए. यह संख्या 2.5 Flash के लिए 1,024 और 2.5 Pro के लिए 4,096 है.
इंप्लिसिट कैश हिट की संभावना बढ़ाने के लिए:
- अपने प्रॉम्प्ट की शुरुआत में, बड़े और सामान्य कॉन्टेंट को शामिल करें
- कम समय में, एक जैसे प्रीफ़िक्स वाले अनुरोध भेजने की कोशिश करना
आपको रिस्पॉन्स ऑब्जेक्ट के usage_metadata
फ़ील्ड में, उन टोकन की संख्या दिखेगी जो कैश मेमोरी में मौजूद थे.
एक्सप्लिसिट कैशिंग
Gemini API की एक्सप्लिसिट कैशिंग सुविधा का इस्तेमाल करके, मॉडल को एक बार कुछ कॉन्टेंट दिया जा सकता है. साथ ही, इनपुट टोकन को कैश मेमोरी में सेव किया जा सकता है. इसके बाद, अगले अनुरोधों के लिए कैश मेमोरी में सेव किए गए टोकन का इस्तेमाल किया जा सकता है. कुछ वॉल्यूम पर, कैश किए गए टोकन का इस्तेमाल करना, टोकन के एक ही कॉर्पस को बार-बार पास करने की तुलना में कम खर्चीला होता है.
टोकन के सेट को कैश मेमोरी में सेव करते समय, यह चुना जा सकता है कि टोकन के अपने-आप मिटने से पहले, कैश मेमोरी कितने समय तक सेव रहे. कैश मेमोरी में सेव रहने की इस अवधि को टाइम टू लिव (टीटीएल) कहा जाता है. अगर इसे सेट नहीं किया जाता है, तो टीटीएल डिफ़ॉल्ट रूप से एक घंटे पर सेट होता है. कैशिंग की लागत, इनपुट टोकन के साइज़ और टोकन को सेव रखने की अवधि पर निर्भर करती है.
इस सेक्शन में यह माना गया है कि आपने Gemini SDK इंस्टॉल कर लिया है या curl इंस्टॉल कर लिया है. साथ ही, आपने क्विकस्टार्ट में दिखाए गए तरीके से एपीआई पासकोड कॉन्फ़िगर कर लिया है.
कैश मेमोरी का इस्तेमाल करके कॉन्टेंट जनरेट करना
यहां दिए गए उदाहरण में, कैश मेमोरी में सेव किए गए सिस्टम के निर्देश और वीडियो फ़ाइल का इस्तेमाल करके कॉन्टेंट जनरेट करने का तरीका बताया गया है.
वीडियो
import os
import pathlib
import requests
import time
from google import genai
from google.genai import types
client = genai.Client()
# Download video file
url = 'https://storage.googleapis.com/generativeai-downloads/data/SherlockJr._10min.mp4'
path_to_video_file = pathlib.Path('SherlockJr._10min.mp4')
if not path_to_video_file.exists():
with path_to_video_file.open('wb') as wf:
response = requests.get(url, stream=True)
for chunk in response.iter_content(chunk_size=32768):
wf.write(chunk)
# Upload the video using the Files API
video_file = client.files.upload(file=path_to_video_file)
# Wait for the file to finish processing
while video_file.state.name == 'PROCESSING':
print('Waiting for video to be processed.')
time.sleep(2)
video_file = client.files.get(name=video_file.name)
print(f'Video processing complete: {video_file.uri}')
# You must use an explicit version suffix: "-flash-001", not just "-flash".
model='models/gemini-2.0-flash-001'
# Create a cache with a 5 minute TTL
cache = client.caches.create(
model=model,
config=types.CreateCachedContentConfig(
display_name='sherlock jr movie', # used to identify the cache
system_instruction=(
'You are an expert video analyzer, and your job is to answer '
'the user\'s query based on the video file you have access to.'
),
contents=[video_file],
ttl="300s",
)
)
# Construct a GenerativeModel which uses the created cache.
response = client.models.generate_content(
model = model,
contents= (
'Introduce different characters in the movie by describing '
'their personality, looks, and names. Also list the timestamps '
'they were introduced for the first time.'),
config=types.GenerateContentConfig(cached_content=cache.name)
)
print(response.usage_metadata)
# The output should look something like this:
#
# prompt_token_count: 696219
# cached_content_token_count: 696190
# candidates_token_count: 214
# total_token_count: 696433
print(response.text)
from google import genai
from google.genai import types
import io
import httpx
client = genai.Client()
long_context_pdf_path = "https://www.nasa.gov/wp-content/uploads/static/history/alsj/a17/A17_FlightPlan.pdf"
# Retrieve and upload the PDF using the File API
doc_io = io.BytesIO(httpx.get(long_context_pdf_path).content)
document = client.files.upload(
file=doc_io,
config=dict(mime_type='application/pdf')
)
model_name = "gemini-2.0-flash-001"
system_instruction = "You are an expert analyzing transcripts."
# Create a cached content object
cache = client.caches.create(
model=model_name,
config=types.CreateCachedContentConfig(
system_instruction=system_instruction,
contents=[document],
)
)
# Display the cache details
print(f'{cache=}')
# Generate content using the cached prompt and document
response = client.models.generate_content(
model=model_name,
contents="Please summarize this transcript",
config=types.GenerateContentConfig(
cached_content=cache.name
))
# (Optional) Print usage metadata for insights into the API call
print(f'{response.usage_metadata=}')
# Print the generated text
print('\n\n', response.text)
कैश मेमोरी की सूची बनाना
कैश किए गए कॉन्टेंट को वापस नहीं लाया जा सकता या देखा नहीं जा सकता. हालांकि, कैश किए गए मेटाडेटा (name
, model
, display_name
, usage_metadata
, create_time
, update_time
, और expire_time
) को वापस लाया जा सकता है.
अपलोड की गई सभी कैश मेमोरी के लिए मेटाडेटा की सूची बनाने के लिए, CachedContent.list()
का इस्तेमाल करें:
for cache in client.caches.list():
print(cache)
अगर आपको किसी कैश मेमोरी ऑब्जेक्ट का नाम पता है, तो उसका मेटाडेटा पाने के लिए get
का इस्तेमाल करें:
client.caches.get(name=name)
कैश मेमोरी अपडेट करना
किसी कैश मेमोरी के लिए, नया ttl
या expire_time
सेट किया जा सकता है. कैश मेमोरी के बारे में कोई और बदलाव नहीं किया जा सकता.
यहां दिए गए उदाहरण में, client.caches.update()
का इस्तेमाल करके कैश मेमोरी के ttl
को अपडेट करने का तरीका बताया गया है.
from google import genai
from google.genai import types
client.caches.update(
name = cache.name,
config = types.UpdateCachedContentConfig(
ttl='300s'
)
)
एक्सपायरी का समय सेट करने के लिए, यह datetime
ऑब्जेक्ट या ISO फ़ॉर्मैट वाली तारीख और समय की स्ट्रिंग (dt.isoformat()
, जैसे कि 2025-01-27T16:02:36.473528+00:00
) स्वीकार करता है. आपके समय में टाइम ज़ोन शामिल होना चाहिए (datetime.utcnow()
में टाइम ज़ोन शामिल नहीं होता है, datetime.now(datetime.timezone.utc)
में टाइम ज़ोन शामिल होता है).
from google import genai
from google.genai import types
import datetime
# You must use a time zone-aware time.
in10min = datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(minutes=10)
client.caches.update(
name = cache.name,
config = types.UpdateCachedContentConfig(
expire_time=in10min
)
)
कैश मेमोरी मिटाना
कैशिंग सेवा, कैश मेमोरी से कॉन्टेंट को मैन्युअल तरीके से हटाने के लिए, मिटाने की सुविधा देती है. यहां दिए गए उदाहरण में, कैश मेमोरी मिटाने का तरीका बताया गया है:
client.caches.delete(cache.name)
OpenAI लाइब्रेरी का इस्तेमाल करके, कैश मेमोरी को साफ़ तौर पर मैनेज करना
अगर OpenAI लाइब्रेरी का इस्तेमाल किया जा रहा है, तो extra_body
पर cached_content
प्रॉपर्टी का इस्तेमाल करके, साफ़ तौर पर कैश मेमोरी सेव करने की सुविधा चालू की जा सकती है.
एक्सप्लिसिट कैश मेमोरी का इस्तेमाल कब करना चाहिए
कॉन्टेक्स्ट को कैश मेमोरी में सेव करने की सुविधा, खास तौर पर उन स्थितियों के लिए सही है जहां शुरुआती कॉन्टेक्स्ट के बड़े हिस्से को छोटे अनुरोधों से बार-बार रेफ़र किया जाता है. इन जैसे इस्तेमाल के उदाहरणों के लिए, कॉन्टेक्स्ट कैश मेमोरी का इस्तेमाल करें:
- सिस्टम के निर्देशों के साथ चैटबॉट
- लंबी वीडियो फ़ाइलों का बार-बार विश्लेषण करना
- दस्तावेज़ों के बड़े सेट के ख़िलाफ़ बार-बार की जाने वाली क्वेरी
- कोड रिपॉज़िटरी का बार-बार विश्लेषण करना या गड़बड़ी ठीक करना
एक्सप्लिसिट कैशिंग से लागत कैसे कम होती है
कॉन्टेक्स्ट कैश मेमोरी, पैसे चुकाकर इस्तेमाल की जाने वाली सुविधा है. इसे कुल परिचालन लागत को कम करने के लिए डिज़ाइन किया गया है. बिलिंग इन बातों पर निर्भर करती है:
- कैश किए गए टोकन की संख्या: कैश किए गए इनपुट टोकन की संख्या. इन्हें बाद के प्रॉम्प्ट में शामिल करने पर, कम कीमत पर बिल किया जाता है.
- स्टोरेज की अवधि: कैश मेमोरी में सेव किए गए टोकन को सेव रखने की अवधि (टीटीएल). कैश मेमोरी में सेव किए गए टोकन की संख्या के टीटीएल के आधार पर बिल भेजा जाता है. टीटीएल के लिए, कम से कम या ज़्यादा से ज़्यादा की कोई सीमा नहीं होती.
- अन्य कारक: अन्य शुल्क लागू होते हैं. जैसे, कैश मेमोरी में सेव न किए गए इनपुट टोकन और आउटपुट टोकन के लिए शुल्क.
कीमत के बारे में अप-टू-डेट जानकारी के लिए, Gemini API के कीमत वाले पेज पर जाएं. टोकन की गिनती करने का तरीका जानने के लिए, टोकन गाइड देखें.
ज़रूरी बातें
कॉन्टेक्स्ट कैश मेमोरी का इस्तेमाल करते समय, इन बातों का ध्यान रखें:
- कॉन्टेक्स्ट को कैश मेमोरी में सेव करने के लिए, इनपुट टोकन की कम से कम संख्या 2.5 Flash के लिए 1,024 और 2.5 Pro के लिए 2,048 है. ज़्यादा से ज़्यादा वैल्यू, दिए गए मॉडल के लिए ज़्यादा से ज़्यादा वैल्यू के बराबर होती है. (टोकन की गिनती के बारे में ज़्यादा जानने के लिए, टोकन गाइड देखें).
- यह मॉडल, कैश किए गए टोकन और सामान्य इनपुट टोकन के बीच कोई अंतर नहीं करता. कैश किया गया कॉन्टेंट, प्रॉम्प्ट का प्रीफ़िक्स होता है.
- कॉन्टेक्स्ट को कैश मेमोरी में सेव करने पर, इस्तेमाल की कोई खास दर या सीमाएं लागू नहीं होती हैं.
GenerateContent
के लिए, दर की स्टैंडर्ड सीमाएं लागू होती हैं. साथ ही, टोकन की सीमाओं में कैश मेमोरी में सेव किए गए टोकन शामिल होते हैं. - कैश किए गए टोकन की संख्या, कैश सेवा की create, get, और list कार्रवाइयों के
usage_metadata
से मिलती है. साथ ही, कैश का इस्तेमाल करते समयGenerateContent
से भी मिलती है.