Skip to main content
Le cache de contexte Claude (Context Cache) convient à la réutilisation de longs préfixes, tels que des prompts système, des documents, des bases de code ou des historiques de conversation. Après l’ajout de cache_control à un préfixe stable, la première requête crée un cache et les requêtes suivantes peuvent lire ce cache tant qu’il n’a pas expiré. Avant de commencer, définissez votre clé API :
Les exemples de ce guide utilisent claude-sonnet-5. Consultez la description des modèles sur la plateforme pour savoir si d’autres modèles prennent en charge le cache de contexte.

Cas d’utilisation

Lorsque plusieurs requêtes contiennent de façon répétée le même contenu volumineux, vous pouvez mettre en cache un préfixe stable. Par exemple :
  • Un long prompt système
  • Une base de connaissances ou une documentation produit fixe
  • Un historique de conversation à plusieurs tours qui reste inchangé
  • Des bases de code, des définitions de tools et des instructions réutilisées
Le cache de contexte convient aux requêtes dont le contenu initial reste inchangé tandis que la question finale varie.

API Claude Messages

Cache de 5 minutes

Ajoutez cache_control au bloc de contenu à mettre en cache :
system doit être un tableau de blocs de contenu. Il est impossible d’ajouter cache_control lorsque system est une chaîne.
Si ttl est omis, la durée de validité du cache est de 5 minutes par défaut.

Cache de 1 heure

Pour utiliser un cache de 1 heure, ajoutez également l’en-tête de requête anthropic-beta et définissez ttl sur 1h :
Valeurs TTL prises en charge :

Champs d’utilisation dans la réponse

L’API Claude Messages renvoie séparément les tokens d’entrée ordinaires, d’écriture dans le cache et de lecture du cache dans usage :
Le nombre total de tokens d’entrée est calculé comme suit :
Ces trois valeurs ne se chevauchent pas. La première requête affiche généralement cache_creation_input_tokens > 0 ; lorsque vous renvoyez le même préfixe stable, cache_read_input_tokens > 0 doit apparaître.

API compatible OpenAI

Exemple de requête

Lorsque vous utilisez le cache avec /v1/chat/completions, la syntaxe de cache_control est similaire à celle de l’API Claude Messages :

Cache de 1 heure

Le format compatible OpenAI prend également en charge le cache de 1 heure. Il suffit d’ajouter l’en-tête de requête anthropic-beta et de définir ttl: "1h" dans cache_control :

content doit être un tableau

Dans le format compatible OpenAI, cache_control doit se trouver dans un bloc de contenu précis. Il ne peut pas être attaché à un message dont le contenu est une chaîne.
La syntaxe ci-dessus n’active pas le cache, mais la requête ne renvoie aucune erreur. Voici la syntaxe correcte :
Si content est une chaîne, le marqueur de cache est ignoré et le contenu est toujours traité comme une entrée ordinaire. Vérifiez les champs d’utilisation du cache dans la réponse pour confirmer que le cache a été lu.

Mise en cache des blocs de contenu user ou assistant

Vous pouvez également placer cache_control dans le bloc de contenu d’un message user ou assistant afin de mettre en cache un long document ou un préfixe de conversation à plusieurs tours :
Séparez le contenu stable et la question actuelle dans différents blocs de contenu, puis ajoutez cache_control uniquement au bloc de contenu stable.

Champs d’utilisation dans la réponse

Le format compatible OpenAI utilise des champs différents pour indiquer l’utilisation du cache :
Correspondance des champs :
Si prompt_tokens_details.cache_write_tokens vaut 0, vérifiez tout de même claude_cache_creation_5_m_tokens et claude_cache_creation_1_h_tokens. Lorsque les champs détaillés par TTL sont présents, le volume écrit dans le cache est renvoyé dans le champ correspondant.
Dans claude_cache_creation_5_m_tokens et claude_cache_creation_1_h_tokens, des traits de soulignement séparent le chiffre de l’unité. Utilisez exactement les noms de champs renvoyés dans la réponse.
L’API compatible OpenAI peut renvoyer une réponse SSE en streaming même si vous ne transmettez pas explicitement stream: true. Le client doit pouvoir analyser chat.completion.chunk. L’utilisation se trouve dans le dernier bloc de données contenant usage.

Conditions requises pour lire le cache

Le préfixe atteint la longueur minimale

Pour le modèle utilisé dans les exemples, le préfixe mis en cache doit généralement contenir au moins environ 1024 tokens. Si le préfixe est trop court, le marqueur de cache peut être ignoré sans qu’aucune erreur ne soit renvoyée.

Le préfixe reste identique octet par octet

Le texte, les espaces, les sauts de ligne et l’ordre des blocs de contenu du préfixe mis en cache doivent rester identiques. N’ajoutez pas de contenu dynamique, comme un horodatage, un ID aléatoire ou un compteur de requêtes, au préfixe stable.

La requête n’a pas déclenché un refus du modèle

Si la requête déclenche un refus du modèle, la réponse peut tout de même indiquer des tokens de création du cache, mais ce cache ne sera pas lu lors de la requête suivante. Lors du diagnostic d’un échec de lecture du cache, vérifiez également si stop_reason vaut refusal.

Le cache n’a pas expiré

La durée de validité du cache est de 5 minutes ou 1 heure et est calculée à partir du dernier accès. Une lecture du cache renouvelle sa durée de validité.

Utilisation facturée

L’utilisation liée au cache se répartit en trois catégories : Ces trois catégories ne se chevauchent pas. L’écriture dans le cache coûte généralement plus cher qu’une entrée ordinaire, tandis que la lecture du cache coûte généralement moins cher. Le cache de contexte convient donc davantage aux préfixes stables réutilisés pendant la durée TTL.

Exemple reproductible minimal

Le script suivant génère d’abord un préfixe stable suffisamment long, puis envoie deux fois la même requête. La seconde réponse doit contenir cache_read_input_tokens > 0.
Résultat attendu :

Liste de vérification pour le dépannage

Si le cache n’est pas lu, vérifiez les points suivants dans l’ordre :
  • stop_reason vaut-il refusal ?
  • Le préfixe mis en cache atteint-il le nombre minimal de tokens requis par le modèle ?
  • Les préfixes stables des deux requêtes sont-ils identiques octet par octet ?
  • Dans le format compatible OpenAI, content est-il un tableau ?
  • cache_control se trouve-t-il dans un bloc de contenu précis ?
  • Pour le cache de 1 heure, ttl: "1h" et l’en-tête anthropic-beta correspondant sont-ils tous les deux définis ?
  • Le cache a-t-il dépassé sa durée TTL ?
  • Lisez-vous les champs d’utilisation du cache correspondant à l’API utilisée ?