Per la tua funzionalità di AI, potresti passare ripetutamente gli stessi token di input (contenuti) a un modello. Per questi casi d'uso, puoi invece memorizzare nella cache questi contenuti, ovvero passarli al modello una volta, archiviarli e farvi riferimento nelle richieste successive.
La memorizzazione nella cache del contesto può ridurre significativamente la latenza e i costi per le attività ripetitive che coinvolgono una grande quantità di contenuti, come grandi quantità di testo, un file audio o un file video. Alcuni casi d'uso comuni per i contenuti memorizzati nella cache includono documenti dettagliati sui profili utente, codebase o manuali.
I modelli Gemini offrono due diversi meccanismi di memorizzazione nella cache:
Memorizzazione nella cache implicita: attivata automaticamente sulla maggior parte dei modelli, nessun risparmio sui costi garantito
Memorizzazione nella cache esplicita: può essere attivata facoltativamente e manualmente sulla maggior parte dei modelli, di solito con un risparmio sui costi
La memorizzazione nella cache esplicita è utile nei casi in cui vuoi garantire con maggiore probabilità un risparmio sui costi, ma richiede un lavoro aggiuntivo da parte dello sviluppatore.
Sia per la memorizzazione nella cache implicita che per quella esplicita, il campo cachedContentTokenCount nei metadati della risposta indica il numero di token nella parte memorizzata nella cache dell'input. Per la memorizzazione nella cache esplicita, assicurati di esaminare le informazioni sui prezzi in fondo a questa pagina.
Modelli supportati
La memorizzazione nella cache è supportata quando si utilizzano i seguenti modelli:
gemini-4-argon(solo memorizzazione nella cache implicita; la memorizzazione nella cache esplicita non è supportata)gemini-3.8-flash(e i modelli precedentigemini-3.7-flash,gemini-3.6-flashegemini-3.5-flash)gemini-3.5-flash-lite(e il precedentegemini-3.1-flash-lite)
Anche i modelli gemini-3.1-pro-preview e Gemini 2.5 per uso generico (deprecati) supportano questa funzionalità.
I modelli di generazione di contenuti multimediali (ad esempio i modelli Gemini Nano Banana come gemini-nano-banana-2.1) non supportano la memorizzazione nella cache del contesto.
Limiti di dimensione dei contenuti memorizzati nella cache
Ogni modello ha un requisito di conteggio dei token minimo per i contenuti memorizzati nella cache. Il valore massimo è determinato dalla finestra di contesto del modello.
- Gemini 4 Argon: minimo 4096 token (Gemini Developer API) o minimo 6144 token (Agent Platform Gemini API (formerly Vertex AI))
- Modelli Gemini Pro: minimo 4096 token
- Modelli Gemini Flash: minimo 1024 token
Inoltre, la dimensione massima dei contenuti che puoi memorizzare nella cache utilizzando un blob o un testo è di 10 MB.
Memorizzazione nella cache implicita
La memorizzazione nella cache implicita è abilitata per impostazione predefinita e disponibile per la maggior parte dei modelli Gemini.
Google trasferisce automaticamente i risparmi sui costi se la tua richiesta raggiunge i contenuti memorizzati nella cache. Ecco alcuni modi per aumentare la probabilità che la tua richiesta utilizzi la memorizzazione nella cache implicita:
- Prova a inserire contenuti di grandi dimensioni e comuni all'inizio del prompt.
- Prova a inviare richieste con un prefisso simile in un breve periodo di tempo.
Il numero di token nella parte memorizzata nella cache dell'input è fornito nel campo cachedContentTokenCount nei metadati di una risposta.
Memorizzazione nella cache esplicita
La memorizzazione nella cache esplicita non è abilitata per impostazione predefinita ed è una funzionalità facoltativa dei modelli Gemini.
Tieni presente che il modello gemini-4-argon non supporta la memorizzazione nella cache esplicita.
Ecco come configurare e utilizzare le cache dei contenuti espliciti:
Gestire le cache esplicite, tra cui:
Tieni presente che le cache dei contenuti espliciti interagiscono con la memorizzazione nella cache implicita, il che potrebbe comportare una memorizzazione nella cache aggiuntiva oltre ai contenuti memorizzati nella cache espliciti. Puoi impedire la conservazione dei dati della cache disabilitando la memorizzazione nella cache implicita e non creando cache esplicite. Per saperne di più, consulta Abilita e disabilita la memorizzazione nella cache.
Crea e utilizza una cache esplicita
Per creare e utilizzare una cache dei contenuti esplicita, è necessario quanto segue:
Fai riferimento alla cache in un template di prompt del server.
Fai riferimento al template di prompt del server in una richiesta di prompt dalla tua app.
Informazioni importanti sulla creazione e sull'utilizzo di una cache esplicita
La cache deve essere allineata alle richieste di prompt della tua app e al template di prompt del server:
La cache è specifica per un provider Gemini API. La richiesta di prompt della tua app deve utilizzare lo stesso provider.
Per Firebase AI Logic, consigliamo vivamente di utilizzare cache dei contenuti esplicite solo con Agent Platform Gemini API (formerly Vertex AI). Tutte le informazioni e gli esempi riportati in questa pagina sono specifici per il provider Gemini API.La cache è specifica per un modello Gemini. La richiesta di prompt dell'app deve utilizzare lo stesso modello.
La cache è specifica per una località quando utilizzi Agent Platform Gemini API (formerly Vertex AI).
La località della cache esplicita deve corrispondere alla località del template di prompt del server e alla località in cui accedi al modello nella richiesta di prompt della tua app.
Inoltre, tieni presente le seguenti limitazioni e i seguenti requisiti per la memorizzazione nella cache esplicita:
Una volta creata una cache esplicita, non puoi modificarla, ad eccezione del TTL o della scadenza.
Puoi memorizzare nella cache qualsiasi tipo MIME di file di input supportato o anche solo il testo fornito nella richiesta di creazione della cache.
Se vuoi includere un file nella cache, devi fornirlo come URI Cloud Storage. Non può essere un URL del browser o di YouTube.
Inoltre, le limitazioni di accesso al file vengono controllate al momento della creazione della cache e non vengono controllate di nuovo al momento della richiesta dell'utente. Per questo motivo, assicurati che tutti i dati inclusi nella cache esplicita siano adatti a qualsiasi utente che effettua una richiesta che include la cache.
Se vuoi utilizzare istruzioni di sistema o strumenti (come l'esecuzione di codice, il contesto dell'URL, il grounding con
Google Search o il grounding conGoogle Maps ), la cache stessa deve contenere le relative configurazioni. Non possono essere configurati nel template di prompt del server o nella richiesta di prompt dell'app. Tieni presente che i template di prompt del server non supportano ancora la chiamata di funzione (o la chat). Per informazioni dettagliate su come configurare le istruzioni di sistema e gli strumenti nella cache, consulta l'API REST di Agent Platform Gemini API (formerly Vertex AI).
Passaggio 1: crea la cache
Crea la cache utilizzando direttamente l'API REST di Agent Platform Gemini API (formerly Vertex AI).
Di seguito è riportato un esempio che crea una cache esplicita di un file PDF come contenuto.
Sintassi:
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
Esempio di richiesta:
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
Esempio di risposta:
La risposta include una risorsa name con nome completo, che è univoca a livello globale per la cache (tieni presente che l'ultimo segmento è l'ID cache). Utilizzerai l'intero valore name nel passaggio successivo del workflow.
{
"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"
}
Passaggio 2: fai riferimento alla cache in un template di prompt del server
Firebase AI LogicDopo aver creato la cache, fai riferimento a name all'interno della proprietà cachedContent di un template di prompt del server.
Assicurati di seguire questi requisiti quando crei il tuo template di prompt del server:
Utilizza la risorsa
namecon nome completo dalla risposta quando hai creato la cache. Questo non è il nome visualizzato facoltativo specificato nella richiesta.La località del template di prompt del server deve corrispondere a quella della cache.
Per utilizzare le istruzioni o gli strumenti di sistema, questi devono essere configurati come parte della cache e non come parte del template di prompt del server.
Sintassi:
{{cachedContent name="YOUR_CACHE_RESOURCE_NAME"}}
{{role "user"}}
{{userPrompt}}
Esempio:
{{cachedContent name="projects/861083271981/locations/global/cachedContents/4545031458888089601"}}
{{role "user"}}
{{userPrompt}}
In alternativa, il valore del parametro name nel template di prompt del server può essere una variabile di input dinamica.
Ad esempio,
{{cachedContent name=someVariable}}name della cache come input per la richiesta dalla tua app.
Passaggio 3: fai riferimento al template di prompt del server nella richiesta della tua app
Quando scrivi la richiesta, presta molta attenzione a quanto segue:
Utilizza Agent Platform Gemini API (formerly Vertex AI), poiché la cache è stata creata con questo provider Gemini API.
La località da cui accedi al modello nella richiesta di prompt della tua app deve corrispondere alla località del template di prompt del server e della cache.
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);
Unity
// ...
// 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}");
}
Gestisci le cache esplicite
Questa sezione descrive la gestione delle cache di contenuti espliciti, tra cui come elencare tutte le cache, recuperare i metadati relativi a una cache, aggiornare il TTL o la data di scadenza di una cache ed eliminare una cache.
Puoi gestire le cache esplicite utilizzando l'API REST di Agent Platform Gemini API (formerly Vertex AI).
Una volta creata una cache dei contenuti esplicita, non puoi modificarne nulla, ad eccezione del TTL o della data di scadenza.
Elenca tutte le cache
Puoi elencare tutte le cache esplicite disponibili per il tuo progetto. Questo comando restituirà solo le cache nella località specificata.
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
Recupera i metadati relativi a una cache
Non è possibile recuperare o visualizzare i contenuti effettivi memorizzati nella cache. Tuttavia, puoi recuperare i metadati relativi a una cache esplicita, tra cui name, model, display_name, usage_metadata, create_time, update_time e expire_time.
Devi fornire CACHE_ID, che è il segmento finale della risorsa name della cache con nome completo.
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}
Aggiorna il TTL o la data di scadenza di una cache
Quando crei una cache esplicita, puoi facoltativamente impostare ttl o
expire_time.
ttl: il TTL (durata) della cache, in particolare il numero di secondi e nanosecondi di durata della cache dopo la sua creazione o dopo l'aggiornamento dittlprima della scadenza. Quando impostittl,expireTimedella cache viene aggiornato automaticamente.expire_time: unTimestamp(come2024-06-30T09:00:00.000000Z) che specifica la data e l'ora assolute di scadenza della cache.
Se non imposti nessuno di questi valori, il TTL predefinito è 1 ora. Non esistono limiti minimi o massimi per il TTL.
Per le cache esplicite esistenti, puoi aggiungere o aggiornare ttl o expire_time.
Devi fornire CACHE_ID, che è il segmento finale della risorsa name della cache con nome completo.
Aggiorna ttl
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'"
}'
Aggiorna expire_time
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'"
}'
Elimina una cache
Quando una cache esplicita non è più necessaria, puoi eliminarla.
Devi fornire CACHE_ID, che è il segmento finale della risorsa name della cache con nome completo.
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}
Prezzi per la memorizzazione nella cache esplicita
La memorizzazione nella cache esplicita è una funzionalità a pagamento progettata per ridurre i costi. I prezzi si basano sui seguenti fattori:
Token di input per la creazione della cache: sia per la memorizzazione nella cache implicita che per quella esplicita, ti vengono addebitati i token di input utilizzati per creare la cache al prezzo standard dei token di input.
Archiviazione della cache: per la memorizzazione nella cache esplicita, sono previsti anche costi di archiviazione in base alla durata della memorizzazione nella cache. Non sono previsti costi di archiviazione per la memorizzazione nella cache implicita. Per saperne di più, consulta i prezzi per Agent Platform Gemini API (formerly Vertex AI).
Utilizzo dei contenuti memorizzati nella cache: la memorizzazione nella cache esplicita garantisce uno sconto quando viene fatto riferimento alle cache esplicite, il che significa che ricevi uno sconto sui token di input quando fanno riferimento a una cache esistente. Per i modelli Gemini 2.5 e successivi, questo sconto è del 90%.
Il numero di token nella parte memorizzata nella cache dell'input è fornito nel campo cachedContentTokenCount nei metadati di una risposta.