In einem typischen KI-Workflow übergeben Sie möglicherweise immer wieder dieselben Eingabetokens an ein Modell. Mit der Kontext-Caching-Funktion der Gemini API können Sie Inhalte einmal an das Modell übergeben, die Eingabetokens im Cache speichern und dann bei nachfolgenden Anfragen auf die im Cache gespeicherten Tokens verweisen. Bei bestimmten Volumina ist die Verwendung von gecachten Tokens kostengünstiger als die wiederholte Weitergabe desselben Token-Korpus.
Wenn Sie eine Reihe von Tokens im Cache speichern, können Sie festlegen, wie lange der Cache vorhanden sein soll, bevor die Tokens automatisch gelöscht werden. Diese Caching-Dauer wird als Gültigkeitsdauer (TTL) bezeichnet. Wenn die Richtlinie nicht konfiguriert ist, wird die TTL standardmäßig auf 1 Stunde festgelegt. Die Kosten für das Caching hängen von der Größe des Eingabetokens ab und davon, wie lange die Tokens bestehen bleiben sollen.
Kontext-Caching unterstützt sowohl Gemini 1.5 Pro als auch Gemini 1.5 Flash.
Wann Kontext-Caching verwendet werden sollte
Kontext-Caching eignet sich besonders für Szenarien, bei denen in kürzeren Anfragen wiederholt auf eine hohe anfängliche Kontextmenge verwiesen wird. Ziehen Sie die Verwendung von Kontext-Caching für Anwendungsfälle wie diese in Betracht:
- Chatbots mit ausführlichen Systemanweisungen
- Wiederholte Analyse langer Videodateien
- Wiederkehrende Abfragen großer Dokumentgruppen
- Häufige Analyse oder Behebung von Fehlern im Code-Repository
Wie Caching die Kosten senkt
Kontext-Caching ist eine kostenpflichtige Funktion, mit der sich die Gesamtbetriebskosten senken lassen. Die Abrechnung erfolgt anhand der folgenden Faktoren:
- Anzahl der Cache-Tokens: Die Anzahl der im Cache gespeicherten Eingabetokens, für die ein ermäßigter Tarif für die Nutzung in nachfolgenden Prompts gilt.
- Speicherdauer:Die Dauer, für die im Cache gespeicherte Tokens gespeichert werden (TTL). Sie wird basierend auf der TTL-Dauer der im Cache gespeicherten Tokenanzahl berechnet. Es gibt keine Mindest- oder Höchstwerte für die TTL.
- Andere Faktoren: Es fallen weitere Gebühren an, z. B. für nicht im Cache gespeicherte Eingabe- und Ausgabetokens.
Aktuelle Preisinformationen finden Sie in der Preisübersicht für die Gemini API. Weitere Informationen zum Zählen von Tokens finden Sie im Token-Leitfaden.
Kontext-Caching verwenden
In diesem Abschnitt wird davon ausgegangen, dass Sie ein Gemini SDK (oder curl) installiert und einen API-Schlüssel konfiguriert haben, wie in der Kurzanleitung gezeigt.
Inhalte mithilfe eines Caches generieren
Im folgenden Beispiel wird gezeigt, wie Inhalte mit einer im Cache gespeicherten Anleitung und Videodatei generiert werden.
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)
Caches auflisten
Im Cache gespeicherte Inhalte können nicht abgerufen oder angesehen werden. Sie können aber Cache-Metadaten (name
, model
, display_name
, usage_metadata
, create_time
, update_time
und expire_time
) abrufen.
Verwenden Sie CachedContent.list()
, um Metadaten für alle hochgeladenen Caches aufzulisten:
for c in caching.CachedContent.list():
print(c)
Cache aktualisieren
Sie können für einen Cache eine neue ttl
oder expire_time
festlegen. Andere Änderungen am Cache werden nicht unterstützt.
Im folgenden Beispiel wird gezeigt, wie die ttl
eines Caches mit CachedContent.update()
aktualisiert wird.
import datetime
cache.update(ttl=datetime.timedelta(hours=2))
Cache löschen
Der Caching-Dienst bietet einen Löschvorgang zum manuellen Entfernen von Inhalten aus dem Cache. Das folgende Beispiel zeigt, wie Sie einen Cache mit CachedContent.delete()
löschen.
cache.delete()
Weitere Überlegungen
Beachten Sie bei der Verwendung von Kontext-Caching die folgenden Überlegungen:
- Die minimale Anzahl der Eingabetokens für das Kontext-Caching beträgt 32.768 und das Maximum ist mit dem Maximum des jeweiligen Modells identisch. Weitere Informationen zum Zählen von Tokens finden Sie im Leitfaden zu Tokens.
- Das Modell unterscheidet nicht zwischen im Cache gespeicherten Tokens und regulären Eingabetokens. Im Cache gespeicherte Inhalte sind einfach ein Präfix für die Aufforderung.
- Es gibt keine speziellen Raten- oder Nutzungslimits für das Kontext-Caching. Es gelten die standardmäßigen Ratenbegrenzungen für
GenerateContent
und Tokenlimits umfassen im Cache gespeicherte Tokens. - Die Anzahl der im Cache gespeicherten Tokens wird im
usage_metadata
der Erstellungs-, Abruf- und Listenvorgänge des Cache-Dienstes sowie bei Verwendung des Caches inGenerateContent
zurückgegeben.