Blokby

Blog

Prompt caching Claude API : 90 % de coût en moins

Active une seule clé cache_control dans l'API Anthropic et le coût des tokens d'entrée tombe à 0,10x sur les hits. Comment ça marche, quand c'est rentable, quand ça te coûte plus cher.

Tu envoies le même system prompt à Claude 200 fois par jour. À chaque tour, le modèle relit tout. Et tu repaies tout. Le prompt caching d'Anthropic, c'est une seule clé à ajouter dans la requête, aucune réécriture du code, et le coût des tokens d'entrée s'effondre dès que tu réutilises un même bloc.

Pourquoi tu paies trop cher aujourd'hui

Tu utilises Claude pour un assistant qui répond à des questions sur ta documentation interne. Ton system prompt fait 4 000 tokens (instructions + extraits de doc). À chaque conversation, à chaque tour de cette conversation, l'API relit ces 4 000 tokens en input. Le tarif est facturé sur ces tokens même s'ils n'ont pas bougé.

Sur 200 requêtes par jour, sur un mois, sur plusieurs utilisateurs en parallèle, la facture monte vite. Le pire, c'est que ce contexte ne change pas. Tu paies l'inertie.

Activer le cache : une seule clé

Tu prends ta requête actuelle, tu rajoutes cache_control sur le bloc qui doit être caché. C'est tout.

python
import anthropic

client = anthropic.Anthropic()

response = client.messages.create(
    model="claude-opus-4-7",
    max_tokens=1024,
    system=[
        {
            "type": "text",
            "text": LONG_SYSTEM_PROMPT,
            "cache_control": {"type": "ephemeral"},
        }
    ],
    messages=[
        {"role": "user", "content": "Question de l'utilisateur"}
    ],
)

Le bloc system (ici un long prompt + extraits de documentation) devient cachable. Au premier appel, Anthropic écrit le cache et te facture 1,25x ce tarif. Au deuxième appel sous 5 minutes avec le même bloc, c'est un hit : 0,10x.

Tu peux faire pareil sur les tools et sur des blocs user qui ne bougent pas.

Le gain réel sur les hits

Tarif tokens d'entréeSans cacheAvec cache (hit)
Multiplicateur1,00x0,10x
Économieaucune90 %
Tu repaies à chaque tourouinon, dans la fenêtre TTL

Concrètement, si ton system prompt fait 4 000 tokens à 5 $/million sur Opus 4.7, sans cache c'est 0,02 $ par appel. Avec un hit caché, c'est 0,002 $. Sur 200 requêtes par jour, tu passes de 4 $/jour à 0,40 $/jour pour ce seul bloc. Et c'est avant de compter les hits sur les tools et le contexte conversationnel.

0,10x
tarif sur hits
5 min
TTL ephemeral
1024
tokens minimum
1,25x
premier hit (écriture)

Le piège du premier hit

Le piège que la plupart des intégrations rate : l'écriture du cache est facturée 25 % plus cher que le tarif standard. Donc le premier appel coûte 1,25x au lieu de 1,00x. C'est seulement à partir du deuxième hit dans les 5 minutes que tu commences à être rentable.

Premier appel : écriture du cache

Tu paies 1,25x. Le bloc est écrit dans le cache d'Anthropic.

Deuxième appel sous 5 min : premier hit

Tu paies 0,10x. Le total cumulé sur 2 appels est 1,35x, encore plus cher que 2 appels sans cache (2,00x... attends, on est déjà gagnant).

Troisième appel et au-delà : hits francs

À 0,10x chacun, chaque hit supplémentaire creuse l'écart. Sur 10 appels en 5 min, tu paies environ 2,15x au lieu de 10,00x.

Quand c'est rentable, quand c'est perdant

