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

একটি সাধারণ AI ওয়ার্কফ্লোতে, আপনি একটি মডেলে একই ইনপুট টোকেন বারবার পাস করতে পারেন। 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"

কিভাবে ক্যাশিং খরচ কমায়

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

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

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

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

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

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