প্রসঙ্গ ক্যাশিং

একটি সাধারণ AI ওয়ার্কফ্লোতে, আপনি একটি মডেলে একই ইনপুট টোকেন বারবার পাস করতে পারেন। Gemini API দুটি ভিন্ন ক্যাশিং প্রক্রিয়া অফার করে:

  • অন্তর্নিহিত ক্যাশিং (স্বয়ংক্রিয়, কোনো খরচ সাশ্রয়ের গ্যারান্টি নেই)
  • স্পষ্ট ক্যাশিং (ম্যানুয়াল, খরচ সাশ্রয়ের গ্যারান্টি)

ইমপ্লিসিট ক্যাশিং ডিফল্টরূপে জেমিনি 2.5 মডেলগুলিতে সক্ষম করা আছে। যদি একটি অনুরোধে এমন সামগ্রী থাকে যা একটি ক্যাশে হিট, আমরা স্বয়ংক্রিয়ভাবে খরচ সঞ্চয় আপনার কাছে ফেরত পাঠাই৷

যে ক্ষেত্রে আপনি খরচ সাশ্রয়ের গ্যারান্টি দিতে চান সেখানে স্পষ্ট ক্যাশিং দরকারী, কিন্তু কিছু যোগ করা ডেভেলপারের কাজ সহ।

অন্তর্নিহিত ক্যাশিং

সমস্ত জেমিনি 2.5 মডেলের জন্য অন্তর্নিহিত ক্যাশিং ডিফল্টরূপে সক্রিয় থাকে৷ আপনার অনুরোধ ক্যাশে আঘাত করলে আমরা স্বয়ংক্রিয়ভাবে খরচ সঞ্চয় পাস করি। এটি সক্ষম করার জন্য আপনাকে কিছু করতে হবে না। এটি 8ই মে, 2025 তারিখ থেকে কার্যকর৷ প্রসঙ্গ ক্যাশিংয়ের জন্য সর্বনিম্ন ইনপুট টোকেন গণনা 2.5 ফ্ল্যাশের জন্য 1,024 এবং 2.5 প্রো-এর জন্য 2,048৷

একটি অন্তর্নিহিত ক্যাশে আঘাতের সম্ভাবনা বাড়ানোর জন্য:

  • আপনার প্রম্পটের শুরুতে বড় এবং সাধারণ বিষয়বস্তু রাখার চেষ্টা করুন
  • অল্প সময়ের মধ্যে অনুরূপ উপসর্গ সহ অনুরোধ পাঠানোর চেষ্টা করুন

আপনি প্রতিক্রিয়া অবজেক্টের usage_metadata ক্ষেত্রে ক্যাশে হিট করা টোকেনের সংখ্যা দেখতে পারেন।

স্পষ্ট ক্যাশিং

Gemini API স্পষ্ট ক্যাশিং বৈশিষ্ট্য ব্যবহার করে, আপনি একবার মডেলে কিছু বিষয়বস্তু প্রেরণ করতে পারেন, ইনপুট টোকেনগুলি ক্যাশে করতে পারেন এবং তারপরে পরবর্তী অনুরোধগুলির জন্য ক্যাশে করা টোকেনগুলি উল্লেখ করতে পারেন৷ নির্দিষ্ট ভলিউমে, ক্যাশে করা টোকেন ব্যবহার করা টোকেনের একই কর্পাসে বারবার পাস করার চেয়ে কম খরচ।

আপনি যখন টোকেনগুলির একটি সেট ক্যাশে করেন, তখন টোকেনগুলি স্বয়ংক্রিয়ভাবে মুছে ফেলার আগে আপনি কতক্ষণ ক্যাশে থাকতে চান তা চয়ন করতে পারেন। এই ক্যাশিং সময়কালকে টাইম টু লিভ (TTL) বলা হয়। সেট না থাকলে, TTL ডিফল্ট 1 ঘন্টা। ক্যাশিংয়ের জন্য খরচ নির্ভর করে ইনপুট টোকেনের আকারের উপর এবং আপনি কতক্ষণ টোকেনগুলি বজায় রাখতে চান।

এই বিভাগটি অনুমান করে যে আপনি একটি Gemini SDK ইনস্টল করেছেন (বা কার্ল ইনস্টল করেছেন) এবং আপনি একটি API কী কনফিগার করেছেন, যেমন quickstart এ দেখানো হয়েছে।

একটি ক্যাশে ব্যবহার করে সামগ্রী তৈরি করুন