Cas d'usageCaching utilePourquoi
Assistant doc interne avec 50+ users actifsouiHits constants en parallèle, fenêtre TTL toujours active
Chatbot support avec contexte longouiMêmes 3 000+ tokens de contexte par conversation
Génération batch nocturneouiTu envoies 1000 requêtes d'affilée
Script ponctuel, 1 appel par heurenonLe TTL de 5 min expire entre chaque appel
Prompts courts (sous 1024 tokens)nonL'API ignore cache_control sous le seuil

Mesurer le hit ratio en production

L'API renvoie dans la réponse les compteurs cache_creation_input_tokens et cache_read_input_tokens. Tu peux logger les deux et calculer ton hit ratio en continu.

python
usage = response.usage
hits = usage.cache_read_input_tokens
writes = usage.cache_creation_input_tokens
total_in = usage.input_tokens + hits + writes

hit_ratio = hits / total_in if total_in else 0
print(f"Hit ratio: {hit_ratio:.0%}")

Au-dessus de 30-40 % de hits, tu es nettement gagnant. En dessous, tu approches le break-even, et c'est un signal pour reconsidérer ton pattern de trafic ou désactiver le cache sur certains blocs.

Un hit ratio inférieur à 10 % en production veut dire que le cache te coûte plus cher qu'il ne te rapporte. Désactive sur les blocs concernés.

Les pièges côté code

Le bloc doit être strictement identique à l'octet près

Un seul caractère différent dans le contenu (espace, ordre des champs JSON dans un tool, etc.) et c'est un cache miss. Si tu génères dynamiquement ton system prompt, fixe l'ordre des sections et stabilise les whitespaces.

Le cache est partagé par projet, pas par utilisateur

Deux requêtes du même projet API qui envoient le même bloc cachable hitent le même cache. C'est ce qui rend le caching massivement rentable sur des assistants multi-users : un seul cache pour tous.

Mode ephemeral vs 1h

Le mode ephemeral a un TTL de 5 minutes. Anthropic propose aussi un mode 1h qui étend le TTL à une heure mais avec un coût d'écriture supérieur. Pour la plupart des charges interactives, ephemeral suffit largement.

Questions fréquentes

  • Le caching change-t-il la qualité des réponses ?

    Non, strictement aucun impact sur la sortie du modèle. Tu obtiens exactement la même réponse, plus vite et moins cher. Anthropic ne re-traite pas les tokens cachés, mais le modèle les voit comme s'ils étaient envoyés normalement.

  • Combien de blocs cache_control je peux poser dans une requête ?

    Jusqu'à 4 par requête. Tu peux donc cacher séparément ton system prompt, tes tools, un bloc de doc dans messages, et un autre encore plus loin. Anthropic les hit indépendamment.

  • Le cache compte-t-il dans la fenêtre de contexte ?

    Oui. Les tokens cachés occupent toujours la fenêtre du modèle. Le caching ne te donne pas plus de contexte, juste un coût plus bas sur les tokens d'entrée que tu envoies.

  • Y a-t-il un risque que le cache soit évincé avant 5 minutes ?

    En pratique sur un projet actif, non. Anthropic décrit le mode ephemeral comme un cache best-effort, mais à l'usage il tient bien la fenêtre TTL. Sur un trafic très sporadique, ça peut arriver.

Pour aller plus loin

Prompt caching, doc Anthropic
Référence officielle : syntaxe complète de cache_control, modes ephemeral et 1h, exemples par langage SDK, et explication des compteurs cache_read/cache_creation.
docs.anthropic.com
Tarifs Anthropic, par modèle
Le tableau de prix officiel avec les multiplicateurs de cache (0,10x sur hit, 1,25x sur écriture ephemeral) par modèle. À recroiser avec ton volume réel.
anthropic.com

Active le cache sur ton bloc le plus volumineux, mesure le hit ratio sur 48 heures, et tu auras une vue chiffrée de ce que ça change vraiment chez toi. Si tu veux une revue de stack IA en agence, on en parle.

Discuter de ton stack IA avec Blokby