في سير عمل الذكاء الاصطناعي النموذجي، يمكنك تمرير رموز الإدخال المميزة نفسها مرارًا وتكرارًا إلى نموذج. باستخدام ميزة التخزين المؤقت للسياق في Gemini API، يمكنك نقل بعض المحتوى إلى النموذج مرة واحدة، وتخزين الرموز المميزة للإدخال مؤقتًا، ثم الرجوع إلى الرموز المميزة المخزّنة مؤقتًا للطلبات اللاحقة. في مجلدات معينة، يكون استخدام الرموز المميزة المخزنة مؤقتًا أقل تكلفة من تمرير مجموعة الرموز المميزة بشكل متكرر
عند تخزين مجموعة من الرموز المميزة مؤقتًا، يمكنك اختيار المدة التي تريد خلالها قبل حذف الرموز المميزة تلقائيًا. مدة التخزين المؤقت هذه تسمى مدة البقاء (TTL). وفي حال تم ترك السياسة بدون ضبط، يتم ضبط القيمة التلقائية على ساعة واحدة. تشير رسالة الأشكال البيانية تعتمد تكلفة التخزين المؤقت على حجم الرمز المميز المُدخل والمدة التي تريد رموز مميزة للاحتفاظ.
يتوافق التخزين المؤقت للسياق مع كل من Gemini 1.5 Pro وGemini 1.5 Flash.
حالات استخدام التخزين المؤقت للسياق
ويُعد التخزين المؤقت للسياق مناسبًا بشكل خاص للسيناريوهات التي تهدد تتم الإشارة إلى السياق الأولي بشكل متكرر من خلال طلبات أقصر. ننصحك باستخدام التخزين المؤقت للسياق لحالات الاستخدام مثل:
- برامج روبوت دردشة مع تعليمات نظام شاملة
- تحليل متكرر لملفات الفيديو الطويلة
- طلبات بحث متكررة مقابل مجموعات كبيرة من المستندات
- تحليل مستودع الرموز بشكل متكرّر أو إصلاح الأخطاء
كيف يؤدي التخزين المؤقت إلى تقليل التكاليف
التخزين المؤقت للسياق هو ميزة مدفوعة مُصمَّمة لخفض التكاليف التشغيلية الإجمالية. تستند الفوترة إلى العوامل التالية:
- عدد الرموز المميزة لذاكرة التخزين المؤقت: عدد الرموز المميزة للإدخال والتي تم تخزينها مؤقتًا، وتتم فوترتها بمعدل منخفض عند تضمينه في الطلبات اللاحقة.
- مدة التخزين: مدة تخزين الرموز المميّزة المخزَّنة مؤقتًا (TTL)، تتم الفوترة استنادًا إلى مدة البقاء (TTL) الخاصة بعدد الرموز المميّزة المخزّنة مؤقتًا. لا يوجد حد أدنى أو الحد الأقصى على TTL.
- عوامل أخرى: يتم تطبيق رسوم أخرى، مثل الرموز المميزة للإدخال غير المخزّنة مؤقتًا والرموز المميزة للمخرجات.
للحصول على تفاصيل الأسعار المعدَّلة، يُرجى الرجوع إلى أسعار Gemini API . لمعرفة كيفية حساب الرموز المميزة، راجع الرمز المميّز الدليل.
كيفية استخدام التخزين المؤقت للسياق
يفترض هذا القسم أنّك ثبَّت حزمة تطوير برامج Gemini وضبطت واجهة برمجة تطبيقات. كما هو موضح في quickstart.
إنشاء محتوى باستخدام ذاكرة تخزين مؤقت
يوضّح المثال التالي كيفية إنشاء محتوى باستخدام نظام مخزَّن مؤقتًا. التعليمات وملف الفيديو.
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
جديدة لذاكرة التخزين المؤقت. تغيير أي شيء آخر
حول ذاكرة التخزين المؤقت غير مدعومة.
يوضح المثال التالي كيفية تحديث ttl
لذاكرة التخزين المؤقت باستخدام
CachedContent.update()
import datetime
cache.update(ttl=datetime.timedelta(hours=2))
حذف ذاكرة تخزين مؤقت
توفر خدمة التخزين المؤقت عملية حذف لإزالة المحتوى يدويًا
من ذاكرة التخزين المؤقت. يوضح المثال التالي كيفية حذف ذاكرة تخزين مؤقت باستخدام
CachedContent.delete()
cache.delete()
اعتبارات أخرى
يجب مراعاة الاعتبارات التالية عند استخدام التخزين المؤقت للسياق:
- الحد الأدنى لعدد الرموز المميزة للإدخال في التخزين المؤقت للسياق هو 32,768، الحد الأقصى هو الحد الأقصى للنموذج المحدد. (لمزيد من المعلومات حول عدد الرموز المميزة، راجِع دليل الرموز المميّزة).
- لا يُفرّق النموذج بين الرموز المميّزة المخزَّنة مؤقتًا والرموز العادية رموز الإدخال المميزة. المحتوى المخبأ هو مجرد بادئة إلى المطالبة.
- لا يتم فرض قيود على المعدَّل أو الاستخدام في التخزين المؤقت للسياق. المعيار
تنطبق حدود معدّل الضريبة على
GenerateContent
، وتشمل حدود الرموز المميّزة مخزنة مؤقتًا الرموز المميزة. - يتم عرض عدد الرموز المميّزة المخزّنة مؤقتًا في
usage_metadata
من وإنشاء عمليات خدمة ذاكرة التخزين المؤقت والحصول عليها وإدراجها فيGenerateContent
عند استخدام ذاكرة التخزين المؤقت.