Skip to Content
DocsFonctionnalités avancéesCache explicite Gemini

Cache explicite Gemini (cachedContents)

Gemini propose deux types de cache :

  • Cache implicite (automatique) — le modèle détecte et réutilise automatiquement les préfixes de prompt répétés, sans aucune configuration. C’est le comportement par défaut décrit dans Cache de prompts ; les hits sont « best-effort », et la moindre modification du préfixe peut provoquer un miss.
  • Cache explicite (cette page) — vous créez activement un large contexte sous forme d’objet de cache, récupérez un handle cachedContents/{id}, puis le référencez dans les requêtes generateContent suivantes. Les hits sont déterministes : tant que le cache n’a pas expiré, une référence touche toujours.

Utilisez le cache explicite lorsque vous avez un large contexte stable, réutilisé de façon répétée (longs documents, bases de code, bases de connaissances, instructions system fixes) et que vous voulez un taux de hit contrôlable et une facturation prévisible.

OfoxAI prend en charge les opérations natives cachedContents de Gemini — création / référence / consultation / suppression, compatibles avec le Google GenAI SDK. Pour la référence au niveau des endpoints, voir l’API cachedContents.

Quand utiliser le cache explicite

ScénarioRecommandation
Q&R répétées sur un large contexte fixe (QA de documents, assistant de code)✅ Cache explicite
Vous avez besoin de hits garantis et ne tolérez pas de miss occasionnels✅ Cache explicite
Requêtes courtes, peu fréquentes, à préfixes variables❌ Le cache implicite suffit ; aucun objet de cache à gérer
Le contexte change à chaque fois❌ Le cache n’a aucun intérêt

Le cache explicite exige que le contenu mis en cache atteigne un seuil minimal de tokens (environ 2 048 à 4 096 tokens, selon le modèle). Un contenu trop petit échouera à la création ou n’apportera aucun gain.

Endpoints

OfoxAI fournit les endpoints cachedContents complets sous le protocole natif Gemini :

POST https://api.ofox.ai/gemini/v1beta/cachedContents # Créer GET https://api.ofox.ai/gemini/v1beta/cachedContents/{id} # Consulter DELETE https://api.ofox.ai/gemini/v1beta/cachedContents/{id} # Supprimer

Pour référencer un cache lors de la génération, utilisez l’endpoint generateContent standard et ajoutez cachedContent au corps de la requête :

POST https://api.ofox.ai/gemini/v1beta/models/{model}:generateContent

Authentification

Comme pour les autres endpoints Gemini, utilisez le header x-goog-api-key :

x-goog-api-key: <votre OFOXAI_API_KEY>

Workflow complet

Ce qui suit illustre un flux complet : créer le cache → référencer le cache pour générer → supprimer le cache.

1. Créer un cache

Placez le large contexte à réutiliser dans contents, et spécifiez model et ttl (durée de vie) :

create_cache.py
from google import genai from google.genai import types client = genai.Client( api_key="<votre OFOXAI_API_KEY>", http_options={"api_version": "v1beta", "base_url": "https://api.ofox.ai/gemini"}, ) # Un document volumineux réutilisé de façon répétée (doit atteindre le seuil minimal de tokens) LONG_DOCUMENT = open("knowledge_base.txt").read() cache = client.caches.create( model="google/gemini-3.1-pro-preview", config=types.CreateCachedContentConfig( contents=[LONG_DOCUMENT], ttl="600s", # le cache vit 10 minutes ), ) print(cache.name) # cachedContents/xxxxxxxx —— le handle pour les références ultérieures

Le name retourné (de la forme cachedContents/xxxxxxxx) est le handle du cache. Conservez-le pour les références et la gestion ultérieures.

2. Référencer le cache pour générer

Référencez le handle du cache via cachedContent dans une requête generateContent ; contents ne contient que la nouvelle question de ce tour :

