Für Ihre KI-Funktion können Sie dieselben Eingabe-Tokens (Inhalte) immer wieder an ein Modell übergeben. Für diese Anwendungsfälle können Sie diese Inhalte stattdessen im Cache speichern. Das bedeutet, dass Sie die Inhalte einmal an das Modell übergeben, speichern und in nachfolgenden Anfragen darauf verweisen.
Das Kontext-Caching kann die Latenz und die Kosten für wiederkehrende Aufgaben mit einer großen Menge an Inhalten, z. B. große Textmengen, eine Audiodatei oder eine Videodatei, erheblich reduzieren. Typische Anwendungsfälle für im Cache gespeicherte Inhalte sind detaillierte Persona-Dokumente, Codebasen oder Handbücher.
Gemini-Modelle bieten zwei verschiedene Caching-Mechanismen:
Implizites Caching: Automatisch für die meisten Modelle aktiviert, keine garantierten Kosteneinsparungen
Explizites Caching: Kann bei den meisten Modellen optional und manuell aktiviert werden und führt in der Regel zu Kosteneinsparungen.
Explizites Caching ist nützlich, wenn Sie mit höherer Wahrscheinlichkeit Kosteneinsparungen erzielen möchten, erfordert jedoch zusätzlichen Entwicklungsaufwand.
Sowohl beim impliziten als auch beim expliziten Caching gibt das Feld cachedContentTokenCount in den Metadaten der Antwort die Anzahl der Tokens im im Cache gespeicherten Teil der Eingabe an. Informationen zu den Preisen für das explizite Caching finden Sie unten auf dieser Seite im Abschnitt Preise.
Unterstützte Modelle
Caching wird bei Verwendung der folgenden Modelle unterstützt:
gemini-4-argon(nur implizites Caching; explizites Caching wird nicht unterstützt)gemini-3.8-flashgemini-3.5-flash-lite(und die älteregemini-3.1-flash-lite)
Ältere Gemini 3.x Flash- und Gemini 2.5-Modelle für die allgemeine Verwendung unterstützen diese Funktion, werden aber aufgrund bevorstehender Abschaltdaten und/oder automatischer Weiterleitung zu neueren Modellen nicht mehr empfohlen.
Modelle zur Mediengenerierung (z. B. die Gemini Nano Banana-Modelle wie gemini-nano-banana-2.1) unterstützen das Kontext-Caching nicht.
Größenbeschränkungen für im Cache gespeicherte Inhalte
Für jedes Modell gilt eine Mindestanzahl an Tokens für im Cache gespeicherte Inhalte. Der Höchstwert wird durch das Kontextfenster des Modells vorgegeben.
- Gemini 4 Argon: mindestens 4.096 Tokens (Gemini Developer API) oder mindestens 6.144 Tokens (Agent Platform Gemini API (formerly Vertex AI))
- Gemini Pro-Modelle: mindestens 4.096 Tokens
- Gemini Flash-Modelle: mindestens 1.024 Tokens
Außerdem beträgt die maximale Größe von Inhalten, die Sie mit einem Blob oder Text im Cache speichern können, 10 MB.
Implizites Caching
Implizites Caching ist standardmäßig aktiviert und für die meisten Gemini-Modelle verfügbar.
Google gibt Kosteneinsparungen automatisch weiter, wenn Ihre Anfrage auf den im Cache gespeicherten Inhalt trifft. Hier sind einige Möglichkeiten, die Wahrscheinlichkeit zu erhöhen, dass Ihre Anfrage implizites Caching verwendet:
- Versuchen Sie, große und häufige Inhalte am Anfang des Prompts zu platzieren.
- Versuchen Sie, Anfragen mit einem ähnlichen Präfix innerhalb kurzer Zeit zu senden.
Die Anzahl der Tokens im im Cache gespeicherten Teil Ihrer Eingabe wird im Feld cachedContentTokenCount in den Metadaten einer Antwort angegeben.
Explizites Caching
Explizites Caching ist standardmäßig nicht aktiviert und ist eine optionale Funktion der Gemini-Modelle.
Das Modell gemini-4-argon unterstützt kein explizites Caching.
So richten Sie explizite Inhaltscaches ein und arbeiten damit:
Explizite Caches verwalten, einschließlich:
Beachten Sie, dass explizite Inhaltscaches mit implizitem Caching interagieren, was möglicherweise zu zusätzlichem Caching über den explizit im Cache gespeicherten Inhalt hinaus führt. Sie können die Datenaufbewahrung im Cache verhindern, indem Sie das implizite Caching deaktivieren und keine expliziten Caches erstellen. Weitere Informationen finden Sie unter Caching aktivieren und deaktivieren.
Expliziten Cache erstellen und verwenden
Zum Erstellen und Verwenden eines expliziten Inhaltscaches ist Folgendes erforderlich:
Wichtige Informationen zum Erstellen und Verwenden eines expliziten Cache
Ihr Cache muss auf die Prompt-Anfragen Ihrer App und Ihre Server-Prompt-Vorlage abgestimmt sein:
Der Cache ist spezifisch für einen Gemini API-Anbieter. In der Prompt-Anfrage Ihrer App muss derselbe Anbieter verwendet werden.
Für Firebase AI Logic empfehlen wir dringend, explizite Inhaltscaches nur mit Agent Platform Gemini API (formerly Vertex AI) zu verwenden. Alle Informationen und Beispiele auf dieser Seite beziehen sich auf diesen Gemini API-Anbieter.Der Cache ist spezifisch für ein Gemini-Modell. Die Prompt-Anfrage Ihrer App muss dasselbe Modell verwenden.
Der Cache ist standortspezifisch, wenn Sie Agent Platform Gemini API (formerly Vertex AI) verwenden.
Der Speicherort für den expliziten Cache muss mit dem Speicherort der Server-Prompt-Vorlage und dem Speicherort, an dem Sie auf das Modell zugreifen, in der Prompt-Anfrage Ihrer App übereinstimmen.
Beachten Sie außerdem die folgenden Einschränkungen und Anforderungen für das explizite Caching:
Nachdem ein expliziter Cache erstellt wurde, können Sie nichts mehr daran ändern, außer der TTL oder der Ablaufzeit.
Sie können jeden unterstützten MIME-Typ für Eingabedateien oder auch nur Text, der in der Anfrage zur Cache-Erstellung angegeben ist, im Cache speichern.
Wenn Sie eine Datei in den Cache aufnehmen möchten, müssen Sie die Datei als Cloud Storage-URI angeben. Es darf sich nicht um eine Browser- oder YouTube-URL handeln.
Außerdem werden Zugriffsbeschränkungen für die Datei zum Zeitpunkt der Cache-Erstellung geprüft und Zugriffsbeschränkungen werden zum Zeitpunkt der Nutzeranfrage nicht noch einmal geprüft. Achten Sie daher darauf, dass alle Daten im expliziten Cache für alle Nutzer geeignet sind, die eine Anfrage stellen, die diesen Cache enthält.
Wenn Sie Systemanweisungen oder Tools wie Code-Ausführung, URL Context, Fundierung mit
Google Search oder Fundierung mitGoogle Maps verwenden möchten, muss der Cache selbst deren Konfigurationen enthalten. Sie können nicht in der Server-Prompt-Vorlage oder in der Prompt-Anfrage Ihrer App konfiguriert werden. Beachten Sie, dass Server-Prompt-Vorlagen noch keine Funktionsaufrufe (oder Chats) unterstützen. Weitere Informationen zum Konfigurieren von Systemanweisungen und Tools in Ihrem Cache finden Sie in der REST API der Agent Platform Gemini API (formerly Vertex AI).
Schritt 1: Cache erstellen
Erstellen Sie den Cache direkt mit der REST API von Agent Platform Gemini API (formerly Vertex AI).
Im folgenden Beispiel wird ein expliziter Cache einer PDF-Datei als Inhalt erstellt.
Syntax:
PROJECT_ID="PROJECT_ID"
MODEL_ID="GEMINI_MODEL" # for example, gemini-3.8-flash
LOCATION="LOCATION" # location for both the cache and the model
MIME_TYPE="MIME_TYPE"
CACHED_CONTENT_URI="CLOUD_STORAGE_FILE_URI" # must be a Cloud Storage URI
CACHE_DISPLAY_NAME="CACHE_DISPLAY_NAME" # optional
TTL="CACHE_TIME_TO_LIVE" # optional (if not specified, defaults to 3600s)
curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://${LOCATION}-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/${LOCATION}/cachedContents \
-d @- <<EOF
{
"model":"projects/${PROJECT_ID}/locations/${LOCATION}/publishers/google/models/${MODEL_ID}",
"contents": [
{
"role": "user",
"parts": [
{
"fileData": {
"mimeType": "${MIME_TYPE}",
"fileUri": "${CACHED_CONTENT_URI}"
}
}
]
}
],
"displayName": "${CACHE_DISPLAY_NAME}",
"ttl": "${TTL}"
}
EOF
Beispielanfrage:
PROJECT_ID="my-amazing-app"
MODEL_ID="gemini-3.8-flash"
LOCATION="global"
MIME_TYPE="application/pdf"
CACHED_CONTENT_URI="gs://cloud-samples-data/generative-ai/pdf/2312.11805v3.pdf"
CACHE_DISPLAY_NAME="Gemini - A Family of Highly Capable Multimodal Model (PDF)"
TTL="7200s"
curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://${LOCATION}-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/${LOCATION}/cachedContents \
-d @- <<EOF
{
"model":"projects/${PROJECT_ID}/locations/${LOCATION}/publishers/google/models/${MODEL_ID}",
"contents": [
{
"role": "user",
"parts": [
{
"fileData": {
"mimeType": "${MIME_TYPE}",
"fileUri": "${CACHED_CONTENT_URI}"
}
}
]
}
],
"displayName": "${CACHE_DISPLAY_NAME}",
"ttl": "${TTL}"
}
EOF
Beispielantwort:
Die Antwort enthält einen vollständig qualifizierten Ressourcennamen (name), der für den Cache global eindeutig ist. Das letzte Segment ist die Cache-ID. Sie verwenden diesen gesamten name-Wert im nächsten Schritt des Workflows.
{
"name": "projects/861083271981/locations/global/cachedContents/4545031458888089601",
"model": "projects/my-amazing-app/locations/global/publishers/google/models/gemini-3.8-flash",
"createTime": "2024-06-04T01:11:50.808236Z",
"updateTime": "2024-06-04T01:11:50.808236Z",
"expireTime": "2024-06-04T02:11:50.794542Z"
}
Schritt 2: Auf den Cache in einer Server-Prompt-Vorlage verweisen
Nachdem Sie den Cache erstellt haben, verweisen Sie in der Eigenschaft cachedContent einer Server-Prompt-Vorlage mit name darauf.
Beachten Sie beim Erstellen der Server-Prompt-Vorlage die folgenden Anforderungen:
Verwenden Sie die vollständig qualifizierte Ressource
nameaus der Antwort, die Sie beim Erstellen des Cache erhalten haben. Dies ist nicht der optionale Anzeigename, den Sie in der Anfrage angegeben haben.Der Speicherort für die Server-Prompt-Vorlage muss mit dem Speicherort des Cache übereinstimmen.
Wenn Sie Systemanweisungen oder Tools verwenden möchten, müssen diese als Teil des Cache und nicht als Teil der Server-Prompt-Vorlage konfiguriert werden.
Syntax:
{{cachedContent name="YOUR_CACHE_RESOURCE_NAME"}}
{{role "user"}}
{{userPrompt}}
Beispiel:
{{cachedContent name="projects/861083271981/locations/global/cachedContents/4545031458888089601"}}
{{role "user"}}
{{userPrompt}}
Alternativ kann der Wert des Parameters name in der Server-Prompt-Vorlage eine dynamische Eingabevariable sein.
Mit {{cachedContent name=someVariable}}name des Cache als Eingabe für die Anfrage aus Ihrer Anwendung einfügen.
Schritt 3: In der Anfrage Ihrer App auf die Server-Prompt-Vorlage verweisen
Achten Sie beim Verfassen Ihrer Anfrage besonders auf Folgendes:
Verwenden Sie Agent Platform Gemini API (formerly Vertex AI), da der Cache mit diesem Gemini API-Anbieter erstellt wurde.
Der Ort, an dem Sie in der Prompt-Anfrage Ihrer App auf das Modell zugreifen, muss mit dem Ort der Prompt-Vorlage auf dem Server und dem Cache übereinstimmen.
Swift
// ...
// Initialize the Agent Platform Gemini API backend service (formerly Vertex AI).
// Create a `TemplateGenerativeModel` instance.
// Make sure to specify the same location as the server prompt template and the cache.
let model = FirebaseAI.firebaseAI(backend: .agentPlatform(location: "LOCATION"))
.templateGenerativeModel()
do {
let response = try await model.generateContent(
// Specify your template ID.
templateID: "TEMPLATE_ID"
)
if let text = response.text {
print("Response Text: \(text)")
}
} catch {
print("An error occurred: \(error)")
}
print("\n")
Kotlin
// ...
// Initialize the Agent Platform Gemini API backend service (formerly Vertex AI).
// Create a `TemplateGenerativeModel` instance.
// Make sure to specify the same location as the server prompt template and the cache.
val model = Firebase.ai(backend = GenerativeBackend.agentPlatform(location = "LOCATION"))
.templateGenerativeModel()
val response = model.generateContent(
// Specify your template ID.
"TEMPLATE_ID",
)
val text = response.text
println(text)
Java
// ...
// Initialize the Agent Platform Gemini API backend service (formerly Vertex AI).
// Create a `TemplateGenerativeModel` instance.
// Make sure to specify the same location as the server prompt template and the cache.
TemplateGenerativeModel generativeModel = FirebaseAI.getInstance(GenerativeBackend.agentPlatform("LOCATION"))
.templateGenerativeModel();
TemplateGenerativeModelFutures model = TemplateGenerativeModelFutures.from(generativeModel);
Future<GenerateContentResponse> response = model.generateContent(
// Specify your template ID.
"TEMPLATE_ID"
);
addCallback(response,
new FutureCallback<GenerateContentResponse>() {
public void onSuccess(GenerateContentResponse result) {
System.out.println(result.getText());
}
public void onFailure(Throwable t) {
reportError(t);
}
}
executor);
Web
// ...
// Initialize the Agent Platform Gemini API backend service (formerly Vertex AI).
// Make sure to specify the same location as the server prompt template and the cache.
const ai = getAI(app, { backend: new AgentPlatformBackend('LOCATION') });
// Create a `TemplateGenerativeModel` instance
const model = getTemplateGenerativeModel(ai);
const result = await model.generateContent({
// Specify your template ID.
templateId: 'TEMPLATE_ID',
templateVariables: {},
});
const response = result.response;
const text = response.text();
Dart
// ...
// Initialize the Agent Platform Gemini API backend service (formerly Vertex AI).
// Create a `TemplateGenerativeModel` instance.
// Make sure to specify the same location as the server prompt template and the cache.
var _model = FirebaseAI.agentPlatform(location: 'LOCATION').templateGenerativeModel();
var response = await _model.generateContent(
// Specify your template ID.
'TEMPLATE_ID',
inputs: {},
);
var text = response?.text;
print(text);
Einheit
// ...
// Initialize the Agent Platform Gemini API backend service (formerly Vertex AI).
// Make sure to specify the same location as the server prompt template and the cache.
var firebaseAI = FirebaseAI.GetInstance(FirebaseAI.Backend.AgentPlatform(location: "LOCATION"));
// Create a `TemplateGenerativeModel` instance.
var model = firebaseAI.GetTemplateGenerativeModel();
try
{
var response = await model.GenerateContentAsync(
// Specify your template ID.
"TEMPLATE_ID",
new Dictionary<string, object>()
);
Debug.Log($"Response Text: {response.Text}");
}
catch (Exception e) {
Debug.LogError($"An error occurred: {e.Message}");
}
Explizite Caches verwalten
In diesem Abschnitt wird die Verwaltung expliziter Inhaltscaches beschrieben, einschließlich der Auflistung aller Caches, des Abrufs von Metadaten zu einem Cache, der Aktualisierung der TTL oder der Ablaufzeit eines Cache und des Löschens eines Cache.
Explizite Caches verwalten Sie mit der REST API von Agent Platform Gemini API (formerly Vertex AI).
Nachdem ein Cache für explizite Inhalte erstellt wurde, können Sie nichts mehr am Cache ändern, außer der TTL oder der Ablaufzeit.
Alle Caches auflisten
Sie können alle expliziten Caches auflisten, die für Ihr Projekt verfügbar sind. Dieser Befehl gibt nur die Caches am angegebenen Standort zurück.
PROJECT_ID="PROJECT_ID"
LOCATION="LOCATION"
curl \
-X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://${LOCATION}-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/${LOCATION}/cachedContents
Metadaten zu einem Cache abrufen
Es ist nicht möglich, den tatsächlich im Cache gespeicherten Inhalt abzurufen oder anzusehen. Sie können jedoch Metadaten zu einem expliziten Cache abrufen, einschließlich name, model, display_name, usage_metadata, create_time, update_time und expire_time.
Sie müssen den CACHE_ID angeben, das letzte Segment in der vollständig qualifizierten Ressource name des Cache.
PROJECT_ID="PROJECT_ID"
LOCATION="LOCATION"
CACHE_ID="CACHE_ID" # the final segment in the `name` of the cache
curl \
-X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://${LOCATION}-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/${LOCATION}/cachedContents/${CACHE_ID}
TTL oder Ablaufzeit für einen Cache aktualisieren
Wenn Sie einen expliziten Cache erstellen, können Sie optional ttl oder expire_time festlegen.
ttl: Die TTL (Gültigkeitsdauer) für den Cache, insbesondere die Anzahl der Sekunden und Nanosekunden, die der Cache nach seiner Erstellung oder nach der Aktualisierung desttlgültig ist, bevor er abläuft. Wenn Siettlfestlegen, wird dieexpireTimedes Cache automatisch aktualisiert.expire_time: EinTimestamp(z. B.2024-06-30T09:00:00.000000Z), der das absolute Datum und die Uhrzeit angibt, zu der der Cache abläuft.
Wenn Sie keinen dieser Werte festlegen, beträgt die Standard-TTL 1 Stunde. Es gibt keine Mindest- oder Höchstgrenzen für die TTL.
Bei vorhandenen expliziten Caches können Sie ttl oder expire_time hinzufügen oder aktualisieren.
Sie müssen den CACHE_ID angeben, das letzte Segment in der vollständig qualifizierten Ressource name des Cache.
ttl aktualisieren
PROJECT_ID="PROJECT_ID"
LOCATION="LOCATION"
CACHE_ID="CACHE_ID" # the final segment in the `name` of the cache
TTL="CACHE_TIME_TO_LIVE"
curl \
-X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
https://${LOCATION}-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/${LOCATION}/cachedContents/${CACHE_ID} -d \
'{
"ttl": "'$TTL'"
}'
expire_time aktualisieren
PROJECT_ID="PROJECT_ID"
LOCATION="LOCATION"
CACHE_ID="CACHE_ID" # the final segment in the `name` of the cache
EXPIRE_TIME="ABSOLUTE_TIME_CACHE_EXPIRES"
curl \
-X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
https://${LOCATION}-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/${LOCATION}/cachedContents/${CACHE_ID} -d \
'{
"expire_time": "'$EXPIRE_TIME'"
}'
Cache löschen
Wenn ein expliziter Cache nicht mehr benötigt wird, können Sie ihn löschen.
Sie müssen den CACHE_ID angeben, das letzte Segment in der vollständig qualifizierten Ressource name des Cache.
PROJECT_ID="PROJECT_ID"
LOCATION="LOCATION"
CACHE_ID="CACHE_ID" # the final segment in the `name` of the cache
curl \
-X DELETE \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://${LOCATION}-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/${LOCATION}/cachedContents/${CACHE_ID}
Preise für explizites Caching
Explizites Caching ist eine kostenpflichtige Funktion, die die Kosten senken soll. Die Preise basieren auf den folgenden Faktoren:
Eingabe-Tokens für die Cache-Erstellung: Sowohl für das implizite als auch für das explizite Caching werden Ihnen die Eingabe-Tokens, die zum Erstellen des Cache verwendet werden, zum Standardpreis für Eingabe-Tokens in Rechnung gestellt.
Cache-Speicherung: Für das explizite Caching fallen auch Speicherkosten an, die davon abhängen, wie lange Caches gespeichert werden. Für das implizite Caching fallen keine Speicherkosten an. Weitere Informationen finden Sie unter Preise für Agent Platform Gemini API (formerly Vertex AI).
Nutzung von im Cache gespeicherten Inhalten: Durch explizites Caching erhalten Sie einen Rabatt, wenn auf explizite Caches verwiesen wird. Das bedeutet, dass Sie einen Rabatt auf die Eingabetokens erhalten, wenn diese auf einen vorhandenen Cache verweisen. Für Gemini 2.5 und neuere Modelle beträgt dieser Rabatt 90 %.
Die Anzahl der Tokens im im Cache gespeicherten Teil Ihrer Eingabe wird im Feld cachedContentTokenCount in den Metadaten einer Antwort angegeben.