Bağlamı önbelleğe alma

Tipik bir AI iş akışında aynı giriş jetonlarını tekrar tekrar bahsedeceğim. Gemini API bağlamı önbelleğe alma özelliğini kullanarak bazı içerikleri giriş jetonlarını önbelleğe almak, ardından önbellekteki jetonlara bakmak kontrol edebilirsiniz. Belirli hacimlerde, önbelleğe alınan jetonları kullanmak daha düşük maliyettir sürekli olarak geçmekten daha iyidir.

Bir jeton grubunu önbelleğe aldığınızda, önbelleğin ne kadar süre boyunca ve jetonlar otomatik olarak silinmeden önce mevcut olanları kontrol edin. Bu önbelleğe alma süresi geçerlilik süresi (TTL) olarak adlandırılır. Politika ayarlanmazsa TTL varsayılan olarak 1 saat olur. İlgili içeriği oluşturmak için kullanılan önbelleğe alma maliyeti, giriş jetonunun boyutuna ve kalıcı olması gerekir.

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 verinin elde edildiği senaryolar için uygundur. Daha kısa isteklerde tekrar tekrar ilk bağlama referans verilir. Şu özelliklerden faydalanabilirsiniz: kullanım alanları için bağlam önbelleğe alma aşağıdaki gibi:

  • Kapsamlı sistem talimatları içeren chatbot'lar
  • Uzun video dosyalarının yinelenen analizi
  • Büyük doküman kümelerinde yinelenen sorgular
  • 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:

  1. Önbellek jetonu sayısı: Önbelleğe alınan ve faturalandırılan giriş jetonlarının sayısı istemlere dahil edildiğinde daha düşük bir orana sahip olabiliyor.
  2. 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. Minimum değer yoktur TTL'deki maksimum sınırları belirleyin.
  3. Diğer faktörler: Önbelleğe alınmamış giriş jetonları gibi başka ücretler geçerlidir. ve çıkış jetonları da oluşturabilirsiniz.

Güncel fiyatlandırma bilgileri için Gemini API fiyatlandırmasına bakın öğrenin. Jetonların nasıl sayılacağını öğrenmek için Jeton rehberini inceleyin.

Bağlam önbelleğe alma nasıl kullanılır?

Bu bölümde, Gemini SDK'sı yüklediğiniz ve API yapılandırdığınız varsayılmaktadır tuşuna basın.

Önbellek kullanarak içerik oluşturma

Aşağıdaki örnekte, önbelleğe alınmış bir sistem kullanılarak nasıl içerik oluşturulacağı gösterilmektedir talimat ve video dosyası olarak ekleyebilirsiniz.

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 listele

Önbelleğe alınan içeriği almak veya görüntülemek mümkün değildir, ancak önbellek meta verileri (name, model, display_name, usage_metadata, create_time, update_time ve expire_time).

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. Herhangi bir şeyi değiştirme desteklenmemektedir.

Aşağıdaki örnekte, bir önbelleğin ttl öğesinin CachedContent.update().

import datetime

cache.update(ttl=datetime.timedelta(hours=2))

Önbelleği silme

Önbelleğe alma hizmeti, içeriği manuel olarak kaldırmak için bir silme işlemi sağlar kaldıracaktır. Aşağıdaki örnekte, CachedContent.delete()

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 değeri, belirli bir modelin maksimum değeriyle aynıdır. (Daha fazla bilgi için daha fazla bilgi için Jeton rehberine bakın.
  • Model, önbelleğe alınan jetonlar ile normal jetonlar arasında bir ayrım yapmaz. giriş jetonları. Önbelleğe alınan içerik, istemin önekidir.
  • Bağlam önbelleğe alma işleminde özel bir hız veya kullanım sınırı yoktur; standart GenerateContent hız sınırları geçerlidir ve jeton sınırları, önbelleğe alınanları içerir jeton.
  • Önbelleğe alınan jetonların sayısı usage_metadata öğesindeki oluşturma, alma ve listeleme işlemlerinin yanı sıra Önbellek kullanılırken GenerateContent.