Prompt caching expliqué : Claude, OpenAI et Gemini comparés

Le prompt caching peut réduire le coût des entrées répétées à une fraction du prix, mais Claude, OpenAI et Gemini le gèrent chacun différemment. Comparez points d’arrêt, durées de vie, frais d’écriture et tailles minimales, avec un exemple chiffré et les erreurs qui empêchent les succès de cache.

Prompt caching expliqué : Claude, OpenAI et Gemini comparés
Cristian Da Conceicao
Fondateur de Picasso IA

Chaque requête envoyée à un grand modèle de langage (LLM) commence par le même rituel coûteux. Le prompt système, les définitions d’outils, la documentation collée et les exemples few-shot sont tous relus, token par token, au plein tarif, alors que rien n’a changé depuis l’appel précédent. Le prompt caching met fin à ce gaspillage. Le fournisseur stocke la forme traitée de votre préfixe répété et facture une fraction du prix d’entrée normal lorsque la requête suivante le réutilise. Pensez à la mise en place d’un restaurant : le cuisinier hache les échalotes une fois avant le service, et chaque commande est ensuite assemblée à partir de contenants déjà prêts.

Claude, OpenAI et Gemini proposent tous cette idée, mais ils divergent sur presque tout le reste : qui décide de ce qui est mis en cache, combien de temps cela reste disponible, ce que coûte l’écriture et la taille qu’un prompt doit atteindre pour être éligible. Cet article met les trois en parallèle à partir des chiffres de leur documentation actuelle, afin de vous aider à choisir une configuration et à éviter les erreurs qui désactivent discrètement le cache.

Ce que fait réellement le prompt caching

Lorsqu’un modèle lit votre prompt, il effectue un travail réel pour chaque token avant de pouvoir écrire le premier mot de la réponse. Ce travail est identique à chaque fois que le début du prompt est identique. Le prompt caching permet au fournisseur de conserver le résultat de ce travail pendant une courte fenêtre et de le réutiliser : la partie répétée n’est traitée qu’une fois, puis facturée à prix réduit.

Main d’une bibliothécaire tirant un tiroir d’un meuble à fiches en chêne, comme on tire un préfixe mis en cache au lieu de le reconstruire

Imaginez un meuble à fiches. Le fournisseur range le préfixe traité sous une empreinte de son contenu exact. La requête suivante qui produit la même empreinte tire le tiroir au lieu de reconstruire son contenu depuis zéro.

La règle du préfixe

Le cache fonctionne depuis le premier token. La partie mise en cache doit correspondre exactement, et sans interruption, au début de votre requête, et la première différence met fin à la correspondance. Tout ce qui suit ce point est traité et facturé au tarif habituel.

Une longue étagère de volumes verts identiques, dont un livre est sorti de la rangée

Cette seule règle guide tous les conseils des fournisseurs. Placez en haut le contenu qui ne change jamais, et repoussez tout ce qui change (la question de l’utilisateur, la date du jour, les extraits récupérés) en bas. Une bonne section haute contient généralement :

  • Les définitions d’outils identiques d’un appel à l’autre
  • Les instructions système et les règles de style
  • Le matériel de référence, comme un manuel, un contrat ou une synthèse de base de code
  • Les exemples few-shot que vous réutilisez à chaque requête

💡 Vérification rapide : si vous imprimiez deux requêtes et surligniez ce qu’elles ont en commun, la partie surlignée doit former un bloc continu qui commence au tout premier caractère. Un paragraphe commun au milieu ne compte pas.

D’où viennent les économies

Trois éléments s’améliorent lorsque le préfixe est réutilisé :

  • Coût : les tokens mis en cache sont facturés à une petite fraction du tarif d’entrée normal, seule la nouvelle fin étant facturée au plein tarif.
  • Latence : un long prompt allonge l’attente avant le premier token de sortie. Éviter de le retraiter raccourcit cette attente, et le gain augmente avec la longueur du préfixe.
  • Limites de débit : Anthropic indique que les lectures du cache ne sont pas déduites de votre limite de débit, si bien que le trafic mis en cache laisse de la place pour davantage de requêtes.

