In un tipico flusso di lavoro IA, potresti passare sempre gli stessi token di input a un modello. Utilizzando la funzionalità di memorizzazione nella cache del contesto dell'API Gemini, puoi passare alcuni contenuti al modello una volta, memorizzare nella cache i token di input e poi fare riferimento ai token memorizzati nella cache per le richieste successive. A determinati volumi, l'utilizzo di token memorizzati nella cache ha un costo inferiore rispetto al passaggio ripetuto dello stesso corpus di token.
Quando memorizzi nella cache un insieme di token, puoi scegliere la durata della cache prima che i token vengano eliminati automaticamente. Questa durata della memorizzazione nella cache è denominata time to live (TTL). Se non viene impostato, il valore predefinito del TTL è 1 ora. Il costo della memorizzazione nella cache dipende dalle dimensioni del token di input e dal tempo di permanenza dei token.
La memorizzazione nella cache del contesto supporta sia Gemini 1.5 Pro che Gemini 1.5 Flash.
Quando utilizzare la memorizzazione nella cache di contesto
La memorizzazione nella cache del contesto è particolarmente adatta a scenari in cui un contesto iniziale sostanziale viene fatto riferimento ripetutamente da richieste più brevi. Valuta la possibilità di utilizzare la memorizzazione nella cache del contesto per casi d'uso come:
- Chatbot con istruzioni di sistema esaustive
- Analisi ripetitiva di file video di lunga durata
- Query ricorrenti su set di documenti di grandi dimensioni
- Analisi frequenti del repository di codice o correzione di bug
In che modo la memorizzazione nella cache riduce i costi
La memorizzazione nella cache del contesto è una funzionalità a pagamento progettata per ridurre i costi operativi complessivi. La fatturazione si basa sui seguenti fattori:
- Conteggio token cache: il numero di token di input memorizzati nella cache, fatturati a una tariffa ridotta quando inclusi nei prompt successivi.
- Durata dell'archiviazione: la quantità di tempo di archiviazione (TTL) dei token memorizzati nella cache, fatturata in base alla durata TTL del conteggio dei token memorizzati nella cache. Non sono previsti limiti minimi o massimi per il TTL.
- Altri fattori: vengono applicati altri addebiti, ad esempio per i token di input e di output non memorizzati nella cache.
Per i dettagli aggiornati sui prezzi, consulta la pagina dei prezzi dell'API Gemini. Per informazioni su come contare i token, consulta la Guida ai token.
Come utilizzare la memorizzazione nella cache di contesto
Questa sezione presuppone che tu abbia installato un SDK Gemini (o curl) e che tu abbia configurato una chiave API, come mostrato nella guida rapida.
Generare contenuti utilizzando una cache
L'esempio seguente mostra come generare contenuti utilizzando un file video e un'istruzione di sistema memorizzati nella cache.
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)
Elenca le cache
Non è possibile recuperare o visualizzare i contenuti memorizzati nella cache, ma puoi recuperare i metadati della cache (name
, model
, display_name
, usage_metadata
,
create_time
, update_time
e expire_time
).
Per elencare i metadati di tutte le cache caricate, utilizza CachedContent.list()
:
for c in caching.CachedContent.list():
print(c)
Aggiornare una cache
Puoi impostare un nuovo ttl
o expire_time
per una cache. La modifica di qualsiasi altro elemento della cache non è supportata.
L'esempio seguente mostra come aggiornare il ttl
di una cache utilizzando
CachedContent.update()
.
import datetime
cache.update(ttl=datetime.timedelta(hours=2))
Eliminare una cache
Il servizio di memorizzazione nella cache fornisce un'operazione di eliminazione per rimuovere manualmente i contenuti dalla cache. L'esempio seguente mostra come eliminare una cache utilizzando
CachedContent.delete()
.
cache.delete()
Considerazioni aggiuntive
Quando utilizzi la memorizzazione nella cache di contesto, tieni presente le seguenti considerazioni:
- Il numero minimo di token di input per la memorizzazione nella cache del contesto è pari a 32.768 e il massimo è uguale al numero massimo per il modello specificato. Per ulteriori informazioni sul conteggio dei token, consulta la guida ai token.
- Il modello non fa distinzione tra token memorizzati nella cache e token di input regolari. I contenuti memorizzati nella cache sono semplicemente un prefisso del prompt.
- Non sono previsti limiti di frequenza o di utilizzo speciali per la memorizzazione nella cache del contesto. Si applicano i limiti di frequenza standard per
GenerateContent
e i limiti di token includono i token memorizzati nella cache. - Il numero di token memorizzati nella cache viene restituito in
usage_metadata
dalle operazioni di creazione, recupero e elenco del servizio cache e anche inGenerateContent
quando si utilizza la cache.