Leçon 3 — Réduire les coûts sans perdre en qualité

Mise en cache du contexte

5 min de lecture

Mise en cache du contexte

Le principe

À chaque question, le banc renvoie le même préfixe : consigne système + FAQ, soit environ 1 014 tokens, suivis de quelques tokens de question. La mise en cache du contexte (context caching) évite de refacturer plein tarif ce préfixe identique : les tokens servis depuis le cache sont facturés à prix réduit, et le TTFT peut baisser car le modèle n'a pas à relire tout le préfixe.

flowchart LR
  subgraph R1["Requête 1"]
    P1["Préfixe : système + FAQ (1 014 tokens)"] --- Q1["Question A"]
  end
  subgraph R2["Requête 2"]
    P2["Même préfixe"] --- Q2["Question B"]
  end
  P1 -->|"écrit en cache"| C[("Cache")]
  C -->|"tokens en cache : prix réduit"| P2
Cache impliciteCache explicite
Activationautomatique sur les modèles compatiblesclient.caches.create(...)
Garantie de réutilisationaucune (au mieux)oui, tant que le cache vit (TTL)
Prix des tokens en cacheréduitréduit
Stockagegratuitfacturé à l'heure, par million de tokens
Taille minimaleoui (dépend du modèle)oui (1 024 tokens pour flash-lite, mesuré ci-dessous)
Signalusage_metadata.cached_content_token_countidem

Créer un cache explicite

files/extras.py (extrait)
c = client.caches.create(model=R.SMALL_MODEL, config=types.CreateCachedContentConfig(
    system_instruction=long_context, ttl="300s", display_name="lab-perf-faq"))
try:
    r = client.models.generate_content(
        model=R.SMALL_MODEL, contents="Combien coûte la livraison express ?",
        config=types.GenerateContentConfig(cached_content=c.name))
    print(r.usage_metadata.prompt_token_count, r.usage_metadata.cached_content_token_count)
finally:
    client.caches.delete(name=c.name)   # le stockage est facturé à l'heure

Quand est-ce rentable ?

Avec les prix flash-lite relevés le 2026-10-15 (entrée 0,30 ,entreˊeencache0,03, entrée en cache 0,03 , stockage 1,00 parmilliondetokensetparheure),pouruncontextedepar million de tokens et par heure), pour un contexte deTtokensettokens etN$ requêtes par heure :

eˊconomie par heure=N⋅T⋅(0,30−0,03)/106;stockage=T⋅1,00/106\text{économie par heure} = N \cdot T \cdot (0{,}30 - 0{,}03) / 10^6 \quad ; \quad \text{stockage} = T \cdot 1{,}00 / 10^6

Le cache explicite est rentable dès que N⋅0,27>1,00N \cdot 0{,}27 > 1{,}00, soit à partir de 4 requêtes par heure environ sur ce contexte, quelle que soit sa taille. En dessous, l'implicite (gratuit) suffit.

Un assistant interne reçoit 2 questions par heure la nuit et 600 par heure le jour, sur un contexte de 50 000 tokens. Quelle stratégie de cache explicite ?

Le banc n'a observé aucun token en cache implicite (dont en cache = 0) sur plus de 60 requêtes au même préfixe. Quelle est l'explication la plus probable ?

Exercice

Votre base de connaissances fait 1 014 tokens, juste sous le minimum. Proposez deux façons utiles (pas du remplissage) de rendre le préfixe cachable, et dites si cela vaut la peine.

Voir la solution
  1. Déplacer dans le préfixe des éléments stables qui étaient ailleurs : exemples de réponses (few-shot) qui améliorent la qualité, schéma JSON détaillé, règles de ton.
  2. Fusionner la FAQ avec d'autres documents réellement utiles au support (conditions générales, fiches produits) : plus de questions trouvent leur réponse.

Est-ce rentable ? Avec 1 024 tokens à 0,30 /M,l′eˊconomiemaximaleestd′environ0,28millieˋmededollarparreque^te.Sur50000reque^tesparmois,environ14/M, l'économie maximale est d'environ 0,28 millième de dollar par requête. Sur 50 000 requêtes par mois, environ 14 . Le levier devient vraiment intéressant sur des contextes de dizaines de milliers de tokens (documents longs, historique d'agent) : c'est là qu'il faut le chercher.

Résultat obtenu

Exécutions réelles du 2026-10-15 (python extras.py cache) :

# 1er essai, contexte = consigne + FAQ
Création du cache refusée : 400 INVALID_ARGUMENT. {'error': {'code': 400, 'message': 'Cached content
is too small. total_token_count=1014, min_total_token_count=1024', 'status': 'INVALID_ARGUMENT'}}

# 2e essai, contexte répété deux fois pour la démonstration
cache=2pyg6h... prompt=2035 dont en cache=2027
-> La livraison express coûte 9,90 € pour toute commande passée avant 13 h, du lundi au vendredi.
cache supprimé

Et sur le banc complet : tokens entrée=16503 dont en cache=0 pour chaque stratégie. 2 027 tokens sur 2 035 servis depuis le cache, c'est 99,6 % du prompt facturé au tarif réduit ; sous 1 024 tokens, rien.

Je sais faire

  • Distinguer cache implicite et explicite, et lire cached_content_token_count
  • Ordonner un prompt pour maximiser le préfixe stable
  • Calculer le seuil de rentabilité d'un cache explicite
  • Créer, utiliser et supprimer un cache explicite
Suivant