Tipik bir yapay zeka iş akışında, bir modele aynı giriş jetonlarını tekrar tekrar iletebilirsiniz. Gemini API bağlam önbelleğe alma özelliğini kullanarak bazı içerikleri modele bir kez aktarabilir, giriş jetonlarını önbelleğe alabilir ve ardından sonraki istekler için önbelleğe alınan jetonlara başvurabilirsiniz. Belirli hacimlerde, önbelleğe alınmış jetonları kullanmak aynı jeton grubunu tekrar tekrar iletmek yerine daha düşük maliyetlidir.
Bir jeton grubunu önbelleğe aldığınızda, jetonlar otomatik olarak silinmeden önce önbelleğin ne kadar süre boyunca var olmasını istediğinizi seçebilirsiniz. Bu önbelleğe alma süresine geçerlilik süresi (TTL) denir. Ayarlanmazsa TTL varsayılan olarak 1 saat olur. Önbelleğe alma maliyeti, giriş jetonu boyutuna ve jetonların ne kadar süreyle kalmasını istediğinize bağlıdır.
Bağlam önbelleğe alma hem Gemini 1.5 Pro hem de Gemini 1.5 Flash'ı destekler.
Bağlam önbelleğe alma ne zaman kullanılır?
Bağlam önbelleğe alma, özellikle önemli bir başlangıç bağlamının daha kısa istekler tarafından tekrar tekrar referans verildiği senaryolara uygundur. Aşağıdaki gibi kullanım alanları için bağlama dayalı önbelleğe alma özelliğini kullanabilirsiniz:
- Kapsamlı sistem talimatları içeren chatbot'lar
- Uzun video dosyalarının tekrarlı analizi
- Büyük doküman kümelerine yönelik yinelenen sorgular
- Sık sık kod deposu analizi veya hata düzeltme
Önbelleğe alma maliyetleri nasıl azaltır?
Bağlam önbelleğe alma, genel operasyon maliyetlerini azaltmak için tasarlanmış ücretli bir özelliktir. Faturalandırma aşağıdaki faktörlere göre yapılır:
- Önbelleğe alınan jeton sayısı: Sonraki istemlere dahil edildiğinde daha düşük bir oranda faturalandırılan, önbelleğe alınan giriş jetonlarının sayısı.
- Depolama süresi: Önbelleğe alınan jetonların depolandığı süre (TTL). Önbelleğe alınan jeton sayısının TTL süresine göre faturalandırılır. TTL için minimum veya maksimum sınır yoktur.
- Diğer faktörler: Önbelleğe alınmamış giriş jetonları ve çıkış jetonları gibi diğer ücretler geçerlidir.
Güncel fiyatlandırma ayrıntıları için Gemini API fiyatlandırma sayfasına bakın. Jetonları nasıl sayacağınızı öğrenmek için Jeton kılavuzuna göz atın.
Bağlam önbelleğe alma özelliğini kullanma
Bu bölümde, bir Gemini SDK'sı (veya curl) yüklediğiniz ve hızlı başlangıç bölümünde gösterildiği gibi bir API anahtarı yapılandırdığınız varsayılmaktadır.
Önbelleği kullanarak içerik oluşturma
Aşağıdaki örnekte, önbelleğe alınmış bir sistem talimatı ve video dosyası kullanılarak nasıl içerik oluşturulacağı gösterilmektedir.
import os
import pathlib
import requests
import time
from google import genai
from google.genai import types
# Get your API key from https://aistudio.google.com/app/apikey
# Put it in a "GOOGLE_API_KEY" environment variable.
# For more details, see
# https://github.com/google-gemini/cookbook/blob/main/quickstarts/Authentication.ipynb
client = genai.Client()
# Download video file
url = 'https://storage.googleapis.com/generativeai-downloads/data/Sherlock_Jr_FullMovie.mp4'
path_to_video_file = pathlib.Path('Sherlock_Jr_FullMovie.mp4')
if not path_to_video_file.exists():
with path_to_video_file.open('wb') as wf:
response = requests.get(url, stream=True)
for chunk in response.iter_content(chunk_size=32768):
wf.write(chunk)
# Upload the video using the Files API
video_file = client.files.upload(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 = client.files.get(name=video_file.name)
print(f'Video processing complete: {video_file.uri}')
# You must use an explicit version suffix. "-flash-001", not just "-flash".
model='models/gemini-1.5-flash-001'
# Create a cache with a 5 minute TTL
cache = client.caches.create(
model=model,
config=types.CreateCachedContentConfig(
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="300s",
)
)
# Construct a GenerativeModel which uses the created cache.
response = client.models.generate_content(
model = model,
contents= (
'Introduce different characters in the movie by describing '
'their personality, looks, and names. Also list the timestamps '
'they were introduced for the first time.'),
config=types.GenerateContentConfig(cached_content=cache.name)
)
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)
Önbellekleri listeleme
Önbelleğe alınmış içeriği almak veya görüntülemek mümkün değildir ancak önbelleğe alınmış meta verileri (name
, model
, display_name
, usage_metadata
, create_time
, update_time
ve expire_time
) alabilirsiniz.
Yüklenen tüm önbellekleri meta verileriyle birlikte listelemek için CachedContent.list()
kullanın:
for cache in client.caches.list():
print(cache)
Adını bildiğiniz bir önbellek nesnesinin meta verilerini almak için get
özelliğini kullanın:
client.caches.get(name=name)
Önbelleği güncelleme
Önbelleğe yeni bir ttl
veya expire_time
ayarlayabilirsiniz. Önbelleğe alma ile ilgili başka bir şeyin değiştirilmesi desteklenmez.
Aşağıdaki örnekte, client.caches.update()
kullanılarak bir önbelleğin ttl
değerinin nasıl güncelleneceği gösterilmektedir.
from google import genai
from google.genai import types
client.caches.update(
name = cache.name,
config = types.UpdateCachedContentConfig(
ttl='300s'
)
)
Süre sonu saatini ayarlamak için datetime
nesnesi veya ISO biçimli bir tarih/saat dizesi (2025-01-27T16:02:36.473528+00:00
gibi dt.isoformat()
) kabul edilir. Saatiniz bir saat dilimi içermelidir (datetime.utcnow()
saat dilimi eklemez, datetime.now(datetime.timezone.utc)
saat dilimi ekler).
from google import genai
from google.genai import types
import datetime
# You must use a time zone-aware time.
in10min = datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(minutes=10)
client.caches.update(
name = cache.name,
config = types.UpdateCachedContentConfig(
expire_time=in10min
)
)
Önbelleği silme
Önbelleğe alma hizmeti, içeriği önbellekten manuel olarak kaldırmak için bir silme işlemi sağlar. Aşağıdaki örnekte bir önbelleğin nasıl silineceği gösterilmektedir:
client.caches.delete(cache.name)
Göz önünde bulundurulacak diğer noktalar
Bağlam önbelleğe alma özelliğini kullanırken aşağıdaki hususları göz önünde bulundurun:
- Bağlam önbelleğe alma için minimum giriş jetonu sayısı 32.768'dir ve maksimum değer, belirli modelin maksimum değeriyle aynıdır. (Jeton sayma hakkında daha fazla bilgi için Jeton rehberi başlıklı makaleyi inceleyin.)
- Model, önbelleğe alınmış jetonlar ile normal giriş jetonları arasında herhangi bir ayrım yapmaz. Önbelleğe alınan içerik, istem için bir ön ektir.
- Bağlam önbelleğe alma işleminde özel bir ücret veya kullanım sınırı yoktur.
GenerateContent
için standart ücret sınırları geçerlidir ve jeton sınırları, önbelleğe alınmış jetonları içerir. - Önbelleğe alınan jetonların sayısı, önbelleğe alma hizmetinin oluşturma, alma ve listeleme işlemlerinden
usage_metadata
içinde ve önbelleğe alma işlemi sırasındaGenerateContent
içinde döndürülür.