Les boucles d’agents, les questions-réponses sur des documents, les longs historiques de discussion et les classifieurs dotés d’une grille d’évaluation volumineuse en tirent le plus grand bénéfice. Un prompt qui change à chaque fois n’en retire rien.

Claude : un contrôle explicite

Claude vous offre le contrôle le plus direct des trois. Vous décidez où se termine le préfixe pouvant être mis en cache, et vous décidez combien de temps il doit rester disponible.

Points d’arrêt et mode automatique

Vous marquez un bloc de contenu avec cache_control de type ephemeral, et tout ce qui va du début de la requête jusqu’à ce bloc inclus devient le préfixe mis en cache. L’ordre est fixe : d’abord les outils, puis le système, puis les messages. Vous pouvez placer jusqu’à quatre points d’arrêt, et l’API renvoie une erreur 400 si vous en placez un cinquième au niveau des blocs.

Il existe aussi un mode automatique. Ajoutez un seul champ cache_control au niveau racine de la requête, et le système applique le point d’arrêt au dernier bloc pouvant être mis en cache, puis le déplace à mesure que la conversation s’allonge.

{
  "model": "claude-opus-5-5",
  "cache_control": { "type": "ephemeral" },
  "system": "Long, stable instructions go here...",
  "messages": [
    { "role": "user", "content": "Today's question" }
  ]
}

Un registre en cuir avec quatre signets en ruban marquant différentes pages

Un détail piège les longues sessions d’agents. Lorsque le système cherche une entrée correspondante antérieure, il ne vérifie que 20 positions au maximum en arrière à partir de chaque point d’arrêt. Si un tour ajoute de nombreux blocs, l’entrée précédente peut se trouver hors de cette fenêtre. La solution consiste alors à placer un second point d’arrêt plus tôt dans le prompt.

Tarifs et durées de vie

La durée de vie par défaut est de 5 minutes, et chaque succès réinitialise le minuteur sans frais. Si votre trafic arrive par rafales espacées, vous pouvez opter pour une heure avec "ttl": "1h", moyennant un tarif d’écriture plus élevé.

ÉlémentCoefficientExemple Opus 5.5 (par million de tokens)
Entrée de base1x$4,00
Écriture en cache de 5 minutes1,25x$5,00
Écriture en cache d’une heure2x$8,00
Lecture du cache0,05x sur ce modèle$0,20

La plupart des modèles Claude lisent depuis le cache à 0,1x du prix d’entrée de base. Les niveaux Opus 5.5 et Sonnet 5.5 lisent à 0,05x, et certains niveaux plus récents descendent encore plus bas.

Tailles minimales par modèle

Le seuil dépend du modèle, et il a beaucoup changé d’une génération à l’autre :

💡 Échec silencieux : un prompt plus court que le minimum est traité sans mise en cache, et aucune erreur n’est renvoyée. Le seul signe est un champ de cache qui reste à zéro.

OpenAI : les points d’arrêt arrivent

L’histoire d’OpenAI se déroule en deux temps. Pendant longtemps, la mise en cache a été entièrement automatique. Avec GPT-5.6, elle a gagné des points d’arrêt et des frais d’écriture, ce qui la rapproche nettement de Claude.

Anciens modèles : entièrement automatique

Sur GPT-5.5 et GPT-5.5 Pro, le système place des points d’arrêt implicites à intervalles de 2 048 tokens, et la rétention se règle avec prompt_cache_retention, limitée à 24h. Les modèles antérieurs comme GPT 5.4, GPT 5.1, GPT 5 et GPT 4.1 prennent en charge à la fois la rétention in_memory, qui dure en général environ 5 à 10 minutes d’inactivité, et l’option étendue 24h.

Un convoyeur d’entrepôt trie des colis identiques pendant qu’un employé observe, un café à la main

