Memorizzazione nella cache di contesto

In un tipico flusso di lavoro IA, potresti passare più volte gli stessi token di input un modello. Con la funzionalità di memorizzazione nella cache del contesto dell'API Gemini, puoi trasmettere alcuni contenuti al modello una volta, memorizza nella cache i token di input, quindi fai riferimento ai token memorizzati nella cache per le richieste successive. In determinati volumi, l'utilizzo di token memorizzati nella cache ha un costo inferiore rispetto al passaggio ripetuto nello stesso corpus di token.

Quando memorizzi nella cache un insieme di token, puoi scegliere per quanto tempo esistono prima dell'eliminazione automatica dei token. La durata della memorizzazione nella cache è chiamata time to live (TTL). Se non viene configurato, il TTL predefinito è 1 ora. La il costo della memorizzazione nella cache dipende dalle dimensioni del token di input e da quanto vengano mantenuti.

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 situazioni in cui una al contesto iniziale viene fatto riferimento ripetutamente da richieste più brevi. Valuta l'uso memorizzazione nella cache di contesto per casi d'uso quali:

  • 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:

  1. Conteggio token cache: il numero di token di input memorizzati nella cache, fatturati a un anche se inclusi in prompt successivi.
  2. Durata dell'archiviazione: la quantità di tempo per cui i token memorizzati nella cache vengono archiviati (TTL), e vengono fatturati in base alla durata TTL del conteggio dei token memorizzati nella cache. Non c'è un minimo o limiti massimi sul TTL.
  3. Altri fattori: si applicano altri costi, ad esempio per i token di input non memorizzati nella cache e token di output.

Per i dettagli aggiornati sui prezzi, consulta i prezzi dell'API Gemini . Per scoprire come contare i token, consulta la sezione .

Come utilizzare la memorizzazione nella cache di contesto

Questa sezione presuppone che tu abbia installato un SDK Gemini e configurato un'API come mostrato nella guida rapida.

Generare contenuti utilizzando una cache

L'esempio seguente mostra come generare contenuti utilizzando un sistema memorizzato nella cache istruzioni e un file video.

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 cache

Non è possibile recuperare o visualizzare i contenuti memorizzati nella cache, ma è possibile recuperarli metadati della cache (name, model, display_name, usage_metadata, create_time, update_time e expire_time).

Per elencare i metadati per 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. Cambiare altro sulla cache non è supportata.

L'esempio seguente mostra come aggiornare 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 di contesto è pari a 32.768, mentre massimo è uguale al valore massimo del modello specificato. (Per ulteriori informazioni conteggio dei token, consulta la Guida ai token).
  • Il modello non fa alcuna distinzione tra token memorizzati nella cache e regolari di input. I contenuti memorizzati nella cache sono semplicemente un prefisso del prompt.
  • Non sono previsti limiti di frequenza o utilizzo speciali per la memorizzazione nella cache di contesto; lo standard si applicano limiti di frequenza per GenerateContent e i limiti di token includono contenuti memorizzati nella cache di token.
  • Il numero di token memorizzati nella cache viene restituito nell'usage_metadata dal le operazioni create, get ed list del servizio di cache, nonché GenerateContent quando viene utilizzata la cache.