নিম্নলিখিত উদাহরণটি দেখায় কিভাবে একটি ক্যাশে তৈরি করতে হয় এবং তারপর সামগ্রী তৈরি করতে এটি ব্যবহার করে।

ভিডিও পিডিএফ
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_bodycached_content প্রপার্টি ব্যবহার করে স্পষ্ট ক্যাশে সক্ষম করতে পারেন।

কখন সুস্পষ্ট ক্যাশিং ব্যবহার করবেন

প্রসঙ্গ ক্যাশিং এমন পরিস্থিতিতে বিশেষভাবে উপযুক্ত যেখানে একটি উল্লেখযোগ্য প্রারম্ভিক প্রসঙ্গ সংক্ষিপ্ত অনুরোধ দ্বারা বারবার উল্লেখ করা হয়। ব্যবহারের ক্ষেত্রে প্রসঙ্গ ক্যাশিং ব্যবহার করার কথা বিবেচনা করুন যেমন:

  • বিস্তৃত সিস্টেম নির্দেশাবলী সহ চ্যাটবট
  • দীর্ঘ ভিডিও ফাইলের পুনরাবৃত্তিমূলক বিশ্লেষণ
  • বৃহৎ নথি সেটের বিরুদ্ধে পুনরাবৃত্ত প্রশ্ন
  • ঘন ঘন কোড সংগ্রহস্থল বিশ্লেষণ বা বাগ ফিক্সিং

কিভাবে সুস্পষ্ট ক্যাশিং খরচ কমায়

কনটেক্সট ক্যাশিং হল একটি প্রদত্ত বৈশিষ্ট্য যা সামগ্রিক অপারেশনাল খরচ কমানোর জন্য ডিজাইন করা হয়েছে। বিলিং নিম্নলিখিত বিষয়গুলির উপর ভিত্তি করে:

  1. ক্যাশে টোকেন গণনা: ক্যাশ করা ইনপুট টোকেনের সংখ্যা, পরবর্তী প্রম্পটে অন্তর্ভুক্ত করার সময় একটি হ্রাস হারে বিল করা হয়।
  2. সঞ্চয়স্থানের সময়কাল: ক্যাশ করা টোকেন সংরক্ষিত সময়ের পরিমাণ (TTL), ক্যাশ করা টোকেন গণনার TTL সময়ের উপর ভিত্তি করে বিল করা হয়। TTL-এ কোন সর্বনিম্ন বা সর্বোচ্চ সীমা নেই।
  3. অন্যান্য কারণ: অন্যান্য চার্জ প্রযোজ্য, যেমন নন-ক্যাশড ইনপুট টোকেন এবং আউটপুট টোকেনগুলির জন্য।

আপ-টু-ডেট মূল্যের বিশদ বিবরণের জন্য, Gemini API মূল্য নির্ধারণ পৃষ্ঠাটি পড়ুন। কিভাবে টোকেন গণনা করতে হয় তা জানতে, টোকেন গাইড দেখুন।

অতিরিক্ত বিবেচনা

প্রসঙ্গ ক্যাশিং ব্যবহার করার সময় নিম্নলিখিত বিবেচনাগুলি মনে রাখবেন:

  • প্রসঙ্গ ক্যাশিংয়ের জন্য সর্বনিম্ন ইনপুট টোকেন গণনা 2.5 ফ্ল্যাশের জন্য 1,024 এবং 2.5 প্রো-এর জন্য 2,048। সর্বোচ্চ প্রদত্ত মডেলের জন্য সর্বোচ্চ সমান। (টোকেন গণনা সম্পর্কে আরও জানতে, টোকেন গাইড দেখুন)।
  • মডেলটি ক্যাশে করা টোকেন এবং নিয়মিত ইনপুট টোকেনের মধ্যে কোনো পার্থক্য করে না। ক্যাশে কন্টেন্ট হল প্রম্পটের একটি উপসর্গ।
  • কনটেক্সট ক্যাশিং-এ কোনো বিশেষ হার বা ব্যবহারের সীমা নেই; GenerateContent জন্য আদর্শ হারের সীমা প্রযোজ্য, এবং টোকেন সীমা ক্যাশে করা টোকেন অন্তর্ভুক্ত করে।
  • ক্যাশে পরিষেবার ক্রিয়েট, গেট এবং লিস্ট ক্রিয়াকলাপ থেকে usage_metadata ক্যাশ করা টোকেনের সংখ্যা ফেরত দেওয়া হয়, এবং ক্যাশে ব্যবহার করার সময় GenerateContent এও।