La mise en cache des prompts optimise votre utilisation de l'API en permettant de reprendre à partir de préfixes spécifiques dans vos prompts. Cela réduit considérablement le temps de traitement et les coûts pour les tâches répétitives ou les prompts comportant des éléments constants.
Cette fonctionnalité est éligible à la Zero Data Retention (ZDR). Lorsque votre organisation dispose d'un accord ZDR, les données envoyées via cette fonctionnalité ne sont pas stockées après le retour de la réponse de l'API.
Il existe deux façons d'activer la mise en cache des prompts :
cache_control au niveau supérieur de votre requête. Le système applique automatiquement le point de rupture de cache au dernier bloc pouvant être mis en cache et le déplace vers l'avant à mesure que les conversations s'allongent. Idéal pour les conversations multi-tours où l'historique croissant des messages doit être mis en cache automatiquement.cache_control directement sur des blocs de contenu individuels pour un contrôle précis sur ce qui est exactement mis en cache.La façon la plus simple de commencer est d'utiliser la mise en cache automatique :
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-4-8",
max_tokens=1024,
cache_control={"type": "ephemeral"},
system="You are an AI assistant tasked with analyzing literary works. Your goal is to provide insightful commentary on themes, characters, and writing style.",
messages=[
{
"role": "user",
"content": "Analyze the major themes in 'Pride and Prejudice'.",
}
],
)
print(response.usage.model_dump_json())Avec la mise en cache automatique, le système met en cache tout le contenu jusqu'au dernier bloc pouvant être mis en cache inclus. Lors des requêtes suivantes avec le même préfixe, le contenu mis en cache est réutilisé automatiquement.
Lorsque vous envoyez une requête avec la mise en cache des prompts activée :
Ceci est particulièrement utile pour :
Par défaut, le cache a une durée de vie de 5 minutes. Le cache est actualisé sans coût supplémentaire chaque fois que le contenu mis en cache est utilisé.
Si vous trouvez que 5 minutes est trop court, Anthropic propose également une durée de cache d'une heure moyennant un coût supplémentaire.
Pour plus d'informations, consultez Durée de cache d'une heure.
La mise en cache des prompts met en cache le préfixe complet
La mise en cache des prompts référence l'intégralité du prompt — tools, system et messages (dans cet ordre) jusqu'au bloc désigné par cache_control inclus.
La mise en cache des prompts introduit une nouvelle structure tarifaire. Le tableau ci-dessous indique le prix par million de tokens pour chaque modèle pris en charge :
| Modèle | Tokens d'entrée de base | Écritures en cache 5 min | Écritures en cache 1 h | Succès et actualisations du cache | Tokens de sortie |
|---|---|---|---|---|---|
| Claude Fable 5 | 10 $ / MTok | 12,50 $ / MTok | 20 $ / MTok | 1 $ / MTok | 50 $ / MTok |
| Claude Mythos 5 (disponibilité limitée) | 10 $ / MTok | 12,50 $ / MTok | 20 $ / MTok | 1 $ / MTok | 50 $ / MTok |
| Claude Opus 4.8 | 5 $ / MTok | 6,25 $ / MTok | 10 $ / MTok | 0,50 $ / MTok | 25 $ / MTok |
| Claude Opus 4.7 | 5 $ / MTok | 6,25 $ / MTok | 10 $ / MTok | 0,50 $ / MTok | 25 $ / MTok |
| Claude Opus 4.6 | 5 $ / MTok | 6,25 $ / MTok | 10 $ / MTok | 0,50 $ / MTok | 25 $ / MTok |
| Claude Opus 4.5 | 5 $ / MTok | 6,25 $ / MTok | 10 $ / MTok | 0,50 $ / MTok | 25 $ / MTok |
| Claude Opus 4.1 (déprécié) | 15 $ / MTok | 18,75 $ / MTok | 30 $ / MTok | 1,50 $ / MTok | 75 $ / MTok |
| Claude Opus 4 (déprécié) | 15 $ / MTok | 18,75 $ / MTok | 30 $ / MTok | 1,50 $ / MTok | 75 $ / MTok |
| Claude Sonnet 4.6 | 3 $ / MTok | 3,75 $ / MTok | 6 $ / MTok | 0,30 $ / MTok | 15 $ / MTok |
| Claude Sonnet 4.5 | 3 $ / MTok | 3,75 $ / MTok | 6 $ / MTok | 0,30 $ / MTok | 15 $ / MTok |
| Claude Sonnet 4 (déprécié) | 3 $ / MTok | 3,75 $ / MTok | 6 $ / MTok | 0,30 $ / MTok | 15 $ / MTok |
| Claude Haiku 4.5 | 1 $ / MTok | 1,25 $ / MTok | 2 $ / MTok | 0,10 $ / MTok | 5 $ / MTok |
| Claude Haiku 3.5 (retiré, sauf sur Bedrock et Vertex AI) | 0,80 $ / MTok | 1 $ / MTok | 1,60 $ / MTok | 0,08 $ / MTok | 4 $ / MTok |
Le tableau ci-dessus reflète les multiplicateurs de tarification suivants pour la mise en cache des prompts :
Ces multiplicateurs se cumulent avec d'autres modificateurs de tarification tels que la remise de l'API Batch et la résidence des données. Consultez la tarification pour tous les détails.
La mise en cache des prompts (automatique et explicite) est prise en charge sur tous les modèles Claude actifs.
La mise en cache automatique est la façon la plus simple d'activer la mise en cache des prompts. Au lieu de placer cache_control sur des blocs de contenu individuels, ajoutez un seul champ cache_control au niveau supérieur du corps de votre requête. Le système applique automatiquement le point de rupture de cache au dernier bloc pouvant être mis en cache.
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-4-8",
max_tokens=1024,
cache_control={"type": "ephemeral"},
system="You are a helpful assistant that remembers our conversation.",
messages=[
{"role": "user", "content": "My name is Alex. I work on machine learning."},
{
"role": "assistant",
"content": "Nice to meet you, Alex! How can I help with your ML work today?",
},
{"role": "user", "content": "What did I say I work on?"},
],
)
print(response.usage.model_dump_json())Avec la mise en cache automatique, le point de cache avance automatiquement à mesure que les conversations s'allongent. Chaque nouvelle requête met en cache tout le contenu jusqu'au dernier bloc pouvant être mis en cache, et le contenu précédent est lu depuis le cache.
| Requête | Contenu | Comportement du cache |
|---|---|---|
| Requête 1 | System + User(1) + Asst(1) + User(2) ◀ cache | Tout est écrit dans le cache |
| Requête 2 | System + User(1) + Asst(1) + User(2) + Asst(2) + User(3) ◀ cache | De System à User(2) lu depuis le cache ; Asst(2) + User(3) écrits dans le cache |
| Requête 3 | System + User(1) + Asst(1) + User(2) + Asst(2) + User(3) + Asst(3) + User(4) ◀ cache | De System à User(3) lu depuis le cache ; Asst(3) + User(4) écrits dans le cache |
Le point de rupture de cache se déplace automatiquement vers le dernier bloc pouvant être mis en cache dans chaque requête, vous n'avez donc pas besoin de mettre à jour les marqueurs cache_control à mesure que la conversation s'allonge.
Par défaut, la mise en cache automatique utilise un « TTL » (durée de vie) de 5 minutes. Vous pouvez spécifier un TTL d'une heure à 2 fois le prix de base des tokens d'entrée :
{ "cache_control": { "type": "ephemeral", "ttl": "1h" } }La mise en cache automatique est compatible avec les points de rupture de cache explicites. Lorsqu'ils sont utilisés ensemble, le point de rupture de cache automatique utilise l'un des 4 emplacements de points de rupture disponibles.
Cela vous permet de combiner les deux approches. Par exemple, utilisez un point de rupture explicite pour mettre en cache votre invite système, tandis que la mise en cache automatique gère la conversation :
{
"model": "claude-opus-4-8",
"max_tokens": 1024,
"cache_control": { "type": "ephemeral" },
"system": [
{
"type": "text",
"text": "You are a helpful assistant.",
"cache_control": { "type": "ephemeral" }
}
],
"messages": [{ "role": "user", "content": "What are the key terms?" }]
}La mise en cache automatique utilise la même infrastructure de mise en cache sous-jacente. La tarification, les seuils minimaux de tokens, les exigences d'ordre du contexte et la fenêtre de recherche arrière de 20 blocs s'appliquent tous de la même manière qu'avec les points de rupture explicites.
cache_control explicite avec le même TTL, la mise en cache automatique n'a aucun effet.cache_control explicite avec un TTL différent, l'API renvoie une erreur 400.La mise en cache automatique est disponible sur l'API Claude, Claude Platform sur AWS et Microsoft Foundry (bêta). Bedrock et Vertex AI ne prennent pas en charge la mise en cache automatique.
Pour un contrôle plus précis sur la mise en cache, vous pouvez placer cache_control directement sur des blocs de contenu individuels. Ceci est utile lorsque vous devez mettre en cache différentes sections qui changent à des fréquences différentes, ou lorsque vous avez besoin d'un contrôle précis sur ce qui est exactement mis en cache.
Placez le contenu statique (définitions d'outils, instructions système, contexte, exemples) au début de votre prompt. Marquez la fin du contenu réutilisable pour la mise en cache à l'aide du paramètre cache_control.
Les préfixes de cache sont créés dans l'ordre suivant : tools, system, puis messages. Cet ordre forme une hiérarchie où chaque niveau s'appuie sur les précédents.
Vous pouvez utiliser un seul point de rupture de cache à la fin de votre contenu statique, et le système trouvera automatiquement le préfixe le plus long qu'une requête antérieure a déjà écrit dans le cache. Comprendre ce fonctionnement vous aide à optimiser votre stratégie de mise en cache.
Trois principes fondamentaux :
Les écritures de cache se produisent uniquement à votre point de rupture. Marquer un bloc avec cache_control écrit exactement une entrée de cache : un hachage du préfixe se terminant à ce bloc. Le système n'écrit pas d'entrées pour une position antérieure. Comme le hachage est cumulatif, couvrant tout jusqu'au point de rupture inclus, modifier n'importe quel bloc au niveau du point de rupture ou avant celui-ci produit un hachage différent lors de la requête suivante.
Les lectures de cache recherchent en arrière les entrées que des requêtes antérieures ont écrites. À chaque requête, le système calcule le hachage du préfixe à votre point de rupture et vérifie s'il existe une entrée de cache correspondante. Si aucune n'existe, il remonte d'un bloc à la fois, vérifiant si le hachage du préfixe à chaque position antérieure correspond à quelque chose déjà présent dans le cache. Il recherche des écritures antérieures, pas du contenu stable.
La fenêtre de recherche arrière est de 20 blocs. Le système vérifie au maximum 20 positions par point de rupture, en comptant le point de rupture lui-même comme la première. Si le système ne trouve aucune entrée correspondante dans cette fenêtre, la vérification s'arrête (ou reprend à partir du point de rupture explicite suivant, le cas échéant).
Exemple : recherche arrière dans une conversation croissante
Vous ajoutez de nouveaux blocs à chaque tour et définissez cache_control sur le dernier bloc de chaque requête :
Erreur courante : point de rupture sur du contenu qui change à chaque requête
Votre prompt comporte un grand contexte système statique (blocs 1 à 5) suivi d'un bloc par requête contenant un horodatage et le message utilisateur (bloc 6). Vous définissez cache_control sur le bloc 6 :
La recherche arrière ne trouve pas de contenu stable derrière votre point de rupture pour le mettre en cache. Elle trouve des entrées que des requêtes antérieures ont déjà écrites, et les écritures se produisent uniquement aux points de rupture. Déplacez cache_control vers le bloc 5, le dernier bloc qui reste identique entre les requêtes, et chaque requête suivante lira le préfixe mis en cache. La mise en cache automatique tombe dans le même piège : elle place le point de rupture sur le dernier bloc pouvant être mis en cache, qui dans cette structure est celui qui change à chaque requête, donc utilisez plutôt un point de rupture explicite sur le bloc 5.
Point clé à retenir : placez cache_control sur le dernier bloc dont le préfixe est identique entre les requêtes que vous souhaitez faire partager un cache. Dans une conversation croissante, le dernier bloc fonctionne tant que chaque tour ajoute moins de 20 blocs : le contenu antérieur ne change jamais, donc la recherche arrière de la requête suivante trouve l'écriture précédente. Pour un prompt avec un suffixe variable (horodatages, contexte par requête, message entrant), placez le point de rupture à la fin du préfixe statique, pas sur le bloc variable.
Vous pouvez définir jusqu'à 4 points de rupture de cache si vous souhaitez :
Limitation importante : la recherche arrière ne peut trouver que des entrées que des requêtes antérieures ont déjà écrites. Si une conversation croissante pousse votre point de rupture à 20 blocs ou plus au-delà de la dernière écriture, la fenêtre de recherche arrière la manque. Ajoutez un deuxième point de rupture plus proche de cette position dès le départ afin qu'une écriture s'y accumule avant que vous en ayez besoin.
Les points de rupture de cache eux-mêmes n'ajoutent aucun coût. Vous êtes uniquement facturé pour :
Ajouter plus de points de rupture cache_control n'augmente pas vos coûts — vous payez toujours le même montant en fonction du contenu réellement mis en cache et lu. Les points de rupture vous donnent simplement le contrôle sur les sections qui peuvent être mises en cache indépendamment.
Sur l'API Claude, Claude Platform sur AWS, Vertex AI et Microsoft Foundry (bêta), la longueur minimale de prompt pouvant être mise en cache est de :
La disponibilité des modèles varie selon la plateforme, tout comme le minimum pour les modèles récemment publiés : sur Amazon Bedrock, la longueur minimale de prompt pouvant être mise en cache pour Claude Fable 5 et Claude Mythos 5 est de 1 024 tokens.
Les prompts plus courts ne peuvent pas être mis en cache, même s'ils sont marqués avec cache_control. Toute requête visant à mettre en cache moins que ce nombre de tokens sera traitée sans mise en cache, et aucune erreur n'est renvoyée. Pour vérifier si un prompt a été mis en cache, consultez les champs d'utilisation de la réponse : si cache_creation_input_tokens et cache_read_input_tokens sont tous deux à 0, le prompt n'a pas été mis en cache (probablement parce qu'il ne respectait pas l'exigence de longueur minimale).
Si votre prompt est juste en dessous du minimum pour votre modèle et votre plateforme, étendre le contenu mis en cache pour atteindre le seuil est souvent rentable. Les lectures de cache coûtent nettement moins cher que les tokens d'entrée non mis en cache, donc atteindre le minimum peut réduire les coûts pour les prompts fréquemment réutilisés.
Bedrock est une plateforme exploitée par AWS. Sur Bedrock, consultez la documentation sur la mise en cache des prompts de Bedrock pour connaître les minimums par modèle, le comportement en cas d'échec et les noms des champs d'utilisation qui s'appliquent.
Pour les requêtes concurrentes, notez qu'une entrée de cache ne devient disponible qu'après le début de la première réponse. Si vous avez besoin de correspondances de cache pour des requêtes parallèles, attendez la première réponse avant d'envoyer les requêtes suivantes.
Actuellement, « ephemeral » est le seul type de cache pris en charge, qui a par défaut une durée de vie de 5 minutes.
La plupart des blocs de la requête peuvent être mis en cache. Cela inclut :
toolssystemmessages.content, pour les tours utilisateur et assistantmessages.content, dans les tours utilisateurmessages.content, dans les tours utilisateur et assistantChacun de ces éléments peut être mis en cache, soit automatiquement, soit en les marquant avec cache_control.
Bien que la plupart des blocs de requête puissent être mis en cache, il existe quelques exceptions :
Les blocs de réflexion ne peuvent pas être mis en cache directement avec cache_control. Cependant, les blocs de réflexion PEUVENT être mis en cache avec d'autres contenus lorsqu'ils apparaissent dans des tours assistant précédents. Lorsqu'ils sont mis en cache de cette manière, ils COMPTENT comme des tokens d'entrée lorsqu'ils sont lus depuis le cache.
Les sous-blocs de contenu (comme les citations) eux-mêmes ne peuvent pas être mis en cache directement. Mettez plutôt en cache le bloc de niveau supérieur.
Dans le cas des citations, les blocs de contenu de document de niveau supérieur qui servent de matériel source pour les citations peuvent être mis en cache. Cela vous permet d'utiliser efficacement la mise en cache des prompts avec les citations en mettant en cache les documents que les citations référenceront.
Les blocs de texte vides ne peuvent pas être mis en cache.
Les modifications apportées au contenu mis en cache peuvent invalider une partie ou la totalité du cache.
Comme décrit dans Structurer votre prompt, le cache suit la hiérarchie : tools → system → messages. Les modifications à chaque niveau invalident ce niveau et tous les niveaux suivants.
Le tableau suivant montre quelles parties du cache sont invalidées par différents types de modifications. ✘ indique que le cache est invalidé, tandis que ✓ indique que le cache reste valide.
| Ce qui change | Cache des outils | Cache système | Cache des messages | Impact |
|---|---|---|---|---|
| Définitions d'outils | ✘ | ✘ | ✘ | Modifier les définitions d'outils (noms, descriptions, paramètres) invalide l'intégralité du cache |
| Activation/désactivation de la recherche web | ✓ | ✘ | ✘ | Activer/désactiver la recherche web modifie l'invite système |
| Activation/désactivation des citations | ✓ | ✘ | ✘ | Activer/désactiver les citations modifie l'invite système |
| Paramètre de vitesse | ✓ | ✘ | ✘ | Basculer entre speed: "fast" et la vitesse standard invalide les caches système et messages |
| Choix d'outil | ✓ | ✓ | ✘ | Les modifications du paramètre tool_choice n'affectent que les blocs de messages |
| Images | ✓ | ✓ | ✘ | Ajouter/supprimer des images n'importe où dans le prompt affecte les blocs de messages |
| Paramètres de réflexion | ✓ | ✓ | ✘ | Les modifications des paramètres de réflexion étendue (activer/désactiver, budget) affectent les blocs de messages |
| Résultats non liés aux outils transmis aux requêtes de réflexion étendue | ✓ | ✓ | Selon le modèle | Sur Opus 4.5+ et Sonnet 4.6+, les blocs de réflexion sont préservés par défaut, donc le cache reste valide (✓). Sur les modèles Opus/Sonnet antérieurs et tous les modèles Haiku, tous les blocs de réflexion précédemment mis en cache sont supprimés du contexte, et tous les messages qui suivent ces blocs de réflexion sont supprimés du cache (✘). Pour plus de détails, consultez Mise en cache avec les blocs de réflexion. |
Sur Claude Opus 4.8, vous pouvez ajouter une nouvelle instruction système en cours de conversation sans invalider les caches système ou messages. Ajoutez un message {"role": "system"} à messages au lieu de modifier le champ system de niveau supérieur, afin que le préfixe mis en cache reste inchangé. Consultez Messages système en cours de conversation.
Surveillez les performances du cache à l'aide de ces champs de réponse de l'API, dans usage dans la réponse (ou l'événement message_start si vous utilisez le streaming) :
cache_creation_input_tokens : nombre de tokens écrits dans le cache lors de la création d'une nouvelle entrée.cache_read_input_tokens : nombre de tokens récupérés depuis le cache pour cette requête.input_tokens : nombre de tokens d'entrée qui n'ont pas été lus depuis le cache ni utilisés pour créer un cache (c'est-à-dire les tokens après le dernier point de rupture de cache).Comprendre la répartition des tokens
Le champ input_tokens représente uniquement les tokens qui viennent après le dernier point de rupture de cache dans votre requête — pas tous les tokens d'entrée que vous avez envoyés.
Pour calculer le total des tokens d'entrée :
total_input_tokens = cache_read_input_tokens + cache_creation_input_tokens + input_tokensExplication spatiale :
cache_read_input_tokens = tokens avant le point de rupture déjà mis en cache (lectures)cache_creation_input_tokens = tokens avant le point de rupture en cours de mise en cache (écritures)input_tokens = tokens après votre dernier point de rupture (non éligibles au cache)Exemple : si vous avez une requête avec 100 000 tokens de contenu mis en cache (lus depuis le cache), 0 token de nouveau contenu en cours de mise en cache et 50 tokens dans votre message utilisateur (après le point de rupture de cache) :
cache_read_input_tokens : 100 000cache_creation_input_tokens : 0input_tokens : 50Ceci est important pour comprendre à la fois les coûts et les limites de débit, car input_tokens sera généralement beaucoup plus petit que votre total d'entrée lorsque vous utilisez efficacement la mise en cache.
Lorsque vous utilisez la réflexion étendue avec la mise en cache des prompts, les blocs de réflexion ont un comportement particulier :
Mise en cache automatique avec d'autres contenus : bien que les blocs de réflexion ne puissent pas être explicitement marqués avec cache_control, ils sont mis en cache dans le cadre du contenu de la requête lorsque vous effectuez des appels API ultérieurs avec des résultats d'outils. Cela se produit couramment lors de l'utilisation d'outils lorsque vous renvoyez des blocs de réflexion pour poursuivre la conversation.
Comptage des tokens d'entrée : lorsque les blocs de réflexion sont lus depuis le cache, ils comptent comme des tokens d'entrée dans vos métriques d'utilisation. Ceci est important pour le calcul des coûts et la budgétisation des tokens.
Schémas d'invalidation du cache :
cache_control explicitesPour plus de détails sur l'invalidation du cache, consultez Ce qui invalide le cache.
Exemple avec utilisation d'outils :
Request 1: User: "What's the weather in Paris?"
Response: [thinking_block_1] + [tool_use block 1]
Request 2:
User: ["What's the weather in Paris?"],
Assistant: [thinking_block_1] + [tool_use block 1],
User: [tool_result_1, cache=True]
Response: [thinking_block_2] + [text block 2]
# Request 2 caches its request content (not the response)
# The cache includes: user message, thinking_block_1, tool_use block 1, and tool_result_1
Request 3:
User: ["What's the weather in Paris?"],
Assistant: [thinking_block_1] + [tool_use block 1],
User: [tool_result_1, cache=True],
Assistant: [thinking_block_2] + [text block 2],
User: [Text response, cache=True]
# On earlier Opus/Sonnet and all Haiku models, non-tool-result user block causes prior thinking blocks to be stripped; on Opus 4.5+/Sonnet 4.6+ they are keptSur les modèles Opus/Sonnet antérieurs et tous les modèles Haiku, tous les blocs de réflexion précédents sont supprimés du contexte à ce stade. Sur Opus 4.5+ et Sonnet 4.6+, les blocs de réflexion antérieurs sont conservés par défaut et restent partie intégrante du préfixe mis en cache.
Pour des informations plus détaillées, consultez la documentation sur la réflexion étendue.
À compter du 5 février 2026, la mise en cache des prompts utilise une isolation au niveau de l'espace de travail au lieu d'une isolation au niveau de l'organisation. Les caches sont isolés par espace de travail, garantissant la séparation des données entre les espaces de travail au sein d'une même organisation. Ceci s'applique à l'API Claude, à Claude Platform sur AWS et à Microsoft Foundry (bêta) ; Bedrock et Vertex AI conservent une isolation du cache au niveau de l'organisation. Si vous utilisez plusieurs espaces de travail, révisez votre stratégie de mise en cache pour tenir compte de cette différence.
Isolation par organisation et espace de travail : les caches sont isolés entre les organisations. Différentes organisations ne partagent jamais de caches, même si elles utilisent des prompts identiques. À compter du 5 février 2026, les caches sont également isolés par espace de travail au sein d'une organisation sur l'API Claude, Claude Platform sur AWS et Microsoft Foundry (bêta) ; Bedrock et Vertex AI continuent d'utiliser uniquement l'isolation au niveau de l'organisation.
Correspondance exacte : les correspondances de cache nécessitent des segments de prompt 100 % identiques, y compris tout le texte et les images jusqu'au bloc marqué avec cache control inclus.
Génération de tokens de sortie : la mise en cache des prompts n'a aucun effet sur la génération de tokens de sortie. La réponse que vous recevez est identique à celle que vous obtiendriez si la mise en cache des prompts n'était pas utilisée.
Pour optimiser les performances de la mise en cache des prompts :
Adaptez votre stratégie de mise en cache des prompts à votre scénario :
Si vous rencontrez un comportement inattendu :
Les diagnostics de cache (bêta) permettent à l'API de comparer des requêtes consécutives et de signaler exactement où le préfixe du prompt a divergé, ce qui gère automatiquement plusieurs des étapes de cette liste.
cache_control sont aux mêmes emplacementstool_choice et l'utilisation d'images restent cohérents entre les appelstool_use ont un ordre stable, car certains langages (par exemple, Swift, Go) randomisent l'ordre des clés lors de la conversion JSON, ce qui casse les cachesLes modifications de tool_choice ou la présence/absence d'images n'importe où dans le prompt invalideront le cache, nécessitant la création d'une nouvelle entrée de cache. Pour plus de détails sur l'invalidation du cache, consultez Ce qui invalide le cache.
Si vous trouvez que 5 minutes est trop court, Anthropic propose également une durée de cache d'une heure moyennant un coût supplémentaire.
La durée de cache d'une heure est disponible sur l'API Claude, Claude Platform sur AWS, Amazon Bedrock, Amazon Bedrock (ancienne version), Vertex AI et Microsoft Foundry (bêta).
Pour utiliser le cache étendu, incluez ttl dans la définition cache_control comme ceci :
"cache_control": {
"type": "ephemeral",
"ttl": "1h"
}La réponse inclura des informations détaillées sur le cache comme suit :
{
"usage": {
"input_tokens": 2048,
"cache_read_input_tokens": 1800,
"cache_creation_input_tokens": 248,
"output_tokens": 503,
"cache_creation": {
"ephemeral_5m_input_tokens": 148,
"ephemeral_1h_input_tokens": 100
}
}
}Notez que le champ cache_creation_input_tokens actuel est égal à la somme des valeurs dans l'objet cache_creation.
Si vous avez des prompts utilisés à une cadence régulière (c'est-à-dire des invites système utilisées plus fréquemment que toutes les 5 minutes), continuez à utiliser le cache de 5 minutes, car celui-ci continuera d'être actualisé sans frais supplémentaires.
Le cache d'une heure est le mieux adapté aux scénarios suivants :
Les caches de 5 minutes et d'une heure se comportent de la même manière en ce qui concerne la latence. Vous constaterez généralement une amélioration du temps jusqu'au premier token pour les documents longs.
Vous pouvez utiliser à la fois des contrôles de cache d'une heure et de 5 minutes dans la même requête, mais avec une contrainte importante : les entrées de cache avec un TTL plus long doivent apparaître avant les TTL plus courts (c'est-à-dire qu'une entrée de cache d'une heure doit apparaître avant toute entrée de cache de 5 minutes).
Lors du mélange de TTL, l'API détermine trois emplacements de facturation dans votre prompt :
A : le nombre de tokens à la correspondance de cache la plus élevée (ou 0 s'il n'y a aucune correspondance).B : le nombre de tokens au bloc cache_control d'une heure le plus élevé après A (ou égal à A s'il n'en existe aucun).C : le nombre de tokens au dernier bloc cache_control.Si B et/ou C sont supérieurs à A, ils seront nécessairement des échecs de cache, car A est la correspondance de cache la plus élevée.
Vous serez facturé pour :
A.(B - A).(C - B).Voici 3 exemples. Ceci illustre les tokens d'entrée de 3 requêtes, chacune ayant des correspondances et des échecs de cache différents. Chacune a une tarification calculée différente, affichée dans les cases colorées, en conséquence.
Le préchauffage du cache vous permet de charger votre invite système ou vos définitions d'outils dans le cache de prompts avant qu'un utilisateur ne déclenche une requête réelle. Cela élimine la pénalité de latence due à l'échec de cache lors de la première interaction utilisateur, réduisant le « time-to-first-token » (temps jusqu'au premier token), ou TTFT, pour les applications sensibles à la latence.
Définissez max_tokens: 0 dans votre requête. L'API lit votre prompt dans le modèle et écrit le cache à tout point de rupture cache_control, puis retourne immédiatement sans générer de sortie. La réponse a un tableau content vide, stop_reason: "max_tokens" et un bloc usage entièrement renseigné.
Placez le point de rupture cache_control sur le dernier bloc partagé avec la requête de suivi (généralement votre invite système ou vos définitions d'outils), pas sur le message utilisateur de substitution. Sinon, l'entrée de cache est associée au message de substitution et la requête de suivi ne la trouvera pas. Cela signifie utiliser un point de rupture de cache explicite plutôt que la mise en cache automatique, car la mise en cache automatique place le point de rupture sur le dernier bloc, qui est ici le message de substitution. Le message utilisateur de substitution peut être n'importe quelle chaîne avec du contenu autre que des espaces (les exemples ici utilisent "warmup") ; son contenu est lu dans le modèle mais ne reçoit jamais de réponse.
Une requête de préchauffage entraîne des frais d'écriture de cache si le préfixe n'est pas déjà mis en cache, comme toute autre requête. Vérifiez usage.cache_creation_input_tokens dans la réponse pour confirmer qu'une écriture a eu lieu. Aucun token de sortie n'est facturé.
client = anthropic.Anthropic()
# Lancez ceci avant l'arrivée des utilisateurs pour préchauffer le cache partagé de l'invite système.
prewarm = client.messages.create(
model="claude-opus-4-8",
max_tokens=0,
system=[
{
"type": "text",
"text": "You are an expert software engineer with deep knowledge of distributed systems...",
"cache_control": {"type": "ephemeral"},
}
],
messages=[{"role": "user", "content": "warmup"}],
)
print(prewarm.stop_reason) # "max_tokens"
print(prewarm.content) # []
print(prewarm.usage)L'API renvoie un tableau content vide :
{
"id": "msg_01XFDUDYJgAACzvnptvVoYEL",
"type": "message",
"role": "assistant",
"content": [],
"model": "claude-opus-4-8",
"stop_reason": "max_tokens",
"stop_sequence": null,
"usage": {
"input_tokens": 8,
"cache_creation_input_tokens": 5120,
"cache_read_input_tokens": 0,
"cache_creation": {
"ephemeral_5m_input_tokens": 5120,
"ephemeral_1h_input_tokens": 0
},
"iterations": [
{
"input_tokens": 8,
"output_tokens": 0,
"cache_read_input_tokens": 0,
"cache_creation_input_tokens": 5120,
"cache_creation": {
"ephemeral_5m_input_tokens": 5120,
"ephemeral_1h_input_tokens": 0
},
"type": "message"
}
],
"output_tokens": 0,
"service_tier": "standard",
"inference_geo": "global"
}
}Lancez une requête de préchauffage au démarrage de votre application (ou à un intervalle planifié), puis envoyez les requêtes utilisateur réelles une fois le préchauffage terminé :
client = anthropic.Anthropic()
SYSTEM_PROMPT = [
{
"type": "text",
"text": "You are an expert software engineer with deep knowledge of distributed systems...",
"cache_control": {"type": "ephemeral"},
}
]
def prewarm_cache() -> None:
"""Call this at application startup or on a scheduled interval."""
client.messages.create(
model="claude-opus-4-8",
max_tokens=0,
system=SYSTEM_PROMPT,
messages=[{"role": "user", "content": "warmup"}],
)
def respond(user_message: str) -> anthropic.types.Message:
"""The real user request; benefits from a warm cache."""
return client.messages.create(
model="claude-opus-4-8",
max_tokens=1024,
system=SYSTEM_PROMPT,
messages=[{"role": "user", "content": user_message}],
)
# Préchauffez le cache avant l'arrivée de tout trafic utilisateur.
prewarm_cache()
# Plus tard, lorsque l'utilisateur envoie un message, le préfixe de l'invite système est déjà mis en cache.
response = respond("How do I implement a binary search tree?")
print(response.content[0].text)Gardez à l'esprit que le TTL du cache s'applique toujours. Pour le cache par défaut de 5 minutes, envoyez une nouvelle requête de préchauffage au moins toutes les 5 minutes pour maintenir le cache actif. Pour des intervalles plus longs entre les requêtes utilisateur, utilisez plutôt la durée de cache d'une heure.
Une requête avec max_tokens: 0 est rejetée avec une erreur invalid_request_error si l'un des paramètres suivants est défini, car chacun implique une sortie qu'un budget de zéro token ne peut pas produire :
stream: truethinking.type: "enabled")output_config.format)tool_choice avec {"type": "tool", ...} ou {"type": "any"}max_tokens: 0 est également rejeté dans une requête Message Batches. Le préchauffage cible le délai avant le premier token, ce qui ne s'applique pas au traitement par lots, et une entrée de cache écrite pendant le traitement par lots expirerait probablement avant l'exécution de la requête suivante.
Avant que max_tokens: 0 ne soit disponible, certaines applications utilisaient des appels de préchauffage avec max_tokens: 1 pour obtenir le même effet. L'approche max_tokens: 0 est préférable : aucune sortie n'est produite, il n'y a donc pas de réponse d'un seul token à ignorer, aucun token de sortie n'est facturé, et l'intention de la requête est sans ambiguïté.
Pour vous aider à démarrer avec la mise en cache des prompts, le cookbook sur la mise en cache des prompts fournit des exemples détaillés et des bonnes pratiques.
Les extraits de code suivants illustrent divers modèles de mise en cache des prompts. Ces exemples montrent comment implémenter la mise en cache dans différents scénarios, vous aidant à comprendre les applications pratiques de cette fonctionnalité :
La mise en cache des prompts (automatique et explicite) est éligible au ZDR. Anthropic ne stocke pas le texte brut de vos prompts ni les réponses de Claude.
Les représentations de cache KV (clé-valeur) et les hachages cryptographiques du contenu mis en cache sont conservés uniquement en mémoire et ne sont pas stockés de manière persistante. Les entrées mises en cache ont une durée de vie minimale de 5 minutes (standard) ou de 1 heure (étendue), après quoi elles sont supprimées rapidement, bien que pas immédiatement. Les entrées de cache sont isolées entre les organisations et, sur l'API Claude, Claude Platform sur AWS et Microsoft Foundry (bêta), entre les espaces de travail au sein d'une organisation.
Pour l'éligibilité ZDR sur l'ensemble des fonctionnalités, consultez API et conservation des données.
Was this page helpful?