आम तौर पर, एआई वर्कफ़्लो में किसी मॉडल को एक ही इनपुट टोकन बार-बार पास किया जा सकता है. Gemini API के कॉन्टेक्स्ट को कैश मेमोरी में सेव करने की सुविधा का इस्तेमाल करके, मॉडल को कुछ कॉन्टेंट एक बार पास किया जा सकता है. इसके बाद, इनपुट टोकन को कैश मेमोरी में सेव किया जा सकता है. इसके बाद, अगले अनुरोधों के लिए, कैश मेमोरी में सेव किए गए टोकन का रेफ़रंस दिया जा सकता है. कुछ मामलों में, कैश मेमोरी में सेव किए गए टोकन का इस्तेमाल करना, टोकन के एक ही कॉर्पस को बार-बार पास करने की तुलना में कम लागत का होता है.
जब टोकन के किसी सेट को कैश मेमोरी में सेव किया जाता है, तो आपके पास यह चुनने का विकल्प होता है कि टोकन अपने-आप मिटने से पहले, उसे कितनी देर तक सेव रखना है. कैश मेमोरी में सेव होने की इस अवधि को टाइम टू लाइव (टीटीएल) कहा जाता है. अगर यह सेट नहीं किया जाता है, तो टीटीएल डिफ़ॉल्ट रूप से एक घंटे पर सेट हो जाता है. कैश मेमोरी में सेव करने की लागत, इनपुट टोकन के साइज़ और टोकन को सेव रखने की अवधि पर निर्भर करती है.
कॉन्टेक्स्ट कैश मेमोरी, Gemini 1.5 Pro और Gemini 1.5 Flash, दोनों के साथ काम करती है.
कॉन्टेक्स्ट कैश मेमोरी का इस्तेमाल कब करना चाहिए
कॉन्टेक्स्ट कैश मेमोरी का इस्तेमाल उन मामलों में खास तौर पर किया जाता है जहां छोटे अनुरोधों के ज़रिए, शुरुआती कॉन्टेक्स्ट का बार-बार रेफ़रंस दिया जाता है. इस्तेमाल के उदाहरणों के लिए, कॉन्टेक्स्ट कैश मेमोरी का इस्तेमाल करें. जैसे:
- सिस्टम से जुड़े दिशा-निर्देशों वाले चैटबॉट
- लंबी वीडियो फ़ाइलों का बार-बार विश्लेषण
- बड़े दस्तावेज़ सेट के लिए बार-बार की जाने वाली क्वेरी
- कोड को स्टोर करने की नियमित तौर पर जांच करना या गड़बड़ियां ठीक करना
कैश मेमोरी में सेव करने से लागत कैसे कम होती है
कॉन्टेक्स्ट कैश मेमोरी में सेव करने की सुविधा, पैसे चुकाकर ली जाने वाली सुविधा है. इसे ऑपरेशन से जुड़ी कुल लागत को कम करने के लिए डिज़ाइन किया गया है. बिलिंग इन बातों के आधार पर तय की जाती है:
- कैश टोकन की संख्या: कैश मेमोरी में सेव किए गए इनपुट टोकन की संख्या. इन टोकन को अगले प्रॉम्प्ट में शामिल करने पर, कम दर पर बिल भेजा जाता है.
- स्टोरेज की अवधि: कैश मेमोरी में सेव किए गए टोकन के सेव होने की अवधि (टीटीएल), कैश मेमोरी में सेव किए गए टोकन की संख्या के लिए टीटीएल अवधि के हिसाब से बिल की जाती है. टीटीएल के लिए, कम से कम या ज़्यादा से ज़्यादा सीमा तय नहीं की गई है.
- अन्य बातें: अन्य शुल्क लागू होते हैं, जैसे कि कैश नहीं किए गए इनपुट टोकन और आउटपुट टोकन.
कीमतों की अप-टू-डेट जानकारी के लिए, Gemini API का कीमत वाला पेज देखें. टोकन की गिनती करने का तरीका जानने के लिए, टोकन गाइड देखें.
कॉन्टेक्स्ट कैशिंग की सुविधा इस्तेमाल करने का तरीका
इस सेक्शन में मान लिया गया है कि आपने Gemini SDK टूल इंस्टॉल किया है (या कर्ल इंस्टॉल किया है) और आपने एपीआई पासकोड कॉन्फ़िगर किया है, जैसा कि क्विकस्टार्ट में दिखाया गया है.
कैश मेमोरी का इस्तेमाल करके कॉन्टेंट जनरेट करना
नीचे दिए गए उदाहरण में, कैश मेमोरी में सेव किए गए सिस्टम के निर्देश और वीडियो फ़ाइल का इस्तेमाल करके, कॉन्टेंट जनरेट करने का तरीका बताया गया है.
import os
import google.generativeai as genai
from google.generativeai import caching
import datetime
import time
# Get your API key from https://aistudio.google.com/app/apikey
# and access your API key as an environment variable.
# To authenticate from a Colab, see
# https://github.com/google-gemini/cookbook/blob/main/quickstarts/Authentication.ipynb
genai.configure(api_key=os.environ['API_KEY'])
# Download video file
# curl -O https://storage.googleapis.com/generativeai-downloads/data/Sherlock_Jr_FullMovie.mp4
path_to_video_file = 'Sherlock_Jr_FullMovie.mp4'
# Upload the video using the Files API
video_file = genai.upload_file(path=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 = genai.get_file(video_file.name)
print(f'Video processing complete: {video_file.uri}')
# Create a cache with a 5 minute TTL
cache = caching.CachedContent.create(
model='models/gemini-1.5-flash-001',
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=datetime.timedelta(minutes=5),
)
# Construct a GenerativeModel which uses the created cache.
model = genai.GenerativeModel.from_cached_content(cached_content=cache)
# Query the model
response = model.generate_content([(
'Introduce different characters in the movie by describing '
'their personality, looks, and names. Also list the timestamps '
'they were introduced for the first time.')])
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)
कैश मेमोरी की सूची बनाएं
कैश मेमोरी में सेव किए गए कॉन्टेंट को वापस नहीं लाया या देखा नहीं जा सकता. हालांकि, कैश मेटाडेटा (name
, model
, display_name
, usage_metadata
,
create_time
, update_time
, और expire_time
) को वापस लाया जा सकता है.
अपलोड की गई सभी कैश मेमोरी के मेटाडेटा की सूची बनाने के लिए, CachedContent.list()
का इस्तेमाल करें:
for c in caching.CachedContent.list():
print(c)
कैश मेमोरी अपडेट करना
कैश मेमोरी के लिए, नया ttl
या expire_time
सेट किया जा सकता है. कैश मेमोरी के बारे में
कोई और बदलाव नहीं किया जा सकता.
यहां दिए गए उदाहरण में, CachedContent.update()
का इस्तेमाल करके कैश मेमोरी के ttl
को अपडेट करने का तरीका बताया गया है.
import datetime
cache.update(ttl=datetime.timedelta(hours=2))
कैश मेमोरी मिटाना
कैश मेमोरी सेवा, कैश मेमोरी से कॉन्टेंट को मैन्युअल तरीके से हटाने के लिए, मिटाने की सुविधा देती है. यहां दिए गए उदाहरण में, CachedContent.delete()
का इस्तेमाल करके कैश मेमोरी को मिटाने का तरीका बताया गया है.
cache.delete()
ज़रूरी बातें
कॉन्टेक्स्ट कैश मेमोरी का इस्तेमाल करते समय इन बातों का ध्यान रखें:
- कॉन्टेक्स्ट कैश मेमोरी के लिए कम से कम इनपुट टोकन की संख्या 32,768 है और ज़्यादा से ज़्यादा, दिए गए मॉडल की ज़्यादा से ज़्यादा संख्या के बराबर है. (टोकन की गिनती करने के बारे में ज़्यादा जानने के लिए, टोकन गाइड देखें).
- यह मॉडल, कैश मेमोरी में सेव किए गए टोकन और सामान्य इनपुट टोकन के बीच कोई फ़र्क़ नहीं करता. कैश मेमोरी में सेव किया गया कॉन्टेंट, प्रॉम्प्ट का सिर्फ़ एक प्रीफ़िक्स होता है.
- कॉन्टेक्स्ट कैश मेमोरी पर, दर या इस्तेमाल की कोई खास सीमा नहीं होती.
GenerateContent
के लिए, स्टैंडर्ड दर की सीमाएं लागू होती हैं. साथ ही, टोकन की सीमाओं में कैश मेमोरी में सेव किए गए टोकन भी शामिल होते हैं. - कैश मेमोरी में सेव किए गए टोकन की संख्या,
usage_metadata
में कैश मेमोरी की सेवा बनाने, पाने, और उसकी सूची बनाने से दिखती है. कैश मेमोरी का इस्तेमाल करते समय, यह संख्याGenerateContent
में भी दिखती है.