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 mevcut olmasını istediğinizi seçebilirsiniz. Bu önbelleğe alma süresine geçerlilik süresi (TTL) denir. Politika ayarlanmazsa TTL varsayılan olarak 1 saattir. Önbelleğe alma maliyeti, giriş jetonu boyutuna ve jetonların ne kadar süre 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 yinelenen 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 bilgileri için Gemini API fiyatlandırma sayfasına göz atı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, Gemini SDK'sını yüklediğiniz (veya curl'ü yüklediğiniz) ve hızlı başlangıç kılavuzunda gösterildiği gibi bir API anahtarı yapılandırdığınız varsayılır.
Önbellek 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 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)
Önbellekleri listeleme
Önbelleğe alınan içeriği almak veya görüntülemek mümkün değildir ancak önbellek meta verilerini (name
, model
, display_name
, usage_metadata
, create_time
, update_time
ve expire_time
) alabilirsiniz.
Yüklenen tüm önbelleklerin meta verilerini listelemek için CachedContent.list()
komutunu kullanın:
for c in caching.CachedContent.list():
print(c)
Önbelleği güncelleme
Önbellek için yeni bir ttl
veya expire_time
ayarlayabilirsiniz. Önbellekle ilgili başka bir değişiklik yapmak desteklenmez.
Aşağıdaki örnekte, CachedContent.update()
kullanılarak bir önbelleğin ttl
değerinin nasıl güncelleneceği gösterilmektedir.
import datetime
cache.update(ttl=datetime.timedelta(hours=2))
Ö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, CachedContent.delete()
kullanılarak bir önbelleğin nasıl silineceği gösterilmektedir.
cache.delete()
Göz önünde bulundurulacak diğer noktalar
Bağlam önbelleğe alma özelliğini kullanırken aşağıdaki noktaları göz önünde bulundurun:
- Bağlam önbelleğe alma için minimum giriş jetonu sayısı 32.768'dir ve maksimum sayı, belirli bir modelin maksimum sayıyla aynıdır. (Jeton sayma hakkında daha fazla bilgi için Jeton rehberine bakın).
- 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.