Le tarif des tokens en cache dépend du modèle, mais il n’y a aucun frais d’écriture supplémentaire sur ces versions. Essayer la mise en cache ne coûte donc rien. Au pire, vous payez le tarif normal.

GPT-5.6 et les frais d’écriture

GPT-5.6 et les versions ultérieures ont modifié les règles, et la nouvelle configuration se rapproche de celle de Claude :

  • Deux modes : avec prompt_cache_options.mode réglé sur implicit, un point d’arrêt se place à la fin du dernier message éligible. Avec explicit, vous marquez vous-même chaque point d’arrêt à l’aide de prompt_cache_breakpoint.
  • Tarification : les lectures du cache coûtent 0,1x du tarif d’entrée sans cache, et les écritures coûtent 1,25x.
  • Durée de vie : prompt_cache_options.ttl n’accepte qu’une valeur, 30m, qui est aussi la valeur par défaut.
  • Minimum : 1 024 tokens d’entrée visibles.
  • Routage : un paramètre de routage du cache dans la requête vous permet de séparer la comptabilité du cache par client, utilisateur ou espace de travail.
{
  "model": "YOUR_GPT_5_6_MODEL",
  "prompt_cache_options": { "mode": "explicit" },
  "input": [
    {
      "role": "developer",
      "content": [{
        "type": "input_text",
        "text": "Stable rubric and instructions...",
        "prompt_cache_breakpoint": { "mode": "explicit" }
      }]
    },
    { "role": "user", "content": "The changing part of the request" }
  ]
}

Les trois niveaux actuels de la plateforme sont GPT 5.6 Terra, GPT 5.6 Luna et GPT 5.6 Sol. Consultez le tableau des tarifs en vigueur pour chaque niveau avant de budgétiser, car OpenAI annonce pour certains niveaux des tarifs de lecture en cache plus avantageux.

Gemini : deux caches en un

Google propose deux mécanismes distincts, qui se facturent différemment. L’un fonctionne de lui-même. L’autre est un objet que vous créez et gérez.

Le cache implicite par défaut

Le cache implicite est activé par défaut pour tous les modèles Gemini 2.5 et plus récents. Vous ne modifiez aucun code. Si une requête partage un préfixe commun avec une requête antérieure, elle peut bénéficier d’un succès de cache, et les économies sont répercutées automatiquement.

Les minimums sont de 2 048 tokens pour Gemini 2.5 Flash et 2.5 Pro, et de 4 096 tokens pour Gemini 3.5 Flash, ses frères Flash plus récents et Gemini 3.1 Pro. Les conseils de Google correspondent exactement à la règle du préfixe : placez le contenu volumineux et commun au début, et envoyez les requêtes au préfixe similaire rapprochées dans le temps.

Aucune garantie n’existe toutefois pour une requête donnée. Le cache implicite est opportuniste, et c’est pourquoi certaines équipes passent à la version explicite.

Caches explicites et frais de stockage

Avec la mise en cache explicite, vous créez un objet de cache, puis vous dirigez les requêtes vers lui.

cache = client.caches.create(
    model="gemini-2.5-flash",
    config=types.CreateCachedContentConfig(
        system_instruction="Long, stable instructions...",
        contents=[big_document],
        ttl="3600s",
    ),
)

response = client.models.generate_content(
    model="gemini-2.5-flash",
    contents="Today's question",
    config=types.GenerateContentConfig(cached_content=cache.name),
)

Palettes empilées sur des rayonnages de stockage au froid, l’image d’un espace payé à l’heure

La durée de vie par défaut est d’une heure, et vous pouvez la régler avec ttl, par exemple "300s". Vous pouvez modifier ensuite le ttl ou le expire_time, mais rien d’autre dans le cache. La facturation comporte trois volets : les tokens réutilisés à tarif réduit, le stockage par token-heure tant que le cache existe, et le tarif normal pour tout ce qui se trouve hors du cache. Les caches explicites ont un minimum de 2 048 tokens sur les modèles 2.5 et de 4 096 sur la gamme 3.x. L’API Interactions ne prend en charge que le type implicite.

