Mise en cache du contexte

<ph type="x-smartling-placeholder"></ph>

Dans un workflow d'IA classique, vous pouvez transmettre les mêmes jetons d'entrée à l'infini d'un modèle. La fonctionnalité de mise en cache contextuelle de l'API Gemini vous permet de transmettre du contenu au modèle, mettre en cache les jetons d'entrée, puis faire référence aux jetons mis en cache pour les requêtes ultérieures. Pour certains volumes, l'utilisation de jetons mis en cache coûte moins cher. que de transmettre plusieurs fois le même corpus de jetons.

Lorsque vous mettez en cache un ensemble de jetons, vous pouvez choisir la durée pendant laquelle avant la suppression automatique des jetons. Cette durée de mise en cache est appelée valeur TTL (Time To Live). Si cette règle n'est pas configurée, la valeur TTL est définie par défaut sur 1 heure. La le coût de la mise en cache dépend de la taille du jeton d'entrée et de la durée afin de conserver les jetons d'entrée.

La mise en cache contextuelle est compatible avec Gemini 1.5 Pro et Gemini 1.5 Flash.

Quand utiliser la mise en cache de contexte

La mise en cache de contexte est particulièrement adaptée aux scénarios où un contexte initial important est référencé à plusieurs reprises par des requêtes plus courtes. Envisagez d'utiliser la mise en cache de contexte pour les cas d'utilisation suivants :

  • Chatbots avec des instructions système détaillées
  • Analyse répétitive de fichiers vidéo longs
  • Requêtes récurrentes sur des ensembles de documents volumineux
  • Analyse fréquente du dépôt de code ou correction de bugs

Comment la mise en cache réduit les coûts

La mise en cache de contexte est une fonctionnalité payante conçue pour réduire les coûts opérationnels globaux. La facturation dépend des facteurs suivants :

  1. Nombre de jetons mis en cache : nombre de jetons d'entrée mis en cache, facturés à un tarif réduit lorsqu'ils sont inclus dans les requêtes suivantes.
  2. Durée de stockage:durée pendant laquelle les jetons mis en cache sont stockés (TTL), facturés en fonction de la durée TTL du nombre de jetons mis en cache. Il n'y a pas de minimum ou les limites maximales de la valeur TTL.
  3. Autres facteurs : d'autres frais s'appliquent, par exemple pour les jetons d'entrée et de sortie non mis en cache.

Pour obtenir les tarifs les plus récents, consultez les tarifs de l'API Gemini . Pour savoir comment compter les jetons, consultez la section Jeton guide de démarrage.

Utiliser la mise en cache du contexte

Dans cette section, nous partons du principe que vous avez installé un SDK Gemini et configuré une API , comme indiqué dans le guide de démarrage rapide.

Générer du contenu à l'aide d'un cache

L'exemple suivant montre comment générer du contenu à l'aide d'un système mis en cache d'instructions et de fichier vidéo.

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)

Répertorier les caches

Il est impossible de récupérer ou d'afficher le contenu mis en cache, mais vous pouvez récupérer les métadonnées de cache (name, model, display_name, usage_metadata, create_time, update_time et expire_time).

Pour répertorier les métadonnées de tous les caches importés, utilisez CachedContent.list():

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

Mettre à jour un cache

Vous pouvez définir un nouveau ttl ou expire_time pour un cache. Modifier autre chose concernant le cache n'est pas prise en charge.

L'exemple suivant montre comment mettre à jour le ttl d'un cache en utilisant CachedContent.update()

import datetime

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

Supprimer un cache

Le service de mise en cache fournit une opération de suppression permettant de supprimer manuellement du contenu du cache. L'exemple suivant montre comment supprimer un cache en utilisant CachedContent.delete()

cache.delete()

Informations complémentaires

Tenez compte des considérations suivantes lorsque vous utilisez la mise en cache du contexte:

  • Le nombre minimal de jetons d'entrée pour la mise en cache du contexte est de 32 768. La valeur maximum est identique à la valeur maximale pour le modèle donné. Pour en savoir plus sur pour compter les jetons, consultez le guide relatif aux jetons).
  • Le modèle ne fait aucune distinction entre les jetons mis en cache et les jetons des jetons d'entrée. Le contenu mis en cache est simplement un préfixe de l'invite.
  • Aucun taux spécial ou limite d'utilisation n'est appliqué à la mise en cache du contexte. la norme les limites de débit pour GenerateContent s'appliquent, et les limites de jetons incluent les caches de jetons.
  • Le nombre de jetons mis en cache est renvoyé dans usage_metadata à partir de "create", "get" et "list" des opérations du service de cache, ainsi que GenerateContent lors de l'utilisation du cache.