التخزين المؤقت للسياق

في سير عمل الذكاء الاصطناعي النموذجي، يمكنك تمرير رموز الإدخال المميزة نفسها مرارًا وتكرارًا إلى نموذج. باستخدام ميزة التخزين المؤقت للسياق في Gemini API، يمكنك نقل بعض المحتوى إلى النموذج مرة واحدة، وتخزين الرموز المميزة للإدخال مؤقتًا، ثم الرجوع إلى الرموز المميزة المخزّنة مؤقتًا للطلبات اللاحقة. في مجلدات معينة، يكون استخدام الرموز المميزة المخزنة مؤقتًا أقل تكلفة من تمرير مجموعة الرموز المميزة بشكل متكرر

عند تخزين مجموعة من الرموز المميزة مؤقتًا، يمكنك اختيار المدة التي تريد خلالها قبل حذف الرموز المميزة تلقائيًا. مدة التخزين المؤقت هذه تسمى مدة البقاء (TTL). وفي حال تم ترك السياسة بدون ضبط، يتم ضبط القيمة التلقائية على ساعة واحدة. تشير رسالة الأشكال البيانية تعتمد تكلفة التخزين المؤقت على حجم الرمز المميز المُدخل والمدة التي تريد رموز مميزة للاحتفاظ.

يتوافق التخزين المؤقت للسياق مع كل من Gemini 1.5 Pro وGemini 1.5 Flash.

حالات استخدام التخزين المؤقت للسياق

ويُعد التخزين المؤقت للسياق مناسبًا بشكل خاص للسيناريوهات التي تهدد تتم الإشارة إلى السياق الأولي بشكل متكرر من خلال طلبات أقصر. ننصحك باستخدام التخزين المؤقت للسياق لحالات الاستخدام مثل:

  • برامج روبوت دردشة مع تعليمات نظام شاملة
  • تحليل متكرر لملفات الفيديو الطويلة
  • طلبات بحث متكررة مقابل مجموعات كبيرة من المستندات
  • تحليل مستودع الرموز بشكل متكرّر أو إصلاح الأخطاء

كيف يؤدي التخزين المؤقت إلى تقليل التكاليف

التخزين المؤقت للسياق هو ميزة مدفوعة مُصمَّمة لخفض التكاليف التشغيلية الإجمالية. تستند الفوترة إلى العوامل التالية:

  1. عدد الرموز المميزة لذاكرة التخزين المؤقت: عدد الرموز المميزة للإدخال والتي تم تخزينها مؤقتًا، وتتم فوترتها بمعدل منخفض عند تضمينه في الطلبات اللاحقة.
  2. مدة التخزين: مدة تخزين الرموز المميّزة المخزَّنة مؤقتًا (TTL)، تتم الفوترة استنادًا إلى مدة البقاء (TTL) الخاصة بعدد الرموز المميّزة المخزّنة مؤقتًا. لا يوجد حد أدنى أو الحد الأقصى على TTL.
  3. عوامل أخرى: يتم تطبيق رسوم أخرى، مثل الرموز المميزة للإدخال غير المخزّنة مؤقتًا والرموز المميزة للمخرجات.

للحصول على تفاصيل الأسعار المعدَّلة، يُرجى الرجوع إلى أسعار 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 عند استخدام ذاكرة التخزين المؤقت.