आम तौर पर, एआई वर्कफ़्लो में किसी मॉडल को एक ही इनपुट टोकन बार-बार पास किया जा सकता है. 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) इंस्टॉल किया है और आपने क्विकस्टार्ट में दिखाए गए तरीके से, एपीआई पासकोड कॉन्फ़िगर किया है.
कैश मेमोरी का इस्तेमाल करके कॉन्टेंट जनरेट करना
यहां दिए गए उदाहरण में, कैश मेमोरी बनाने और फिर कॉन्टेंट जनरेट करने के लिए उसका इस्तेमाल करने का तरीका बताया गया है.
wget https://storage.googleapis.com/generativeai-downloads/data/a11.txt
echo '{
"model": "models/gemini-2.0-flash-001",
"contents":[
{
"parts":[
{
"inline_data": {
"mime_type":"text/plain",
"data": "'$(base64 $B64FLAGS a11.txt)'"
}
}
],
"role": "user"
}
],
"systemInstruction": {
"parts": [
{
"text": "You are an expert at analyzing transcripts."
}
]
},
"ttl": "300s"
}' > request.json
curl -X POST "https://generativelanguage.googleapis.com/v1beta/cachedContents?key=$GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d @request.json \
> cache.json
CACHE_NAME=$(cat cache.json | grep '"name":' | cut -d '"' -f 4 | head -n 1)
curl -X POST "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash-001:generateContent?key=$GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"contents": [
{
"parts":[{
"text": "Please summarize this transcript"
}],
"role": "user"
},
],
"cachedContent": "'$CACHE_NAME'"
}'
DOC_URL="https://www.nasa.gov/wp-content/uploads/static/history/alsj/a17/A17_FlightPlan.pdf"
DISPLAY_NAME="A17_FlightPlan"
SYSTEM_INSTRUCTION="You are an expert at analyzing transcripts."
PROMPT="Please summarize this transcript"
MODEL="models/gemini-2.0-flash-001"
TTL="300s"
# Download the PDF
wget -O "${DISPLAY_NAME}.pdf" "${DOC_URL}"
MIME_TYPE=$(file -b --mime-type "${DISPLAY_NAME}.pdf")
NUM_BYTES=$(wc -c < "${DISPLAY_NAME}.pdf")
echo "MIME_TYPE: ${MIME_TYPE}"
echo "NUM_BYTES: ${NUM_BYTES}"
tmp_header_file=upload-header.tmp
# Initial resumable request defining metadata.
# The upload url is in the response headers dump them to a file.
curl "${BASE_URL}/upload/v1beta/files?key=${GOOGLE_API_KEY}" \
-D upload-header.tmp \
-H "X-Goog-Upload-Protocol: resumable" \
-H "X-Goog-Upload-Command: start" \
-H "X-Goog-Upload-Header-Content-Length: ${NUM_BYTES}" \
-H "X-Goog-Upload-Header-Content-Type: ${MIME_TYPE}" \
-H "Content-Type: application/json" \
-d "{'file': {'display_name': '${DISPLAY_NAME}'}}" 2> /dev/null
upload_url=$(grep -i "x-goog-upload-url: " "${tmp_header_file}" | cut -d" " -f2 | tr -d "\r")
rm "${tmp_header_file}"
# Upload the actual bytes.
curl "${upload_url}" \
-H "Content-Length: ${NUM_BYTES}" \
-H "X-Goog-Upload-Offset: 0" \
-H "X-Goog-Upload-Command: upload, finalize" \
--data-binary "@${DISPLAY_NAME}.pdf" 2> /dev/null > file_info.json
file_uri=$(jq ".file.uri" file_info.json)
echo "file_uri: ${file_uri}"
# Clean up the downloaded PDF
rm "${DISPLAY_NAME}.pdf"
# Create the cached content request
echo '{
"model": "'$MODEL'",
"contents":[
{
"parts":[
{"file_data": {"mime_type": "'$MIME_TYPE'", "file_uri": '$file_uri'}}
],
"role": "user"
}
],
"system_instruction": {
"parts": [
{
"text": "'$SYSTEM_INSTRUCTION'"
}
],
"role": "system"
},
"ttl": "'$TTL'"
}' > request.json
# Send the cached content request
curl -X POST "${BASE_URL}/v1beta/cachedContents?key=$GOOGLE_API_KEY" \
-H 'Content-Type: application/json' \
-d @request.json \
> cache.json
CACHE_NAME=$(cat cache.json | grep '"name":' | cut -d '"' -f 4 | head -n 1)
echo "CACHE_NAME: ${CACHE_NAME}"
# Send the generateContent request using the cached content
curl -X POST "${BASE_URL}/${MODEL}:generateContent?key=$GOOGLE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"contents": [
{
"parts":[{
"text": "'$PROMPT'"
}],
"role": "user"
}
],
"cachedContent": "'$CACHE_NAME'"
}' > response.json
cat response.json
echo jq ".candidates[].content.parts[].text" response.json
कैश मेमोरी की सूची बनाना
कैश मेमोरी में सेव किए गए कॉन्टेंट को वापस पाना या देखना मुमकिन नहीं है. हालांकि, कैश मेमोरी में सेव किए गए मेटाडेटा (name
, model
, displayName
, usageMetadata
,
createTime
, updateTime
, और expireTime
) को वापस पाया जा सकता है.
curl "https://generativelanguage.googleapis.com/v1beta/cachedContents?key=$GEMINI_API_KEY"
कैश मेमोरी अपडेट करना
कैश मेमोरी के लिए, नया ttl
या expireTime
सेट किया जा सकता है. कैश मेमोरी के बारे में कुछ और बदलाव नहीं किया जा सकता.
यहां दिए गए उदाहरण में, कैश मेमोरी के ttl
को अपडेट करने का तरीका बताया गया है.
curl -X PATCH "https://generativelanguage.googleapis.com/v1beta/$CACHE_NAME?key=$GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"ttl": "600s"}'
कैश मेमोरी मिटाना
कैश मेमोरी की सेवा, कैश मेमोरी से कॉन्टेंट को मैन्युअल तरीके से हटाने के लिए, मिटाने की सुविधा देती है. यहां दिए गए उदाहरण में, कैश मेमोरी मिटाने का तरीका बताया गया है.
curl -X DELETE "https://generativelanguage.googleapis.com/v1beta/$CACHE_NAME?key=$GEMINI_API_KEY"
OpenAI लाइब्रेरी का इस्तेमाल करके, साफ़ तौर पर कैश मेमोरी में सेव करना
अगर OpenAI लाइब्रेरी का इस्तेमाल किया जा रहा है, तो extra_body
पर cached_content
प्रॉपर्टी का इस्तेमाल करके, साफ़ तौर पर कैश मेमोरी में सेव करने की सुविधा चालू की जा सकती है.
साफ़ तौर पर कैश मेमोरी में सेव करने की सुविधा का इस्तेमाल कब करना चाहिए
संदर्भ कैश मेमोरी का इस्तेमाल उन स्थितियों में किया जाता है जहां छोटे अनुरोधों के ज़रिए, शुरुआती संदर्भ का बार-बार रेफ़रंस दिया जाता है. इस्तेमाल के उदाहरणों के लिए, कॉन्टेक्स्ट कैश मेमोरी का इस्तेमाल करें. जैसे:
- सिस्टम के बारे में ज़्यादा निर्देश देने वाले चैटबॉट
- लंबी वीडियो फ़ाइलों का बार-बार विश्लेषण करना
- बड़े दस्तावेज़ सेट के लिए बार-बार की जाने वाली क्वेरी
- कोड रिपॉज़िटरी का बार-बार विश्लेषण करना या गड़बड़ी ठीक करना
साफ़ तौर पर कैश मेमोरी में डेटा सेव करने की सुविधा से लागत कैसे कम होती है
कॉन्टेक्स्ट कैश मेमोरी, पैसे चुकाकर ली जाने वाली एक सुविधा है. इसे ऑपरेशन से जुड़ी कुल लागत को कम करने के लिए डिज़ाइन किया गया है. बिलिंग इन बातों पर आधारित होती है:
- कैश मेमोरी में सेव किए गए टोकन की संख्या: कैश मेमोरी में सेव किए गए इनपुट टोकन की संख्या. इन टोकन को बाद के प्रॉम्प्ट में शामिल करने पर, कम दर पर बिलिंग की जाती है.
- स्टोरेज की अवधि: कैश मेमोरी में सेव किए गए टोकन को सेव रखने का समय (टीटीएल). कैश मेमोरी में सेव किए गए टोकन की संख्या के टीटीएल के आधार पर शुल्क लिया जाता है. टीटीएल के लिए, कम से कम या ज़्यादा से ज़्यादा सीमा तय नहीं की गई है.
- अन्य फ़ैक्टर: अन्य शुल्क भी लागू होते हैं. जैसे, कैश मेमोरी में सेव नहीं किए गए इनपुट टोकन और आउटपुट टोकन के लिए.
कीमत की अप-टू-डेट जानकारी के लिए, Gemini API के कीमत वाले पेज पर जाएं. टोकन की गिनती करने का तरीका जानने के लिए, टोकन के बारे में गाइड देखें.
ज़रूरी बातें
कॉन्टेक्स्ट कैश मेमोरी का इस्तेमाल करते समय, इन बातों का ध्यान रखें:
- कॉन्टेक्स्ट कैश मेमोरी के लिए, इनपुट टोकन की संख्या 2.5 Flash के लिए 1,024 और 2.5 Pro के लिए 2,048 होनी चाहिए. ज़्यादा से ज़्यादा वैल्यू, दिए गए मॉडल के लिए तय की गई ज़्यादा से ज़्यादा वैल्यू के बराबर होती है. (टोकन की गिनती करने के बारे में ज़्यादा जानने के लिए, टोकन गाइड देखें).
- यह मॉडल, कैश मेमोरी में सेव किए गए टोकन और सामान्य इनपुट टोकन के बीच कोई फ़र्क़ नहीं करता. कैश मेमोरी में सेव किया गया कॉन्टेंट, प्रॉम्प्ट का प्रीफ़िक्स होता है.
- कॉन्टेक्स्ट कैश मेमोरी पर, दर या इस्तेमाल की कोई खास सीमा नहीं होती.
GenerateContent
के लिए तय की गई स्टैंडर्ड दर की सीमाएं लागू होती हैं. साथ ही, टोकन की सीमाओं में कैश मेमोरी में सेव किए गए टोकन भी शामिल होते हैं. - कैश मेमोरी में सेव किए गए टोकन की संख्या, कैश मेमोरी सेवा के बनाएं, पाएं, और सूची में शामिल करें ऑपरेशन से
usage_metadata
में दिखती है. साथ ही, कैश मेमोरी का इस्तेमाल करने पर भीGenerateContent
में दिखती है.