Google a publié des remises de réutilisation comprises entre 75 % et 90 % selon la génération du modèle. Vérifiez donc le chiffre de votre modèle sur la page tarifaire en vigueur.

Les chiffres côte à côte

Trois carnets, une calculatrice et des tickets de caisse disposés sur un bureau en chêne pour une comparaison de coûts

CaractéristiqueClaudeOpenAI (GPT-5.6 et versions ultérieures)Gemini
Mode d’activationcache_control points d’arrêt, ou un champ unique au niveau racine pour le mode automatiqueImplicite par défaut, ou points d’arrêt explicitesImplicite par défaut, plus des objets de cache explicites
Durée de vie5 minutes, ou 1 heure sur demande30 minutesL’implicite n’est pas garanti. L’explicite dure 1 heure par défaut
Coût d’écriture1,25x pour 5 minutes, 2x pour 1 heure1,25xTarif d’entrée normal pour l’implicite. Stockage par token-heure pour l’explicite
Coût de lecture0,1x sur la plupart des modèles, 0,05x sur Opus 5.5 et Sonnet 5.50,1xTarif réduit, défini par modèle
Préfixe minimum512 à 4 096 tokens selon le modèle1 024 tokens visibles2 048 en 2.5, 4 096 sur les modèles plus récents
ContrôleJusqu’à 4 points d’arrêtMode implicite ou expliciteObjet de cache avec un TTL que vous définissez

Lequel coûte le moins cher ?

Utilisez les chiffres de Claude pour vérifier le seuil de rentabilité. Une seule écriture de 5 minutes à 1,25x, plus une lecture à 0,1x, coûte 1,35x. Deux appels sans cache coûtent 2x. Donc une seule réutilisation suffit déjà à rentabiliser l’écriture. L’écriture avec l’option de 1 heure coûte 2x : il faut donc deux lectures avant qu’elle ne devienne plus avantageuse que l’absence de cache.

Passons maintenant à plus grande échelle. Prenez un prompt système de 20 000 tokens envoyé 1 000 fois par jour, au tarif de base d’Opus 5.5 de $4 par million de tokens :

  • Sans cache : 20 millions de tokens à $4 le million font $80,00.
  • Avec cache et 50 redémarrages à froid par jour : 50 écritures à $5 le million coûtent $5,00, et 950 lectures à $0,20 le million coûtent $3,80, soit $8,80 au total.

Les messages utilisateur et les sorties du modèle sont facturés de la même manière dans les deux cas, donc ce calcul isole l’économie sur le préfixe. Sur les anciens modèles d’OpenAI sans frais d’écriture, le calcul est encore plus simple. Sur Gemini, la voie explicite ajoute des heures de stockage à la facture : un cache qui reste inactif une grande partie de la journée peut donc coûter plus qu’il n’économise.

Les erreurs qui font échouer les succès de cache

La plupart des configurations de cache qui échouent ne sont pas des problèmes du fournisseur. Elles viennent de trois habitudes.

Une main qui tamponne une date différente sur chacun d’une pile de formulaires identiques

Des horodatages dans le préfixe

Le bug classique est une ligne du type « Heure actuelle : 14:32:07 » près du début du prompt système. Le préfixe diffère à chaque requête, il ne peut donc jamais correspondre. Anthropic décrit le même piège : un point d’arrêt placé sur un bloc contenant un horodatage et un message utilisateur. Le cache ne se déclenche jamais, car aucune entrée n’a été écrite à une position antérieure. La solution consiste à déplacer le point d’arrêt sur le dernier bloc qui reste identique d’une requête à l’autre, et à placer la ligne qui change après lui.

Réordonner les outils et les messages

