Aller au contenu principal

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_tokens pour confirmer le cache