Réduisez la latence et les coûts grâce à la mise en cache des prompts.
Pourquoi mettre les prompts en cache ?
Lorsque plusieurs requêtes partagent le même préfixe de prompt, la mise en cache des prompts permet de réutiliser les calculs déjà effectués. Elle présente trois avantages principaux :
Moins de calculs : le modèle évite de refaire les calculs pour un préfixe qu’il a déjà traité.
Des tokens d’entrée moins chers : les tokens réutilisés bénéficient du tarif réduit du modèle pour les entrées en cache, avec une remise pouvant atteindre 95 %.
Une réponse plus rapide : le modèle passe moins de temps à traiter l’entrée avant de commencer à répondre.
Les appels aux modèles via l’API Agents utilisent le même mécanisme de mise en cache des prompts que l’API Responses. Réutiliser le contexte au sein d’une session peut préserver un préfixe commun, mais le fait de conserver la session ne garantit pas que la requête trouvera une correspondance en cache. Consultez la section Observabilité et utilisation pour connaître les champs d’utilisation de la session et le mode de comptabilisation des sous-agents.
Les tarifs de la mise en cache des prompts varient selon le modèle. Consultez les tarifs de l’API pour connaître les tarifs en vigueur pour les entrées en cache et les écritures en cache. Le tarif d’écriture ne s’ajoute pas au tarif d’entrée. Chaque token d’entrée est facturé à un seul tarif, celui d’une entrée hors cache, d’une entrée en cache ou d’une écriture en cache.
En quoi consiste la mise en cache des prompts ?
Lorsqu’il traite des tokens d’entrée, le modèle doit calculer des états intermédiaires appelés états clé-valeur (KV). Ces états lui permettent de se référer aux tokens précédents lorsqu’il traite de nouvelles entrées et génère des tokens de sortie.
La mise en cache des prompts conserve cet état pour un préfixe réutilisable, c’est-à-dire la suite de tokens qui reste inchangée au début d’un prompt. Si une requête ultérieure présente le même préfixe et trouve une entrée correspondante en cache, le modèle peut réutiliser l’état enregistré sans traiter à nouveau ces tokens. Il doit toujours traiter les nouvelles entrées pour générer une nouvelle réponse.
Le cache des prompts stocke les tenseurs clé-valeur (KV). Les tokens eux-mêmes n’y sont pas stockés.
Pour réutiliser le cache, le préfixe présenté au modèle doit correspondre dans son intégralité. Si le contenu ou un paramètre qui influe sur le préfixe change avant un point de coupure, le préfixe ne peut plus correspondre à l’entrée existante au-delà de cette modification.
Hidden system message
OpenAI-provided instructions
Tools
Definitions and schemas
Developer message
Application instructions
Context history
Conversation messages, tool calls and results, text and multimodal content
Modifier une requête ne supprime pas nécessairement une entrée du cache. Ce qui compte, c’est que la requête suivante présente le même préfixe et puisse trouver un point de coupure admissible correspondant. Voici les principaux paramètres à vérifier :
Peut modifier les instructions de raisonnement du modèle. Sur les modèles compatibles, utilisez une mise à jour de la configuration pour modifier l’effort de raisonnement tout en préservant le préfixe précédent.
Remplace le contenu antérieur de la conversation par un contexte compacté, ce qui peut empêcher la réutilisation du cache à partir du premier token modifié.
Fonctionnement de la mise en cache
Un point de coupure du cache marque la fin d’un préfixe de prompt qu’OpenAI peut enregistrer dans le cache et réutiliser dans des requêtes ultérieures. La première requête écrit un préfixe admissible dans le cache. Les requêtes suivantes recherchent le plus long préfixe disponible qui correspond à une entrée en cache. Elles remontent les points de coupure admissibles jusqu’à trouver une correspondance.
Pour être mis en cache, un préfixe de prompt doit atteindre la longueur minimale de mise en cache du modèle, exprimée en tokens. Les tokens du contenu système masqué fourni par OpenAI ne comptent pas dans ce minimum. La longueur minimale est de 1 024 tokens pour GPT-5.6 et les modèles ultérieurs. Pour les modèles antérieurs, elle varie selon les paramètres de la requête. Consultez le comparatif des modèles pour en savoir plus.
Une fois cette longueur minimale atteinte, vous pouvez placer vous-même les points de coupure ou laisser OpenAI choisir leur emplacement de manière implicite. Les options disponibles dépendent du modèle.
Pour GPT-5.6 et les modèles ultérieurs, les écritures en cache coûtent 1,25 fois le tarif standard des tokens d’entrée hors cache pour la durée de vie par défaut de 30 minutes. Dans l’API Responses, vous pouvez choisir une durée de vie minimale de 12 heures. Le tarif d’écriture est alors de 2,5 fois le tarif d’entrée standard. Quelle que soit la durée choisie, les lectures suivantes coûtent 0,1 fois le tarif d’entrée standard sur la plupart de ces modèles et 0,05 fois ce tarif sur GPT-6.1 Sol et GPT-6.1 Terra.
Avec des lectures au coefficient 0,1 et des écritures de 30 minutes, écrire un préfixe une fois et le réutiliser intégralement une fois coûte 1,35 fois son coût d’entrée standard, contre 2 fois ce coût pour deux traitements hors cache. Sur dix requêtes, une écriture et neuf lectures intégrales coûtent 2,15 fois le coût d’entrée standard à ce tarif, contre 10 fois ce coût sans mise en cache.
Ces modèles prennent en charge la mise en cache implicite et explicite. Le mode explicite vous permet de choisir plus précisément les parties du contexte à écrire en cache.
Mode explicite : vous choisissez où placer les points de coupure en fonction de la manière dont vous gérez le contexte.
Définissez prompt_cache_options.mode sur explicit pour utiliser uniquement les points de coupure choisis par le développeur. Marquez chaque point souhaité en ajoutant prompt_cache_breakpoint: { "mode": "explicit" } à un bloc de contenu compatible dans un message d’entrée.
En l’absence de point de coupure explicite, la requête n’utilise pas la mise en cache des prompts et n’effectue aucune écriture en cache.
Le mode exclusivement explicite vous permet de choisir où s’arrêtent les écritures en cache. Le contenu situé après le dernier point sélectionné est traité au tarif des tokens d’entrée hors cache, sans frais d’écriture en cache. Vous pouvez ainsi éviter d’écrire du contenu variable qui a peu de chances d’être réutilisé.
Plusieurs points de coupure explicites permettent de conserver des préfixes qui évoluent à des rythmes différents. Chaque requête peut effectuer jusqu’à quatre écritures en cache.
Les éléments d’entrée additional_tools n’acceptent pas actuellement prompt_cache_breakpoint.
Le champ instructions de premier niveau ne peut pas contenir de point de coupure explicite. Pour marquer des instructions de développeur réutilisables, placez-les dans un bloc input_text au sein d’un message de développeur.
Mode implicite : OpenAI choisit automatiquement des emplacements de points de coupure adaptés à la plupart des cas d’usage.
Lorsque prompt_cache_options.mode vaut implicit, OpenAI place un point de coupure à la fin du dernier message admissible. Les messages admissibles sont :
les messages utilisateur,
la dernière réponse d’une suite de réponses d’outils consécutives,
le dernier message de la suite initiale de messages de développeur consécutifs.
Vous pouvez ajouter des points de coupure explicites tout en conservant le point implicite. Celui-ci utilise l’une des quatre écritures en cache disponibles, ce qui laisse trois écritures pour les points explicites.
Seule la mise en cache implicite est prise en charge. OpenAI place les points de coupure implicites à des intervalles propres au modèle, mesurés à partir du début du message système masqué d’OpenAI. Seuls les points qui atteignent ou dépassent la longueur minimale de mise en cache sont admissibles. Cette longueur se mesure à partir de la fin du contexte masqué.
Pour calculer la valeur renvoyée dans cached_tokens, OpenAI soustrait le nombre de tokens système masqués de la position du dernier point de coupure correspondant, puis arrondit le résultat au multiple de 128 inférieur ou égal le plus proche.
Recherche d’un préfixe correspondant
Dans la requête entrante, OpenAI examine uniquement les limites de recherche dans le cache décrites ci-dessous. Il les parcourt du préfixe le plus long au plus court pour trouver un préfixe correspondant déjà disponible dans le cache de la machine.
Pour GPT-5.6 et les modèles ultérieurs, la recherche porte sur les limites suivantes dans la requête entrante :
Mode exclusivement explicite : les 2 premiers et les 50 derniers points de coupure explicites.
Mode implicite : les 2 premiers et les 50 derniers points de coupure explicites, le point implicite, jusqu’à 20 fins de messages admissibles antérieurs et la fin du bloc initial de messages de développeur consécutifs. Le mode implicite peut ainsi réutiliser un préfixe qui se termine à la fin d’un message antérieur, même en l’absence de point de coupure explicite à cet endroit.
Génération du modèle
Mode de mise en cache
Les points d’arrêt implicites sont placés au niveau du dernier message utilisateur admissible.
Contenu système masquéOutilsDéveloppeurHistorique du contexteSuiteEntrée en cacheEntrée hors cache
Longueur minimale pour la mise en cache (variable selon le modèle)
Requête 1
12,000 tokens d’entrée
3,000 tokens(à titre indicatif)
▼
Requête 2
15,000 tokens d’entrée
3,000 tokens(à titre indicatif)
▼
0
2.5k
5k
7.5k
10k
12.5k
15k
17.5k
20k
Tokens d’entrée (y compris les tokens masqués présentés à titre d’exemple)
Les entrées du cache expirent. La durée de vie minimale, les paramètres de conservation et le comportement du cache lorsqu’une requête réutilise un préfixe dépendent du modèle.
Dans l’API Responses, définissez prompt_cache_options.ttl pour choisir la durée de vie minimale du cache :
Valeur
Durée de vie minimale
Tarif d’écriture en cache
Cas d’usage
"30m" (par défaut)
30 minutes
1,25 fois le tarif des tokens d’entrée hors cache
Conversations et étapes d’un agent qui réutilisent fréquemment le contexte.
"12h"
12 heures
2,5 fois le tarif des tokens d’entrée hors cache
Instructions stables ou documents de référence réutilisés à des intervalles plus longs.
Ces tarifs couvrent la totalité de l’écriture. Ils ne s’ajoutent pas au tarif d’entrée standard. Le tarif de lecture en cache est identique pour les deux durées de vie. OpenAI peut conserver les entrées au-delà du minimum demandé. La valeur "12h" ne fixe pas de date limite de suppression et ne modifie pas la politique de conservation maximale des données.
Le paramètre ttl de la requête s’applique au point de coupure implicite et aux points explicites qui n’ont pas leur propre ttl. Définissez prompt_cache_breakpoint.ttl pour choisir une autre durée pour un point explicite donné. Si vous omettez les deux paramètres, la valeur par défaut "30m" s’applique. Une valeur non prise en charge renvoie l’erreur 400 invalid_request_error. Ces paramètres ne modifient pas le paramètre prompt_cache_retention des modèles antérieurs.
Combiner les durées de vie dans une même requête
Placez le contenu réutilisé tout au long de la journée au début du prompt et attribuez une durée de vie de "12h" à son point de coupure. Utilisez "30m" pour le contexte de session qui change plus souvent. Cet exemple fixe la durée par défaut de la requête à 30 minutes et la remplace pour le préfixe partagé. En mode exclusivement explicite, la question en cours se trouve après le dernier point de coupure et n’occasionne donc aucun frais d’écriture en cache.
Requête de l’API Responses avec des points de coupure de 12 heures et de 30 minutes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30{"model": "gpt-6.1-sol","prompt_cache_options": { "mode": "explicit", "ttl": "30m" },"input": [ {"role": "developer","content": [ {"type": "input_text","text": "Shared instructions and reference material reused throughout the day...","prompt_cache_breakpoint": { "mode": "explicit", "ttl": "12h" } } ] }, {"role": "user","content": [ {"type": "input_text","text": "Session context reused over the next few minutes...","prompt_cache_breakpoint": { "mode": "explicit" } }, {"type": "input_text","text": "The current question, which does not need a cache write..." } ] } ]}
Remplacez le texte d’exemple par votre contenu. Chaque préfixe à mettre en cache doit atteindre la longueur minimale de mise en cache du modèle.
Chevauchement des écritures et modification de la durée de vie
Un point de coupure couvre tout le préfixe qui le précède. Dans une même requête, chaque token est facturé une seule fois, au tarif de la plus longue durée de vie parmi les écritures sélectionnées qui le couvrent. Une écriture de 12 heures placée plus loin étend également à 12 heures la couverture des points de coupure sélectionnés qui la précèdent dans ce préfixe.
Ces exemples supposent que tout préfixe déjà en cache correspond à une limite de recherche admissible dans la nouvelle requête.
État du cache avant la requête
Points de coupure sélectionnés
Tokens facturés en lecture
Tokens facturés en écriture de 30 minutes
Tokens facturés en écriture de 12 heures
Aucun préfixe en cache
"12h" à 2 000 tokens, puis "30m" à 5 000
0
3 000
2 000
Aucun préfixe en cache
"30m" à 2 000 tokens, puis "12h" à 5 000
0
0
5 000
Couverture de 30 minutes encore valide pour les 2 000 premiers tokens
"12h" à 5 000
0
0
5 000
Couverture de 12 heures encore valide pour les 2 000 premiers tokens
"30m" à 5 000
2 000
3 000
0
Si vous faites passer une couverture de 30 minutes encore valide à 12 heures, une nouvelle écriture de 12 heures est facturée pour ces tokens, sans crédit au titre de l’écriture précédente. Toute partie déjà couverte par une entrée de 12 heures encore valide reste facturée comme une lecture en cache.
Une lecture de 30 minutes prolonge la couverture jusqu’à au moins 30 minutes après la lecture. Si l’entrée lue bénéficie d’une couverture de 12 heures encore valide, la nouvelle échéance est la plus tardive des deux : l’échéance existante ou 30 minutes après la lecture. La lecture ne relance pas la période de 12 heures et n’entraîne pas de nouveaux frais d’écriture.
La durée de vie minimale détermine l’admissibilité au tarif de lecture en cache. Elle ne garantit pas que chaque requête réutilisera les tenseurs KV stockés ni que sa latence sera moindre.
Utilisez prompt_cache_retention. Les valeurs prises en charge dépendent du modèle :
in_memory : les entrées restent généralement actives pendant environ 5 à 10 minutes d’inactivité, et jusqu’à une heure.
24h : avec la conservation prolongée, les entrées restent généralement disponibles environ 30 minutes et peuvent être conservées jusqu’à 24 heures.
Valeurs de conservation par défaut et politique de non-conservation des données
La mise en cache des prompts peut stocker des tenseurs clé-valeur chiffrés dans le stockage local du GPU, sous forme d’état applicatif. Pour les modèles compatibles à la fois avec in_memory et 24h, la valeur par défaut dépend de la politique de conservation des données de votre organisation :
Pour les organisations qui n’ont pas activé la politique de non-conservation des données, la valeur par défaut est 24h.
Pour les organisations qui ont activé la politique de non-conservation des données, la valeur par défaut est in_memory.
Avant de choisir une valeur, vérifiez les politiques de conservation disponibles pour votre modèle et votre organisation.
Emplacement du cache
Chaque machine dispose de son propre cache. Au-delà de 15 requêtes par minute, une partie du trafic peut être acheminée vers d’autres machines. Une requête ne peut réutiliser un préfixe que si elle atteint une machine dont le cache contient une entrée correspondante encore valide. Le routage vers la bonne machine joue donc un rôle important dans la réutilisation du cache.
Chaque organisation dispose de caches distincts. Leur réutilisation est limitée à une même région de traitement.
OpenAI gère le routage automatiquement. Au sein d’une organisation et d’une région de traitement, le routage pour un modèle donné dépend des éléments suivants :
La charge actuelle des machines et leur capacité disponible.
Un hachage des premiers tokens qui suivent le contenu masqué d’OpenAI, y compris les définitions d’outils lorsqu’elles sont présentes. Le nombre de tokens pris en compte varie selon le modèle.
La clé prompt_cache_key, si vous en fournissez une. Elle sépare la réutilisation du cache par groupe de requêtes et aide à optimiser le routage vers le cache sur les modèles antérieurs à GPT-5.6.
Sur les modèles antérieurs à GPT-5.6, utilisez une clé prompt_cache_key stable pour les requêtes qui partagent un préfixe réutilisable. Cela aide à acheminer les requêtes associées vers le même cache. Pour les groupes à fort trafic, visez environ 15 requêtes par minute et par clé, tous préfixes confondus. Au-delà, répartissez le trafic entre plusieurs clés selon une règle stable et déterministe. Conservez la même prompt_cache_key pour les requêtes associées afin qu’elles puissent réutiliser le même cache. Les clés influent sur le routage, mais ne lient pas les requêtes à une machine et ne garantissent pas de correspondance en cache.
Sur GPT-5.6 et les modèles ultérieurs, OpenAI gère automatiquement le routage vers le cache. La clé n’est pas nécessaire pour optimiser la mise en cache. Vous pouvez utiliser des clés distinctes pour comptabiliser séparément l’utilisation du cache par client ou par utilisateur dans votre application.
Des clés distinctes permettent d’expliquer plus facilement à chaque client ou utilisateur sa consommation de tokens en cache et sa facturation. Par exemple, elles aident à empêcher un utilisateur de soumettre des prompts tests et d’observer les correspondances en cache pour savoir si un autre utilisateur a déjà mis en cache un contenu donné. Consultez la section Comptabiliser séparément l’utilisation du cache à l’aide de clés.
Comparatif des modèles
Fonctionnement
GPT-5.6 et modèles ultérieurs
GPT-5.5 et GPT-5.5 Pro
Autres modèles antérieurs
Points de coupure implicites
À la fin du dernier message admissible.
Tous les 2 048 tokens.
À intervalles réguliers, selon le modèle.
Points de coupure explicites
Pris en charge
Non pris en charge
Non pris en charge
prompt_cache_key
Facultatif pour comptabiliser séparément l’utilisation du cache
Utilisez une clé stable pour optimiser le routage vers le cache
Utilisez une clé stable pour optimiser le routage vers le cache
Longueur minimale du préfixe à mettre en cache
1 024 tokens d’entrée visibles
Varie selon les paramètres de la requête
Varie selon les paramètres de la requête
Décompte des tokens en cache
Décompte exact jusqu’à la limite admissible, hors tokens masqués
Exclut les tokens masqués et arrondit par défaut à un multiple de 128
Exclut les tokens masqués et arrondit par défaut à un multiple de 128
Tarif de lecture en cache
0,1 fois le tarif d’entrée hors cache (0,05 fois pour GPT-6.1 Sol et GPT-6.1 Terra)
Tarif d’entrée en cache propre au modèle
Tarif d’entrée en cache propre au modèle
Tarif d’écriture en cache
1,25 fois le tarif d’entrée pour "30m", 2,5 fois pour "12h" dans l’API Responses
Généralement environ 30 minutes, jusqu’à 24 heures
Généralement 5 à 10 minutes d’inactivité pour in_memory, ou jusqu’à 24 heures pour 24h
* La conservation prolongée est prise en charge par gpt-5.5, gpt-5.5-pro, gpt-5.4, gpt-5.2, gpt-5.1-codex-max, gpt-5.1, gpt-5.1-codex, gpt-5.1-codex-mini, gpt-5.1-chat-latest, gpt-5, gpt-5-codex et gpt-4.1.
Pour les modèles antérieurs à GPT-5.6, la longueur minimale d’entrée requise pour la mise en cache varie selon les paramètres de la requête, notamment les outils, les images, les schémas de sortie, l’effort de raisonnement et le niveau de détail des réponses.
Veillez en priorité à préserver l’historique de la conversation, à garder les définitions d’outils stables et à choisir où s’arrête la mise en cache. Sur GPT-5.6 et les modèles ultérieurs, utilisez prompt_cache_options.mode et prompt_cache_breakpoint pour contrôler les points de coupure du cache. Vous pouvez également utiliser une clé prompt_cache_key facultative si votre application doit comptabiliser séparément l’utilisation du cache par client. Sur les modèles antérieurs à GPT-5.6, utilisez une prompt_cache_key stable pour optimiser le routage des requêtes qui partagent un préfixe réutilisable.
Dans les applications où les échanges se déroulent sur plusieurs tours, réutiliser l’historique qui s’enrichit à chaque tour peut économiser davantage de tokens d’entrée que la seule mise en cache des instructions initiales. Conservez les messages et les résultats d’outils précédents pour que les tours suivants puissent réutiliser l’intégralité du préfixe partagé.
Gardez le préfixe stable. Placez les instructions de développeur stables et les documents de référence partagés en premier. S’ils contiennent des horodatages, du contenu propre à un utilisateur ou d’autres éléments variables, placez ces éléments à la fin ou déplacez-les dans des messages ultérieurs de la conversation.
Préservez l’historique de la conversation. Ajoutez les nouveaux messages à la suite des précédents sans réécrire les tours passés. Un résumé, un compactage ou une troncature du contexte peuvent modifier le préfixe et obliger la mise en cache à repartir de zéro.
Modifiez l’effort de raisonnement sans réécrire le préfixe. Sur les modèles GPT-6, ajoutez un élément d’entrée configuration_update pour modifier l’effort de raisonnement entre deux réponses, tout en conservant la valeur de reasoning.effort au niveau de la requête. Le préfixe d’origine reste ainsi réutilisable en cache. Consultez la section Modifier le raisonnement en cours de conversation pour voir des exemples et connaître les limites de compatibilité.
Placer le contenu variable après le point de coupure
Sur les modèles compatibles à partir de GPT-6, ajoutez un élément d’entrée configuration_update pour modifier l’effort de raisonnement en cours de conversation tout en préservant le préfixe déjà en cache. Conservez la valeur d’origine du paramètre reasoning.effort de premier niveau. Le modifier peut entraîner la réécriture d’une partie des instructions système masquées.
La dernière mise à jour de reasoning.effort détermine l’effort de raisonnement pour les réponses suivantes. Ajoutez cet élément à la fin de input pour passer au niveau d’effort high.
Si votre application a besoin d’outils différents d’une requête à l’autre, modifiez la sélection des outils qu’elle peut appeler, tout en gardant leurs définitions stables pour préserver les préfixes réutilisables.
Gardez les outils stables. Conservez leurs définitions, leur ordre et leurs schémas.
Désactivez les outils pour une requête. Définissez tool_choice sur "none" au lieu de supprimer les définitions d’outils.
Activez uniquement certains outils. Utilisez allowed_tools pour limiter les outils appelables tout en conservant la liste tools fournie.
Chargez les outils à la demande. Utilisez la recherche d’outils avec defer_loading: true pour réduire le nombre de tokens d’entrée consacrés aux définitions d’outils lors des premières requêtes d’une conversation à plusieurs tours. Les outils découverts sont ajoutés à la fin du contexte, ce qui préserve le contenu réutilisable qui les précède.
Conservez l’historique de chargement des outils. Utilisez un élément d’entrée additional_tools avec le rôle développeur pour ajouter des outils en cours de conversation selon la logique de votre application.
Sur GPT-5.6 et les modèles ultérieurs, deux paramètres déterminent l’emplacement des points de coupure. prompt_cache_options.mode sélectionne la mise en cache implicite ou exclusivement explicite, et prompt_cache_breakpoint marque une limite de votre choix.
Placez les points de coupure automatiquement. Utilisez la mise en cache implicite pour placer un point à la fin du dernier message admissible. Ce mode convient aux conversations à plusieurs tours où chaque tour complète le contexte existant.
Choisissez vous-même les points de coupure. Placez des marqueurs explicites à la fin du contenu stable. Utilisez le mode exclusivement explicite pour éviter les écritures inutiles de suffixes variables.
Shared cached prefix for breakpoint 2
Hidden system message
Tools
Developer message · stable prefix
Developer message · variable suffix A
User message
Tool call
Tool result
Assistant message
Developer message · variable suffix B
New user input A
New user input B
Breakpoint 1
Breakpoint 2
Shared cached prefix for breakpoint 1
Unreused suffix: no cache-write charge
New user inputs: no cache-write charge
Pour GPT-5.6 et les modèles ultérieurs, préparez à l’avance le contexte connu afin de réduire le délai d’obtention du premier token lors d’une requête ultérieure. Par exemple, une application interactive peut précharger les instructions partagées, les définitions d’outils ou les documents de référence au démarrage, avant que l’utilisateur pose sa première question.
Dans une requête de l’API Responses, définissez prompt_cache_options.prewarm sur true pour préparer le cache des prompts sans générer de sortie. Une fois cette requête terminée, envoyez votre requête effective avec le même préfixe de prompt, en omettant prewarm ou en lui attribuant la valeur false.
Sur GPT-5.6 et les modèles ultérieurs, utilisez prompt_cache_key pour comptabiliser séparément l’utilisation du cache par client, par utilisateur ou par espace de travail au sein de votre application. Vous pourrez ainsi expliquer plus facilement la consommation de tokens en cache et leur facturation pour chaque groupe. La clé est facultative et n’est pas nécessaire pour optimiser la mise en cache sur ces modèles.
Choisissez comment répartir le décompte. Attribuez une clé distincte à chaque client ou utilisateur dont vous souhaitez comptabiliser séparément l’utilisation du cache. Par exemple, support:customer_123 et support:customer_456 permettent de tenir des décomptes distincts pour deux clients, même lorsque leurs requêtes contiennent le même préfixe.
Gardez les clés stables au sein de chaque groupe. Réutilisez la même clé pour les requêtes associées d’un client. Ne générez une clé distincte pour une session ou un fil de conversation que si vous devez en comptabiliser séparément l’utilisation du cache.
Appliquez les clés systématiquement. Utilisez la clé du client pour toutes ses requêtes afin de conserver un décompte séparé. Cela aide également à empêcher un client de sonder le cache pour savoir quels contenus un autre client a déjà utilisés.
Sur les modèles antérieurs à GPT-5.6, prompt_cache_key joue un rôle important dans l’optimisation du taux de succès du cache. Utilisez une clé stable pour les requêtes qui partagent un préfixe réutilisable afin de faciliter leur routage vers le même cache. Pour les groupes à fort trafic, suivez les recommandations de répartition du trafic entre plusieurs clés.
Pour les modèles de l’API Responses compatibles avec prompt_cache_options, utilisez "30m" pour un contexte fréquemment réutilisé et envisagez "12h" pour des préfixes stables réutilisés à des intervalles plus longs. Comparez le tarif d’écriture plus élevé de la durée de 12 heures au coût de réécriture du préfixe après expiration de la couverture de 30 minutes. Définissez la durée de vie de chaque point de coupure pour conserver le contenu partagé plus longtemps que le contexte propre à la session. Consultez la section Durée de vie du cache pour voir des exemples et connaître les règles de facturation.
Pour les modèles antérieurs, réglez de préférence prompt_cache_retention sur "24h" pour bénéficier de la conservation prolongée, si le modèle et vos exigences de conservation des données le permettent. Consultez la section Durée de vie du cache pour connaître les paramètres pris en charge et leurs valeurs par défaut.
Si de nombreuses requêtes réutilisent les mêmes instructions de développeur et définitions d’outils, mais que leur préfixe partagé n’atteint pas la longueur minimale de mise en cache du modèle, envisagez de le raccourcir ou de le compléter avec des instructions, des exemples ou des documents de référence utiles et stables. Vérifiez si les économies réalisées grâce au cache compensent les tokens d’entrée supplémentaires et les éventuels frais d’écriture. Assurez-vous que les résultats des évaluations et le comportement restent stables.
Le graphique illustre le surcoût possible d’un préfixe trop court : le traiter hors cache peut coûter plus cher que l’allonger jusqu’au nombre minimal de tokens requis pour la mise en cache. Le graphique utilise le tarif d’écriture de 30 minutes pour GPT-5.6 et les modèles ultérieurs.
Prompt length and input cost
0
500
1,000
1,500
2,000
Reusable prefix length (tokens)
Pour comparer uniquement les coûts, notons M la longueur minimale de mise en cache, L<M la longueur du préfixe d’origine, r le coefficient du tarif de lecture en cache, w le coefficient du tarif d’écriture en cache et N le nombre total de requêtes. Supposons que le préfixe allongé contienne exactement M tokens, qu’il soit écrit une seule fois et qu’il soit intégralement réutilisé à chaque requête suivante. En équivalent tokens d’entrée hors cache, conserver le préfixe d’origine coûte N×L, tandis que l’allonger coûte M[w+(N−1)r]. La longueur du préfixe d’origine pour laquelle les coûts sont égaux est :
Lbreak-even=M(r+Nw−r)
Allongez le préfixe si L>Lbreak-even. Si L<Lbreak-even, conserver le préfixe court coûte moins cher. Au seuil, les deux coûts sont égaux. Le plus petit nombre entier de tokens pour lequel l’allongement est plus économique est ⌊Lbreak-even⌋+1. À l’inverse, raccourcir un préfixe admissible en dessous de M fait perdre le bénéfice du cache. Sous les mêmes hypothèses, le préfixe raccourci et traité hors cache doit contenir moins de Lbreak-even tokens pour coûter moins cher que la mise en cache de M tokens. Il n’existe pas de longueur de prompt universelle pour laquelle le coût serait maximal. Le seuil dépend de la fréquence de réutilisation et des tarifs.
Par exemple, avec le tarif habituel de lecture en cache et des écritures de 30 minutes, pour M=1,024, r=0.1 et w=1.25, le seuil est de 102.4+N1,177.6 tokens. Sur 10 requêtes, il est plus économique d’allonger à 1 024 tokens un préfixe d’origine qui en contient au moins 221. Plus le préfixe est réutilisé, plus le seuil se rapproche de 102,4 tokens. Pour un préfixe de 103 tokens, il faut au moins 1 963 requêtes au total pour que l’allongement soit rentable. Pour un préfixe de 102 tokens ou moins, il ne l’est jamais sous ces hypothèses. Cette comparaison ne tient pas compte des performances, des tokens de sortie ni des coûts de requête qui restent inchangés. Des échecs de recherche ou des écritures supplémentaires, ou encore un modèle aux tarifs différents, modifient le résultat.
Mesurez les performances réelles du cache. Suivez usage.input_tokens_details.cached_tokens, usage.input_tokens_details.cache_write_tokens, les décomptes d’écriture par durée de vie, le nombre de tokens d’entrée, la latence et le coût réel. Pour suivre le taux de succès du cache par token, divisez le nombre total de tokens lus en cache par le nombre total de tokens d’entrée. Agrégez les deux décomptes par utilisateur, par espace de travail, par jour ou selon un autre regroupement pertinent.
Pour les modèles de l’API Responses compatibles avec prompt_cache_options, le champ input_tokens_details.cache_write_tokens_details répartit les tokens écrits entre ttl_30m_tokens et ttl_12h_tokens. Ces décomptes ne se chevauchent pas et leur somme est égale à cache_write_tokens. Les deux champs sont renvoyés, même lorsque l’un vaut zéro. Le champ cached_tokens comptabilise les lectures facturées et exclut les tokens facturés en écriture, y compris lors du passage d’une couverture de 30 minutes à une couverture de 12 heures.
Champs d’utilisation des tokens d’entrée pour les deux durées d’écriture
Dans cet exemple, 1 000 tokens d’entrée sont facturés au tarif standard : 12000 - 4000 - 7000. Pour calculer le coût d’entrée, multipliez le nombre de tokens d’entrée standard par le tarif d’entrée du modèle, cached_tokens par son tarif d’entrée en cache, ttl_30m_tokens par 1,25 fois son tarif d’entrée et ttl_12h_tokens par 2,5 fois son tarif d’entrée. Additionnez ces montants et divisez le résultat par 1 000 000 si les tarifs sont exprimés par million de tokens. N’ajoutez pas cache_write_tokens une fois ses deux composantes prises en compte.
Par exemple, avec un tarif d’entrée de 1 $ par million de tokens et un tarif d’entrée en cache de 0,10 $ par million, le coût d’entrée de cette utilisation est de (1000 + 4000 × 0.1 + 3000 × 1.25 + 4000 × 2.5) / 1000000 = $0.01515. Utilisez les tarifs réels de votre modèle, y compris son tarif d’entrée en cache.
La fonction suivante applique le même coefficient à toutes les écritures en cache. Utilisez 1.25 si toutes les écritures ont une durée de vie de 30 minutes ou 2.5 si elles ont toutes une durée de vie de 12 heures. Pour les requêtes qui combinent les deux durées, calculez séparément le coût de chaque catégorie d’écriture comme indiqué ci-dessus.
Calculer le coût d’entrée avec un seul tarif d’écriture en cache
Si vous utilisez prompt_cache_key, conservez les valeurs existantes pour continuer à comptabiliser séparément l’utilisation du cache par client ou par utilisateur.
Remplacez prompt_cache_retention par prompt_cache_options.ttl.
Les exemples suivants s’appliquent à GPT-5.6 et aux modèles ultérieurs.
Prenons un LLM qui évalue en un seul tour une conversation terminée entre un utilisateur et un chatbot. Il détermine si l’échange montre que l’utilisateur est satisfait. Chaque requête utilise la même grille d’évaluation et les mêmes exemples few-shot annotés pour évaluer une conversation différente.
Préservation du préfixe : la grille et les exemples, qui restent fixes, viennent en premier. Leur longueur cumulée est volontairement maintenue juste au-dessus de la longueur minimale de mise en cache du modèle, avec du contenu qui aide à calibrer l’évaluation. La conversation à évaluer vient en dernier.
Mode de mise en cache et point de coupure : la mise en cache exclusivement explicite est activée, avec un point de coupure après la grille et les exemples fixes. La conversation entre l’utilisateur et le chatbot vient après ce point et n’est pas écrite en cache. Cela évite les frais d’écriture pour du contenu qui a peu de chances d’être réutilisé.
Un déploiement appliquant ces principes a enregistré un taux de succès du cache d’environ 70 % des tokens. Ce chiffre illustre un résultat possible. Le taux maximal atteignable dépend du contexte et de l’utilisation de votre application.
Requête de l’API Responses pour une évaluation en un seul tour
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22{"model": "gpt-6.1-sol","reasoning": { "effort": "medium", "context": "all_turns" },"text": { "verbosity": "low" },"prompt_cache_options": { "mode": "explicit" },"input": [ {"role": "developer","content": [ {"type": "input_text","text": "Judge whether the completed interaction provides evidence that the user is satisfied. Return true or false. Full grading rubric and labeled few-shot examples...","prompt_cache_breakpoint": { "mode": "explicit" } } ] }, {"role": "user","content": "Completed interaction to evaluate..." } ]}
Prenons un agent à plusieurs tours qui utilise de longues instructions de développeur partagées et appelle fréquemment des outils. En pratique, les utilisateurs mènent plusieurs sessions en parallèle avec l’agent et forkent souvent leurs fils de conversation.
Préservation du préfixe : chaque tour ajoute de nouveaux messages, appels d’outils et résultats sans réécrire le contexte précédent. Le préfixe réutilisable s’allonge ainsi au fil des tours.
Clé de mise en cache des prompts facultative : cet exemple utilise agent_123_v1:user_456 pour comptabiliser séparément l’utilisation du cache par l’utilisateur 456. Il est ainsi plus facile d’expliquer sa consommation de tokens en cache et leur facturation. Cela aide également à empêcher un utilisateur de sonder le cache d’un autre. La clé reste identique pour toutes les sessions de cet utilisateur avec l’agent, y compris lorsqu’il forke un fil. Omettez-la si votre application n’a pas besoin de cette séparation.
Mode de mise en cache implicite : la mise en cache implicite est activée pour placer un point de coupure à la fin du dernier message admissible provenant d’un utilisateur ou d’un outil.
Points de coupure explicites : un point de coupure est ajouté après chaque résultat d’outil pour préserver les préfixes réutilisables précédents et mieux exploiter le cache lorsqu’un utilisateur forke un fil.
Un déploiement appliquant ces principes a enregistré un taux de succès du cache supérieur à 90 % des tokens. Ce chiffre illustre un résultat possible. Le taux maximal atteignable dépend du contexte et de l’utilisation de votre application.
Requête de l’API Responses pour un agent à plusieurs tours
Ce cas se présente particulièrement souvent lors d’une migration depuis un modèle antérieur vers GPT-5.6 ou un modèle ultérieur, car le fonctionnement de la mise en cache implicite change. Si les requêtes partagent un long préfixe mais ont des suffixes différents, mettre en cache la première requête complète en mode implicite seul ne suffit pas à rendre réutilisable leur préfixe commun, plus court.
Supposons que chaque requête contienne un message de développeur statique suivi d’un message utilisateur dynamique. La requête écrit en cache tout le préfixe jusqu’à la fin du contenu dynamique. Si ce contenu change dans la requête suivante, le préfixe ne correspond plus au préfixe long en cache, et aucun point de coupure distinct ne marque la fin du contenu statique.
Pour y remédier, placez un point de coupure explicite après le contenu statique dans les deux requêtes. La première écrit le préfixe réutilisable. La suivante peut alors le réutiliser même si le contenu dynamique change. Cet exemple utilise le mode exclusivement explicite pour éviter d’écrire le contenu dynamique en cache.
Avec un point de coupure après le contenu statique
Supposons que la requête 1 utilise le mode implicite et mette en cache un préfixe jusqu’à la fin d’un message utilisateur. La requête 2 conserve ce préfixe, mais passe à prompt_cache_options.mode: "explicit". Comme indiqué dans la section Recherche d’un préfixe correspondant, la requête 2 examine uniquement les points de coupure explicites de sa propre entrée. Elle ne réutilise donc le préfixe implicite enregistré par la requête 1 que si l’un de ses points explicites correspond à la fin du préfixe mis en cache par la requête 1.
▼ = breakpoint- Request 1: implicit mode [Developer message][User message] ▼- Request 2: explicit-only mode. Does not hit cache. [Developer message][User message][Follow-up] ▼
Pour réutiliser le préfixe implicite de la requête 1, placez un point de coupure explicite à la fin du bloc de contenu correspondant dans la requête 2, ou gardez le mode implicite activé pour que la recherche examine toujours la fin du message admissible précédent.
Même si les deux requêtes utilisent le mode implicite, conserver les mêmes tokens initiaux ne suffit pas toujours. Supposons que la requête 1 se termine par un message utilisateur contenant Content A, puis que la requête 2 complète ce même message pour obtenir Content A + Content B. La limite qui suivait Content A se trouve désormais à l’intérieur du message. Comme indiqué dans la section Recherche d’un préfixe correspondant, en l’absence de point de coupure explicite à cette limite, la requête 2 ne réutilise pas le préfixe qui y avait été enregistré.
▼ = breakpoint- Request 1: implicit mode [Developer message][User message: Content A] ▼- Request 2: implicit mode. Cannot reuse the prefix through Content A. [Developer message][User message: Content A + Content B] ▼
Si la structure de la conversation le permet, conservez le message d’origine et ajoutez un nouveau message à sa suite. Sinon, placez le texte réutilisable dans un bloc de contenu distinct et ajoutez un point de coupure explicite après ce bloc dans les deux requêtes.
En mode implicite, les messages de développeur qui suivent le bloc initial de messages de développeur consécutifs ne servent pas automatiquement de limites de recherche dans le cache. Ajoutez un point de coupure explicite à la fin du message de développeur réutilisable et conservez ce point dans les requêtes suivantes pour qu’OpenAI puisse y rechercher un préfixe correspondant en cache.
Un préfixe assez long pour être mis en cache sur un modèle peut être trop court sur un autre. Consultez le comparatif des modèles et mesurez le préfixe réutilisable avec le modèle et les paramètres que vous utilisez réellement. Lorsque vous changez de modèle, vérifiez à nouveau le seuil applicable.
Le compactage remplace le contexte antérieur de la conversation par une représentation plus courte. Le préfixe peut alors changer. La première requête après le compactage peut donc réutiliser une moindre partie du cache précédent, même si, du point de vue logique, il s’agit toujours de la même conversation.
Dans la mesure du possible, gardez les instructions réutilisables et les documents de référence stables, puis laissez les tours suivants compléter le contexte compacté. Comparez le coût total d’entrée avant et après le compactage. Une diminution du nombre de tokens d’entrée peut réduire le coût même si le taux de succès du cache baisse.
Questions fréquentes
Non. La mise en cache des prompts ne change pas la façon dont le modèle génère les tokens de sortie. Le modèle génère une nouvelle réponse à partir du préfixe en cache. Des requêtes identiques ne produisent donc pas nécessairement des réponses identiques.
Non. Il n’est actuellement pas possible de vider le cache manuellement. Les entrées expirent selon la durée de vie du cache du modèle et les paramètres de conservation.
Oui. Les tokens d’entrée en cache comptent toujours dans la limite de tokens par minute. La mise en cache des prompts ne modifie pas le calcul des limites de débit.
Le cache des prompts conserve des tenseurs clé-valeur (KV) à la place du texte d’origine du prompt. Ces tenseurs peuvent être stockés sous forme d’état applicatif chiffré dans le stockage local du GPU, pendant 24 heures au maximum. Consultez la section Durée de vie du cache pour connaître les durées de vie et les règles de prolongation propres à chaque modèle.
Chaque organisation dispose de caches distincts. Leur réutilisation est limitée à une même région de traitement. Pour en savoir plus sur le traitement des données et sur les fonctionnalités de l’API admissibles à la politique ZDR, consultez la section Vos données.