L’ordre fait partie de l’empreinte. Mélanger les définitions d’outils, trier différemment une liste de documents récupérés ou sérialiser du JSON avec un nouvel ordre de champs produit un nouveau préfixe. Avec Claude, une modification à un niveau invalide ce niveau et tous ceux qui suivent : si vous modifiez une définition d’outil, les caches des outils, du système et des messages sont tous invalidés. Ajouter ou retirer des images invalide le cache des messages. Gardez les listes d’outils dans un ordre fixe et sérialisez-les toujours de la même manière.

Trafic à froid entre les rafales

Une durée de vie de 5 minutes n’aide pas une tâche qui envoie une requête toutes les dix minutes. Chaque appel paie le prix de l’écriture et ne profite jamais d’une lecture. Dans ce cas, vous disposez de trois options : passer à la durée de vie de 1 heure sur Claude, envoyer une requête de maintien en activité peu coûteuse avant que le minuteur n’expire, ou regrouper les tâches pour que les requêtes arrivent rapprochées.

💡 Règle empirique : adaptez la durée de vie du cache à l’écart entre les requêtes, et non à la longueur de la session.

Mesurer les succès en production

Ne faites pas confiance à une configuration tant que la réponse ne confirme pas qu’elle fonctionne. Chaque fournisseur signale l’activité du cache dans le bloc d’usage de la réponse.

Une main tenant un chronomètre argenté sur la ligne d’arrivée d’une piste de course

Champs à journaliser

FournisseurOù regarder
Claudeusage.cache_creation_input_tokens et usage.cache_read_input_tokens
OpenAIusage.input_tokens_details.cached_tokens et, sur GPT-5.6 et versions ultérieures, cache_write_tokens
GeminiLe nombre de tokens en cache dans usage_metadata

Sur Claude, le champ input_tokens ne compte que les tokens situés après le dernier point d’arrêt, et non l’ensemble du prompt. Le total réel est cache_read_input_tokens + cache_creation_input_tokens + input_tokens. Calculez donc votre taux de succès à partir de cette somme.

Journalisez trois nombres par requête : les tokens du cache lus, les tokens écrits et les tokens facturés au plein tarif. Surveillez ensuite deux signaux. Un nombre de lectures qui reste à zéro après la deuxième requête identique signifie que le préfixe change ou se situe sous le minimum. Un nombre d’écritures qui grimpe à chaque requête signifie que la durée de vie expire avant l’arrivée de l’appel suivant.

Créez vos propres images avec Picasso IA

Rédiger des prompts avec trois modèles

Les paramètres de cache se gèrent dans l’API propre à chaque fournisseur, donc c’est dans votre code que vous les ajustez. Picasso IA est utile une étape plus tôt, lorsque vous décidez ce que doit dire le préfixe stable :

  1. Ouvrez Claude Sonnet 5, collez votre long prompt système et demandez-lui de resserrer la formulation sans changer les règles.
  2. Lancez la même tâche sur GPT 5.6 Terra et Gemini 3.5 Flash.
  3. Comparez les trois réponses, gardez le prompt qui se comporte bien partout, et figez-le comme préfixe mis en cache.

Un prompt figé est aussi un prompt stable, ce qui est exactement ce que recherche un cache.

Un photographe disposant des tirages sur une table dans un loft ensoleillé

Les photos de cet article ont toutes été réalisées avec P Image, chacune à partir d’un seul prompt descriptif portant sur l’objectif, la lumière et la texture. Vous pouvez faire de même en quelques minutes. Essayez Seedream 4.5 pour des détails 4K nets, Flux 2 Pro pour un réalisme photographique, Imagen 4 pour les scènes naturelles, ou Nano Banana Pro pour des résultats soignés.

Rédigez un prompt qui nomme le sujet, la lumière et l’objectif, lancez-le, puis modifiez un seul détail et relancez-le. La façon la plus rapide de prendre la mesure d’un modèle est de commencer à expérimenter avec vos propres images sur Picasso IA dès aujourd’hui.

Partager cet article

Choisissez votre langue