use_cache.py
response = client.models.generate_content( model="google/gemini-3.1-pro-preview", contents="D'après le document ci-dessus, résume trois points clés", config=types.GenerateContentConfig( cached_content=cache.name, # référencer le cache ), ) print(response.text) # Cache hit : la partie mise en cache est facturée au tarif « lecture » plus bas print(response.usage_metadata.cached_content_token_count)

En cas de hit, la réponse usageMetadata.cachedContentTokenCount indique le nombre de tokens issus du cache. Le même cache peut être référencé un nombre illimité de fois, chaque fois avec un hit déterministe, jusqu’à son expiration.

3. Consulter et supprimer

Consultez les métadonnées du cache, ou supprimez-le de façon proactive lorsqu’il n’est plus nécessaire (sans attendre l’expiration du TTL) :

manage_cache.py
# Consulter info = client.caches.get(name=cache.name) print(info.expire_time) # Supprimer client.caches.delete(name=cache.name)

La consultation / suppression ne nécessite pas de repasser model. OfoxAI localise ce cache à partir du seul handle.

Cycle de vie et TTL

À la création, spécifiez la durée de vie via ttl, sous forme de chaîne de secondes terminée par s (par ex. "600s").

ParamètreValeur
TTL minimum / par défaut600s (10 minutes)
TTL maximum3600s (1 heure)
  • Pendant le TTL, le cache peut être référencé de façon répétée avec des hits déterministes.
  • Après expiration du TTL, le cache est invalidé automatiquement, et le référencer renverra une erreur (le cache n’existe plus).
  • Vous pouvez delete à tout moment pour le libérer plus tôt.

Référencer un cache expiré ou supprimé fait échouer la requête. Gérez le cas « cache invalidé » côté client (capturez l’erreur puis recréez le cache, ou repliez-vous sur une requête normale).

Facturation

Le cache explicite est facturé de façon transparente par token, en trois parties :

ÉtapeFormuleDescription
Création du cachetotalTokenCount × tarif cache_writeFacturé au tarif « écriture cache » ; totalTokenCount provient du usageMetadata de la réponse de création — c’est-à-dire le nombre de tokens mis en cache
Hit sur référencecachedContentTokenCount × tarif cache_readLa partie mise en cache est facturée au tarif « lecture cache », soit environ 0,10x du prix d’entrée standard, bien moins cher que tout renvoyer
Nouveau contenu par référenceLe nouveau prompt / la sortie de chaque tour est facturé au tarif standardC’est-à-dire chaque nouvelle question que vous posez et la nouvelle réponse du modèle

Le modèle économique : payez une seule fois des frais d’« écriture » à la création, puis chaque référence facture le contenu mis en cache au tarif « lecture » plus bas, économisant le coût de « renvoyer tout le contexte au prix fort ». Plus il y a de références, plus c’est rentable. Les tarifs unitaires cache_write / cache_read de chaque modèle font foi dans le catalogue de modèles  et les statistiques d’utilisation de votre console.

Amélioration OfoxAI : routage déterministe

OfoxAI répartit la charge entre plusieurs régions GCP / projets Vertex. Les caches explicites sont region-scoped (liés à une région) : un cache créé dans un projet GCP doit être référencé dans ce même projet, sinon vous obtenez un 404.

OfoxAI gère cela automatiquement : à la création, il enregistre l’instance amont à laquelle le cache est lié, puis retrouve cette instance via le handle du cache et verrouille les références sur le même amont (hard-lock). Que votre requête de référence porte ou non un identifiant user, quelle que soit la façon dont la charge est répartie, les références sont routées précisément vers le projet qui a créé le cache, sans aucune dérive. Vous n’avez pas à vous soucier de la répartition régionale sous-jacente.

La propriété du cache est protégée : un handle de cache ne peut être référencé / consulté / supprimé que par l’API Key (et le même propriétaire) qui l’a créé ; tout accès inter-comptes est rejeté (403).

Cache explicite vs cache implicite

DimensionCache implicite (automatique)Cache explicite (cachedContents)
DéclenchementDétection automatique des préfixes répétésCréation active d’un objet de cache puis référence
Déterminisme du hitBest-effort, un léger changement de préfixe peut provoquer un missDéterministe, touche toujours tant que non expiré
Gestion requiseAucuneCréer / référencer / supprimer un handle
Idéal pourContenu court, préfixes occasionnellement répétésLarge contexte stable, réutilisé de façon répétée
FacturationRemise au tarif lecture en cas de hitFrais d’écriture à la création + remise au tarif lecture sur référence

Les deux sont cumulables. Pour les requêtes du quotidien, laissez le cache implicite s’activer automatiquement ; pour un large contexte que vous réutilisez à coup sûr de façon répétée, ajoutez le cache explicite pour verrouiller les hits. Pour les détails du cache implicite, voir Cache de prompts.

Documentation associée

Last updated on