Réduisez la latence et les coûts grâce à la mise en cache des prompts.
Les avantages de la mise en cache des prompts
La mise en cache des prompts réutilise les calculs déjà effectués lorsque les requêtes partagent le même préfixe de prompt. Elle présente trois avantages principaux :
Moins de calculs : Évitez de recalculer un préfixe de prompt que le modèle a déjà traité.
Des tokens d’entrée moins chers : Bénéficiez du tarif réduit du modèle pour les tokens d’entrée réutilisés depuis le cache, avec une réduction pouvant atteindre 90 %.
Plus de rapidité : Réduisez le temps de traitement des entrées avant le début de la réponse.
La mise en cache des prompts est activée par défaut pour les modèles OpenAI compatibles. Utilisez le tableau de bord de mise en cache des prompts pour suivre les taux de succès des lectures du cache, et l’outil Diagnostics du cache de prompts pour comprendre les échecs de recherche dans le cache et améliorer sa réutilisation.
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. La réutilisation du contexte au sein d’une session peut préserver un préfixe de prompt commun, mais le maintien d’une session ne garantit pas un accès au cache réussi. Consultez Observabilité et utilisation pour connaître les champs d’utilisation des sessions et la comptabilisation de l’utilisation des sous-agents.
Les tarifs de mise en cache des prompts varient selon le modèle. Consultez les tarifs de l’API pour connaître les tarifs actuels des entrées en cache et des écritures dans le cache. Le tarif d’écriture dans le cache ne constitue pas un supplément : les tokens d’entrée sont facturés au tarif des entrées hors cache, des entrées en cache ou des écritures dans le cache.
Qu’est-ce que le cache de prompts ?
Lorsque le modèle traite les tokens d’entrée, il 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 pendant le traitement de nouvelles entrées et la génération de tokens de sortie.
La mise en cache des prompts conserve cet état pour un préfixe réutilisable : les tokens inchangés au début d’un prompt. Lorsqu’une requête ultérieure possède le même préfixe et trouve une entrée correspondante dans le cache, le modèle peut réutiliser l’état enregistré au lieu de traiter à nouveau ces tokens. Il doit toutefois traiter toute nouvelle entrée pour générer une nouvelle réponse.
Le cache de prompts stocke des tenseurs clé-valeur (KV), et non les tokens eux-mêmes.
La réutilisation du cache exige une correspondance sur l’intégralité du préfixe rendu. Si le contenu ou un paramètre pertinent change avant un point d’arrêt, le préfixe qui s’étend au-delà de cette modification ne peut plus correspondre à l’entrée existante du cache.
Message système masqué
Instructions fournies par OpenAI
Outils
Définitions et schémas
Message développeur
Instructions de l’application
Historique du contexte
Messages de conversation, appels d’outils et résultats, texte et contenu multimodal
Modifier une requête ne supprime pas nécessairement une entrée existante du cache. Ce qui compte, c’est qu’une requête ultérieure ait le même préfixe et puisse trouver un point d’arrêt 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 configuration pour modifier l’effort de raisonnement tout en conservant 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 à partir du premier token modifié.
Fonctionnement de la mise en cache
Un point d’arrêt de 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 correspondant disponible dans le cache, en parcourant les points d’arrêt admissibles à rebours jusqu’à trouver une correspondance.
Pour être mis en cache, un préfixe de prompt doit atteindre la longueur minimale en tokens requise pour la mise en cache du modèle. Les tokens du contenu système masqué fourni par OpenAI ne comptent pas dans ce minimum. La longueur minimale d’un prompt pouvant être mis en cache est de 1 024 tokens pour GPT-5.6 et les modèles ultérieurs ; elle varie selon les paramètres de la requête pour les modèles antérieurs. Consultez la comparaison des modèles pour en savoir plus.
Une fois la longueur minimale en tokens requise pour la mise en cache atteinte, vous pouvez choisir explicitement où placer les points d’arrêt de cache, ou laisser OpenAI choisir leurs emplacements de manière implicite. Les options disponibles dépendent du modèle.
Pour GPT-5.6 et les modèles ultérieurs, les écritures dans le cache coûtent 1,25× le tarif standard des tokens d’entrée non mis en cache. Ce surcoût est avantageux lorsque vous savez qu’un préfixe sera réutilisé, car les lectures suivantes ne coûtent que 0,1× ce tarif. Écrire un préfixe une fois et le réutiliser intégralement une fois coûte 1,35× son coût d’entrée habituel, contre 2× pour le traiter deux fois sans mise en cache. Les économies augmentent à chaque lecture supplémentaire du cache : sur dix requêtes, une écriture et neuf lectures complètes coûtent 2,15×, contre 10× sans mise en cache.
La mise en cache implicite et la mise en cache explicite sont toutes deux prises en charge. La mise en cache explicite vous permet de mieux contrôler les parties du contexte écrites dans le cache.
Mode explicite : Vous choisissez où placer les points d’arrêt de cache en fonction de votre gestion du contexte.
Définissez prompt_cache_options.mode sur explicit pour utiliser uniquement les points d’arrêt choisis par le développeur, puis marquez chaque point d’arrêt souhaité en ajoutant prompt_cache_breakpoint: { "mode": "explicit" } à un bloc de contenu pris en charge dans un message d’entrée.
Lorsqu’aucun point d’arrêt explicite n’est placé, la requête n’utilise pas la mise en cache des prompts et n’effectue aucune écriture dans le cache.
Le mode exclusivement explicite vous permet de choisir où s’arrêtent les écritures dans le cache. Le contenu situé après le dernier point d’arrêt sélectionné est traité au tarif des tokens d’entrée non mis en cache, sans frais d’écriture dans le cache. Vous pouvez ainsi éviter d’y écrire du contenu variable qui a peu de chances d’être réutilisé.
Plusieurs points d’arrêt explicites permettent de conserver des préfixes qui changent à des fréquences différentes. Chaque requête peut effectuer jusqu’à quatre écritures dans le cache.
Les éléments d’entrée additional_tools n’acceptent pas prompt_cache_breakpoint pour le moment.
Le paramètre instructions de premier niveau ne peut pas contenir de point d’arrêt explicite. Pour marquer des instructions développeur réutilisables, placez-les dans un bloc input_text au sein d’un message développeur.
Mode implicite : OpenAI choisit automatiquement des emplacements de points d’arrêt adaptés à la plupart des cas d’utilisation.
Lorsque prompt_cache_options.mode vaut implicit, OpenAI place un point d’arrêt à la fin du dernier message admissible. Les messages admissibles sont :
les messages utilisateur
la dernière réponse d’outil d’un groupe de réponses d’outils consécutives
le dernier message développeur du groupe initial de messages développeur consécutifs.
Vous pouvez ajouter des points d’arrêt explicites sans désactiver le point d’arrêt implicite. Celui-ci utilise l’un des quatre emplacements d’écriture dans le cache, ce qui laisse trois emplacements disponibles pour les écritures explicites.
Seule la mise en cache implicite est prise en charge. OpenAI place les points d’arrêt implicites à des intervalles qui dépendent du modèle, à partir du début du message système masqué d’OpenAI. Seuls les points d’arrêt qui atteignent ou dépassent la longueur minimale de mise en cache (comptée à partir de la fin du contexte masqué) sont admissibles.
La valeur cached_tokens renvoyée est calculée en soustrayant les tokens système masqués du nombre de tokens jusqu’au dernier point d’arrêt correspondant, puis en arrondissant le résultat au multiple de 128 inférieur le plus proche.
Fonctionnement de la correspondance des préfixes
OpenAI parcourt uniquement les limites de recherche dans le cache (expliquées ci-dessous) de la requête entrante, du préfixe le plus long au plus court, pour trouver un préfixe correspondant déjà en cache et disponible sur la machine.
Pour GPT-5.6 et les modèles ultérieurs, les limites de recherche dans le cache de la requête entrante sont les suivantes :
Mode exclusivement explicite : les 2 premiers et les 50 derniers points d’arrêt explicites.
Mode implicite : les 2 premiers et les 50 derniers points d’arrêt explicites, le point d’arrêt implicite, jusqu’à 20 fins de messages antérieurs admissibles et la fin du bloc initial de messages développeur consécutifs. Le mode implicite peut ainsi réutiliser un préfixe qui se termine à la fin d’un message antérieur, sans point d’arrêt 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.
Système masquéOutilsDéveloppeurHistorique du contexteSuiteEntrée en cacheEntrée hors cache
Longueur minimale de 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 donnés à titre indicatif)
Les entrées du cache ne sont pas conservées indéfiniment. Une requête ultérieure ne peut réutiliser un préfixe mis en cache que si son entrée est encore disponible. Chaque réutilisation renouvelle sa durée de vie sans frais supplémentaires d’écriture en cache. Les paramètres de durée de vie et de conservation dépendent du modèle.
Utilisez prompt_cache_options.ttl pour définir la durée de vie minimale du cache. La seule valeur prise en charge, 30m, est aussi la valeur par défaut. Un préfixe mis en cache reste réutilisable pendant 30 minutes après sa dernière écriture ou réutilisation, mais OpenAI peut le conserver plus longtemps.
Utilisez prompt_cache_retention, dont 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 : la conservation prolongée maintient généralement les entrées disponibles pendant environ 30 minutes et peut les conserver jusqu’à 24 heures.
Paramètres 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 en tant qu’état de l’application. Pour les modèles qui prennent en charge à la fois in_memory et 24h, la valeur par défaut dépend de la politique de conservation des données de votre organisation :
Les organisations sans politique de non-conservation des données activée utilisent 24h par défaut.
Les organisations avec une politique de non-conservation des données activée utilisent in_memory par défaut.
Vérifiez les politiques de conservation disponibles pour votre modèle et votre organisation avant de choisir une valeur.
Emplacement du cache
Les états mis en cache sont stockés sur des machines individuelles, où un trafic supérieur à 15 requêtes par minute peut entraîner le routage des requêtes excédentaires vers d’autres machines. Une requête ne peut réutiliser un préfixe mis en cache que si elle atteint une machine contenant une entrée correspondante qui n’a pas expiré. Acheminer les requêtes vers la bonne machine est donc important pour réutiliser le cache.
Les caches ne sont pas partagés entre organisations et ne peuvent pas être réutilisés au-delà des limites régionales de traitement.
OpenAI gère automatiquement le routage. 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.
Une empreinte de 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 hachés varie selon le modèle.
Une valeur prompt_cache_key fournie, qui sépare la réutilisation du cache entre les groupes de requêtes et contribue à 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 valeur prompt_cache_key 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, visez environ 15 requêtes par minute au total pour chaque clé, tous préfixes confondus. Répartissez les volumes de trafic plus élevés sur plusieurs clés à l’aide d’une correspondance stable et déterministe. Conservez la même valeur prompt_cache_key pour les requêtes liées afin qu’elles puissent réutiliser le cache associé. Les clés influencent le routage ; elles ne lient pas les requêtes à une machine et ne garantissent pas un accès au cache réussi.
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 des clients ou des utilisateurs de votre application.
L’utilisation de clés distinctes peut faciliter l’explication de l’utilisation et de la facturation des tokens mis en cache pour chaque client ou utilisateur. Par exemple, des clés distinctes contribuent à empêcher qu’un utilisateur sonde le cache d’un autre en soumettant des prompts de test et en observant les accès au cache réussis pour déterminer si un contenu correspondant a déjà été mis en cache. Consultez Comptabilisez séparément l’utilisation du cache à l’aide de clés.
Résumé des différences entre les modèles
Comportement
GPT-5.6 et versions ultérieures
GPT-5.5 et GPT-5.5 Pro
Autres modèles antérieurs
Points d’arrêt implicites
À la fin du dernier message admissible.
Espacés à intervalles réguliers de 2 048 tokens.
Espacés à intervalles réguliers qui dépendent du modèle.
Points d’arrêt 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 pouvant être mis 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 mis en cache
Jusqu’à la limite admissible exacte, hors tokens masqués
Exclut les tokens masqués et arrondit au multiple de 128 inférieur
Exclut les tokens masqués et arrondit au multiple de 128 inférieur
Frais de lecture du cache
0,1× le tarif des tokens d’entrée non mis en cache
Tarif des tokens d’entrée mis en cache propre au modèle
Tarif des tokens d’entrée mis en cache propre au modèle
Frais d’écriture en cache
1,25× le tarif des tokens d’entrée non mis en cache
Au moins 30 minutes après la dernière écriture ou réutilisation
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 pouvant être 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 la verbosité.
Veillez à préserver l’historique de conversation, à garder les définitions d’outils stables et à choisir où s’effectue 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 valeur prompt_cache_key facultative si votre application doit comptabiliser séparément l’utilisation du cache de chaque client. Sur les modèles antérieurs à GPT-5.6, utilisez une valeur prompt_cache_key stable pour optimiser le routage vers le cache des requêtes qui partagent un préfixe réutilisable.
Dans les applications à plusieurs tours de conversation, réutiliser l’historique qui s’allonge peut économiser davantage de tokens d’entrée que la seule mise en cache des instructions initiales. Préservez les messages précédents et les résultats des outils pour que les tours suivants puissent réutiliser l’intégralité du préfixe partagé.
Gardez un préfixe stable. Placez les instructions développeur stables et les documents de référence partagés en premier. Si ces instructions ou documents contiennent des horodatages, du contenu propre à l’utilisateur ou d’autres éléments dynamiques, placez ces éléments à la fin plutôt qu’au début, ou déplacez-les dans des messages ultérieurs de la conversation.
Préservez l’historique de la conversation. Ajoutez de nouveaux messages à la suite plutôt que de réécrire les tours précédents. La synthèse, le compactage ou la troncature du contexte peuvent modifier le préfixe et interrompre la réutilisation du cache.
Modifiez l’effort de raisonnement sans réécrire le préfixe. Avec GPT-6 Astra, ajoutez un élément d’entrée configuration_update à la suite pour modifier l’effort de raisonnement entre les 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 depuis le cache. Consultez Modifiez le raisonnement en cours de conversation pour découvrir des exemples et les limites de compatibilité.
Placez le contenu variable après le point de coupure
Avec les modèles GPT-6 et ultérieurs compatibles, ajoutez un élément d’entrée configuration_update à la suite pour modifier l’effort de raisonnement en cours de conversation tout en préservant le préfixe précédemment mis en cache. Conservez la valeur d’origine de reasoning.effort au niveau supérieur, car modifier ce paramètre peut entraîner la réécriture de certaines instructions système masquées.
La dernière mise à jour de configuration détermine l’effort de raisonnement pour les réponses suivantes. Par exemple, ajoutez cet élément à la fin du tableau input existant pour passer au niveau de raisonnement high lors des requêtes suivantes :
Lorsque les outils nécessaires à votre application varient d’une requête à l’autre, modifiez les outils pouvant être appelés tout en gardant leurs définitions stables afin de préserver les préfixes réutilisables.
Gardez les outils stables. Préservez leurs définitions, leur ordre et leurs schémas.
Désactivez l’utilisation des outils pour une requête. Définissez tool_choice sur "none" plutôt que de supprimer les définitions des outils.
Activez uniquement les outils sélectionnés. Utilisez allowed_tools pour limiter les outils pouvant être appelés tout en gardant la liste tools fournie inchangée.
Chargez les outils au besoin. Utilisez la recherche d’outils avec defer_loading: true pour réduire le nombre de tokens d’entrée consacrés aux définitions des 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 déjà présent.
Préservez 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 au fil d’une conversation selon la logique de votre application.
Avec GPT-5.6 et les modèles ultérieurs, deux paramètres déterminent l’emplacement des points de coupure du cache : 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 de coupure à la fin du dernier message éligible. Cette méthode est pratique pour les conversations à plusieurs tours qui ajoutent du contenu à la suite du contexte existant.
Choisissez soigneusement les points de coupure. Placez des marqueurs explicites à la fin du contenu stable. Utilisez le mode exclusivement explicite pour éviter les écritures en cache inutiles des suffixes variables.
Préfixe partagé mis en cache pour le point de coupure 2
Message système masqué
Outils
Message développeur · préfixe stable
Message développeur · suffixe variable A
Message utilisateur
Appel d’outil
Résultat d’outil
Message de l’assistant
Message développeur · suffixe variable B
Nouvelle entrée utilisateur A
Nouvelle entrée utilisateur B
Point de coupure 1
Point de coupure 2
Préfixe partagé mis en cache pour le point de coupure 1
Suffixe non réutilisé : aucuns frais d’écriture en cache
Nouvelles entrées utilisateur : aucuns frais d’écriture en cache
Sur GPT-5.6 et les modèles ultérieurs, utilisez prompt_cache_key lorsque vous souhaitez comptabiliser séparément l’utilisation du cache des clients, des utilisateurs ou des espaces de travail de votre application. Cela peut faciliter l’explication de l’utilisation et de la facturation des tokens mis en cache au sein de chaque groupe. La clé est facultative et n’est pas nécessaire pour optimiser la mise en cache sur ces modèles.
Choisissez comment séparer la comptabilisation de l’utilisation du cache. Attribuez une clé distincte à chaque client ou utilisateur dont l’utilisation du cache doit être comptabilisée séparément. Par exemple, support:customer_123 et support:customer_456 permettent de comptabiliser séparément l’utilisation du cache de 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 liées d’un client. Ne générez une clé distincte pour une session ou une conversation que si son utilisation du cache doit être comptabilisée séparément.
Appliquez les clés de façon cohérente. Utilisez la clé du client dans toutes ses requêtes pour comptabiliser séparément son utilisation du cache. Cela contribue également à empêcher un client de sonder les accès au cache d’autres clients.
Sur les modèles antérieurs à GPT-5.6, prompt_cache_key joue un rôle important dans l’optimisation des taux de succès des accès au 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 pour répartir le trafic sur davantage de clés.
Pour les modèles antérieurs, privilégiez la valeur "24h" pour prompt_cache_retention afin de prolonger la conservation lorsque le modèle et vos exigences de conservation des données le permettent. Consultez Durée de vie du cache pour connaître les paramètres pris en charge et les valeurs par défaut.
Si de nombreuses requêtes réutilisent les mêmes instructions développeur et définitions d’outils, mais que ce préfixe partagé reste inférieur à la longueur minimale de mise en cache du modèle, envisagez de le raccourcir ou de l’allonger avec des instructions, des exemples ou des documents de référence utiles et stables. Mesurez si la réutilisation du cache compense les tokens d’entrée supplémentaires et les éventuels frais d’écriture en cache, et vérifiez que les évaluations et le comportement restent stables.
Le graphique illustre le piège des coûts liés à la longueur minimale de mise en cache : un préfixe court non mis en cache peut coûter plus cher qu’un préfixe allongé jusqu’au nombre minimal de tokens requis pour la mise en cache.
Longueur du prompt et coût des tokens d’entrée
0
500
1,000
1,500
2,000
Longueur du préfixe réutilisable (tokens)
Pour une comparaison portant uniquement sur les coûts, soit M la longueur minimale permettant la mise en cache, L<M la longueur initiale du préfixe, r le multiplicateur du tarif de lecture du cache, w le multiplicateur du tarif d’écriture dans le cache et N le nombre total de requêtes. Supposons que le préfixe allongé comporte exactement M tokens, qu’il soit écrit une seule fois et réutilisé intégralement à chaque requête ultérieure. En équivalents de tokens d’entrée non mis en cache, conserver le préfixe initial coûte N×L, tandis que l’allonger coûte M[w+(N−1)r]. La longueur initiale pour laquelle les coûts s’équilibrent est :
Lbreak-even=M(r+Nw−r)
Allongez le préfixe lorsque L>Lbreak-even ; conserver le préfixe plus court coûte moins cher lorsque L<Lbreak-even. En cas d’égalité, les coûts sont identiques. La plus petite longueur exprimée en nombre entier de tokens pour laquelle l’allongement coûte moins cher est ⌊Lbreak-even⌋+1. À l’inverse, raccourcir un préfixe admissible à la mise en cache en dessous de M fait perdre le bénéfice du cache : avec les mêmes hypothèses, la longueur du préfixe raccourci et non mis en cache doit être inférieure à Lbreak-even pour coûter moins cher que la mise en cache de M tokens. Il n’existe pas de longueur de prompt universelle à laquelle le coût est maximal ; le seuil d’équilibre dépend de la réutilisation et des tarifs.
Par exemple, avec M=1,024, r=0.1 et w=1.25, le seuil d’équilibre est de 102.4+N1,177.6 tokens. Sur 10 requêtes, allonger un préfixe initial d’au moins 221 tokens pour atteindre 1 024 tokens coûte moins cher. À mesure que la réutilisation augmente, le seuil d’équilibre se rapproche de 102,4 tokens. Un préfixe de 103 tokens nécessite au moins 1 963 requêtes au total pour que l’allongement soit avantageux ; un préfixe de 102 tokens ou moins n’en bénéficie jamais avec 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 lecture du cache ou des écritures supplémentaires, ou encore des tarifs différents pour le modèle, 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, le nombre de tokens d’entrée, la latence et le coût effectif. Suivez le taux de succès du cache en tokens en divisant le nombre total de tokens lus depuis le cache par le nombre total de tokens d’entrée, après avoir agrégé ces deux nombres par utilisateur, espace de travail, jour ou tout autre regroupement pertinent.
Calculez le coût des tokens d’entrée. Utilisez les nombres de tokens dans response.usage et les tarifs par million de tokens du modèle.
Si vous utilisez prompt_cache_key, conservez les valeurs existantes pour maintenir une comptabilisation distincte de l’utilisation du cache par client ou 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 utilisé comme juge en un seul tour pour déterminer si une interaction terminée avec un chatbot présente des signes de satisfaction de l’utilisateur. Chaque requête utilise la même grille d’évaluation et les mêmes exemples few-shot étiquetés pour évaluer une interaction différente.
Préservation du préfixe : La grille fixe et les exemples sont placés en premier. Leur longueur cumulée est volontairement maintenue juste au-dessus de la longueur minimale permettant la mise en cache du modèle, à l’aide de contenu qui contribue à calibrer le juge. L’interaction à évaluer est placée en dernier.
Mode de mise en cache et point d’arrêt : La mise en cache exclusivement explicite est activée, avec un point d’arrêt après la grille fixe et les exemples. La conversation entre l’utilisateur et le chatbot à évaluer est placée après ce point d’arrêt et n’est pas écrite dans le cache. Cela évite de facturer une écriture dans le cache pour du contenu peu susceptible d’être réutilisé.
Un exemple de déploiement appliquant ces principes a enregistré un taux de succès du cache en tokens d’environ 70 %. Ce chiffre illustre un résultat possible. Les taux de succès maximaux réellement atteignables dépendront de votre contexte et de l’utilisation de votre application.
Requête à l’API Responses pour un juge 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-5.6-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 avec de longues instructions développeur partagées et des appels d’outils fréquents. Dans un usage typique, les utilisateurs exécutent plusieurs sessions simultanément avec l’agent et forkent souvent les fils de discussion.
Préservation du préfixe : chaque tour ajoute de nouveaux messages, appels d’outils et résultats sans réécrire le contexte antérieur. Le préfixe réutilisable s’allonge donc au fil du temps.
Clé de cache des prompts facultative : Cet exemple utilise agent_123_v1:user_456 pour comptabiliser séparément l’utilisation du cache de l’utilisateur 456, ce qui facilite l’explication de sa consommation de tokens lus depuis le cache et de sa facturation. Cela aide aussi à empêcher un utilisateur de sonder les succès du cache d’autres utilisateurs. La clé reste identique pour toutes les sessions et tous les forks de cet utilisateur avec l’agent. 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 afin que le dernier message utilisateur ou d’outil admissible fournisse un point d’arrêt.
Points d’arrêt explicites : Un point d’arrêt est ajouté après chaque résultat d’outil pour préserver les préfixes réutilisables antérieurs et améliorer l’efficacité du cache lors de la création de forks.
Un exemple de déploiement appliquant ces principes a enregistré un taux de succès du cache en tokens >90 %. Ce chiffre illustre un résultat possible. Les taux de succès maximaux réellement atteignables dépendront de votre contexte et de l’utilisation de votre application.
Requête à l’API Responses pour un agent à plusieurs tours
Ce problème est particulièrement fréquent lors de la migration de modèles antérieurs vers GPT-5.6 ou une version ultérieure, en raison du changement de comportement de la mise en cache implicite. Si des requêtes partagent un long préfixe mais ont des suffixes différents, la mise en cache de la première requête complète en mode uniquement implicite ne rend pas réutilisable le préfixe commun plus court.
Prenons des requêtes contenant chacune un message développeur statique suivi d’un message utilisateur dynamique. Une telle requête écrit dans le cache jusqu’à la fin du contenu dynamique. Si ce contenu change dans la requête suivante, celle-ci ne correspond plus au long préfixe mis en cache, et aucun point de rupture distinct ne marque la fin du contenu statique.
Pour y remédier, placez un point de rupture explicite après le contenu statique dans les deux requêtes. La première requête écrit le préfixe réutilisable dans le cache ; la suivante peut le réutiliser même si le contenu dynamique change. Cet exemple utilise le mode uniquement explicite pour éviter d’écrire le contenu dynamique dans le cache.
Avec un point de rupture après le contenu statique
Supposons que la requête 1 utilise le mode implicite et mette en cache un préfixe allant jusqu’à la fin d’un message utilisateur, puis que la requête 2 conserve ce préfixe mais passe à prompt_cache_options.mode: "explicit". Comme l’explique la section Fonctionnement de la correspondance des préfixes, la requête 2 vérifie uniquement les points de rupture explicites de sa propre entrée. Elle ne réutilisera donc pas le préfixe implicite enregistré par la requête 1, sauf si l’un de ses points de rupture 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 rupture explicite à la limite du bloc de contenu correspondant dans la requête 2, ou gardez le mode implicite activé pour que la fin du message admissible précédent reste une borne de recherche possible.
Même lorsque 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 prolonge ce même message pour qu’il contienne Content A + Content B. L’ancienne limite située après Content A se trouve désormais à l’intérieur d’un message, et non à sa fin. Comme l’explique la section Fonctionnement de la correspondance des préfixes, sans point de rupture explicite à cette limite, la requête 2 ne réutilise pas le préfixe enregistré à cet endroit.
▼ = 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] ▼
Lorsque la structure de la conversation le permet, conservez le message d’origine et ajoutez plutôt un nouveau message à la suite. Sinon, gardez le texte réutilisable dans un bloc de contenu distinct et placez un point de rupture explicite après ce bloc dans les deux requêtes.
En mode implicite, les messages développeur situés après le bloc initial de messages développeur consécutifs ne servent pas automatiquement de bornes de recherche dans le cache. Ajoutez un point de rupture explicite à la fin du message développeur réutilisable et conservez-le dans les requêtes suivantes pour qu’OpenAI puisse rechercher un préfixe correspondant dans le cache.
Un préfixe pouvant être mis en cache avec un modèle peut être trop court avec 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, répétez cette vérification au lieu de supposer que le seuil du modèle précédent s’applique toujours.
Le compactage remplace le contexte antérieur de la conversation par une représentation plus courte. Cela peut modifier le préfixe : la première requête après le compactage peut donc réutiliser une plus petite partie du cache précédent, même si la conversation reste logiquement identique.
Gardez les instructions réutilisables et les documents de référence inchangés dans la mesure du possible, puis laissez les tours suivants s’appuyer sur le contexte compacté. Comparez le coût total des entrées avant et après le compactage : réduire le nombre de tokens d’entrée peut permettre des économies même si le taux de succès du cache diminue.
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 mis en cache : des requêtes identiques ne produisent donc pas nécessairement des sorties identiques.
Non. Il n’est actuellement pas possible de vider le cache manuellement. Les entrées du cache expirent en fonction de la durée de vie du cache et des paramètres de conservation du modèle.
Oui. Les tokens d’entrée mis en cache restent pris en compte dans les limites de tokens par minute. La mise en cache des prompts ne change pas le calcul des limites de débit.