Almacenamiento en caché de contexto

En un flujo de trabajo de IA típico, podrías pasar los mismos tokens de entrada una y otra vez a un modelo. Con la función de almacenamiento en caché de contexto de la API de Gemini, puedes pasar parte del contenido al modelo una vez, almacenar en caché los tokens de entrada y, luego, hacer referencia a los tokens almacenados en caché para solicitudes posteriores. En ciertos volúmenes, el uso de tokens almacenados en caché implica un costo menor. que pasar el mismo corpus de tokens repetidamente.

Cuando almacenas en caché un conjunto de tokens, puedes elegir por cuánto tiempo quieres que la caché existen antes de que los tokens se borren automáticamente. La duración del almacenamiento en caché llamado tiempo de actividad (TTL). Si no está configurado, el TTL predeterminado es de 1 hora. El el costo del almacenamiento en caché depende del tamaño del token de entrada y del tiempo que quieras que tokens que se conservarán.

El almacenamiento en caché de contexto admite Gemini 1.5 Pro y Gemini 1.5 Flash.

Cuándo usar el almacenamiento en caché de contexto

El almacenamiento en caché de contexto es muy adecuado para situaciones en las que al contexto inicial se hace referencia repetidamente a través de solicitudes más cortas. Considera usar el almacenamiento en caché de contexto para casos de uso como los siguientes:

  • Chatbots con instrucciones del sistema detalladas
  • Análisis repetitivo de archivos de video largos
  • Consultas recurrentes en conjuntos de documentos de gran tamaño
  • Análisis frecuente del repositorio de código o corrección de errores

Cómo el almacenamiento en caché reduce los costos

El almacenamiento en caché de contexto es una función pagada diseñada para reducir los costos operativos generales. La facturación se basa en los siguientes factores:

  1. Recuento de tokens de caché: Es la cantidad de tokens de entrada almacenados en caché, que se facturan en un tasa reducida cuando se incluyen en mensajes posteriores.
  2. Duración del almacenamiento: Es la cantidad de tiempo (TTL) de almacenamiento de los tokens almacenados en caché. se factura según la duración de TTL del recuento de tokens almacenados en caché. No hay un mínimo o límites máximos en el TTL.
  3. Otros factores: Se aplican otros cargos, como por los tokens de entrada no almacenados en caché. y tokens de salida.

Para obtener información actualizada sobre los precios, consulta los precios de la API de Gemini . Para aprender a contar tokens, consulta la sección Tokens de la guía de YouTube.

Cómo usar el almacenamiento en caché de contexto

En esta sección, se da por sentado que instalaste un SDK de Gemini y configuraste una API clave, como se muestra en la guía de inicio rápido.

Genera contenido con una caché

En el siguiente ejemplo, se muestra cómo generar contenido usando un sistema almacenado en caché y el archivo de 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)

Mostrar lista de cachés

No es posible recuperar ni ver el contenido almacenado en caché, pero sí metadatos almacenados en caché (name, model, display_name, usage_metadata, create_time, update_time y expire_time).

Para enumerar los metadatos de todas las cachés subidas, usa CachedContent.list():

for c in caching.CachedContent.list():
  print(c)

Actualizar una caché

Puedes establecer un ttl o un expire_time nuevo para una caché. Cambia algo más acerca de la caché no es compatible.

En el siguiente ejemplo, se muestra cómo actualizar el ttl de una caché con CachedContent.update()

import datetime

cache.update(ttl=datetime.timedelta(hours=2))

Borra una memoria caché

El servicio de almacenamiento en caché proporciona una operación de eliminación para quitar contenido de forma manual de la caché. En el siguiente ejemplo, se muestra cómo borrar una caché con CachedContent.delete()

cache.delete()

Consideraciones adicionales

Ten en cuenta las siguientes consideraciones cuando uses el almacenamiento en caché de contexto:

  • El recuento mínimo de tokens de entrada para el almacenamiento en caché de contexto es 32,768. max es el mismo que el máximo para el modelo dado. (Para obtener más información para contar tokens, consulta la Guía de tokens).
  • El modelo no hace ninguna distinción entre los tokens almacenados en caché y los tokens regulares tokens de entrada. El contenido almacenado en caché es solo un prefijo de la instrucción.
  • No hay límites especiales de frecuencia o uso en el almacenamiento en caché de contexto. el estándar se aplican límites de frecuencia para GenerateContent, y los límites de tokens incluyen el almacenamiento tokens.
  • La cantidad de tokens almacenados en caché se muestra en el usage_metadata desde el crear, obtener y enumerar operaciones del servicio de caché y, además, en GenerateContent cuando se usa la caché.