Prompt caching : réutiliser les calculs
Qu’est-ce que le prompt caching ?
Lorsque vous envoyez le même préfixe de prompt à répétition — un prompt système long, des instructions détaillées, un document de référence — OpenAI peut automatiquement mettre en cache ce préfixe. Les appels suivants qui partagent ce préfixe bénéficient d’un TTFT réduit et d’un coût inférieur sur les tokens en entrée.
Le prompt caching est automatique depuis 2025 : vous n’avez rien à activer. OpenAI détecte les préfixes identiques et les met en cache.
Comment ça fonctionne
Les règles du cache
- Le cache porte sur les préfixes du prompt : les premiers tokens doivent être identiques
- Taille minimale : 1 024 tokens pour déclencher la mise en cache
- Le cache est partagé au sein d’une même organisation
- Durée de vie : quelques minutes à quelques heures (variable)
- Réduction : environ 50 % sur le coût des tokens en entrée mis en cache
Structure optimale
Pour maximiser le cache, placez les éléments stables en début de prompt :
import openai
client = openai.OpenAI()
# ✅ Bonne structure : éléments stables en premier
PROMPT_SYSTEME = """Vous êtes un assistant juridique spécialisé en droit
français des contrats. Vous analysez les clauses contractuelles selon le
Code civil et la jurisprudence récente. Vous répondez toujours en
structurant votre analyse : 1) Identification de la clause,
2) Analyse juridique, 3) Risques potentiels, 4) Recommandations.
Voici le contrat de référence à analyser :
[Insérez ici un document de 2000+ tokens qui ne change pas entre les appels]
"""
def analyser_clause(clause: str) -> str:
"""Chaque appel réutilise le cache du prompt système."""
response = client.responses.create(
model="gpt-5.3",
instructions=PROMPT_SYSTEME, # Préfixe stable = mis en cache
input=f"Analysez cette clause : {clause}", # Partie variable
)
return response.output_text
Vérifier le cache
L’API retourne des informations sur l’utilisation du cache dans la réponse :
response = client.responses.create(
model="gpt-5.3",
instructions=PROMPT_SYSTEME,
input="Analysez la clause de non-concurrence.",
)
# Vérifier l'utilisation du cache
usage = response.usage
print(f"Tokens entrée : {usage.input_tokens}")
print(f"Tokens entrée (cache) : {usage.input_tokens_details.cached_tokens}")
print(f"Tokens sortie : {usage.output_tokens}")
# Si cached_tokens > 0 : le cache a été utilisé
ratio_cache = usage.input_tokens_details.cached_tokens / usage.input_tokens
print(f"Ratio de cache : {ratio_cache:.1%}")
Stratégies d’optimisation du cache
Stratégie 1 : Prompt système riche
Incluez autant de contexte stable que possible dans le prompt système :
# Enrichir le prompt système pour maximiser le cache
PROMPT_ENRICHI = """
[Instructions détaillées - 500+ tokens]
[Exemples few-shot - 500+ tokens]
[Document de référence - 1000+ tokens]
---
Total > 1024 tokens = éligible au cache
"""
Stratégie 2 : Ordonnancement des messages
Dans une conversation multi-tours, l’historique constitue un préfixe naturel :
def conversation_avec_cache(historique: list[dict], nouveau_message: str):
"""L'historique croissant maximise le cache automatiquement."""
historique.append({"role": "user", "content": nouveau_message})
response = client.responses.create(
model="gpt-5.3",
instructions=PROMPT_SYSTEME,
input=historique,
)
historique.append({
"role": "assistant",
"content": response.output_text,
})
return response.output_text
Stratégie 3 : Batch homogène
Regroupez les requêtes qui partagent le même préfixe pour maintenir le cache chaud :
import asyncio
async def batch_avec_cache(clauses: list[str]) -> list[str]:
"""Envoie les requêtes rapidement pour profiter du cache."""
resultats = []
for clause in clauses:
resultat = analyser_clause(clause)
resultats.append(resultat)
return resultats
Pièges à éviter
- Ne modifiez pas le début du prompt : un seul caractère différent invalide le cache
- Ne randomisez pas l’ordre des instructions : gardez le même préfixe
- Attendez le seuil de 1 024 tokens : un prompt système court ne sera pas mis en cache
Points clés à retenir
- Le prompt caching est automatique chez OpenAI — placez les éléments stables en début de prompt
- Seuil minimum : 1 024 tokens identiques en préfixe
- Gain : ~50 % sur les tokens en entrée mis en cache + TTFT réduit
- Vérifiez
usage.input_tokens_details.cached_tokenspour confirmer le cache