Chargement

Règles de la mémorisation des requêtes

Leçon 477 min

La mémorisation des requêtes dans Claude fonctionne en stockant le travail de calcul effectué sur les messages afin qu'il puisse être réutilisé dans les requêtes de suivi. Cela rend les requêtes utilisant du contenu mis en cache à la fois moins coûteuses et plus rapides à exécuter.

Claude écrit le travail effectué sur la requête « Please summarize this » dans le cache, puis le lit lors de la requête de suivi.

Le processus suit un schéma simple : votre requête initiale écrit dans le cache, et les requêtes de suivi peuvent lire depuis le cache. Le cache vit pendant 5 minutes, donc cette fonctionnalité n'est utile que si vous envoyez à répétition le même contenu - mais cela se produit extrêmement fréquemment dans les applications réelles.

Points de rupture du cache

Le travail effectué sur les messages n'est pas mis en cache automatiquement. Nous devons manuellement ajouter un « point de rupture du cache » à un bloc. Le travail effectué pour tout ce qui précède le point de rupture sera mis en cache, et le cache ne sera utilisé sur les requêtes de suivi que si le contenu jusqu'au point de rupture inclus est identique.

Un bloc de texte de message utilisateur contenant une longue requête, avec son "cache_control" de type "ephemeral" marqué comme le point de rupture du cache.

Lorsque vous devez ajouter des points de rupture du cache, vous devez utiliser la forme longue pour écrire les blocs de texte au lieu de la forme abrégée. Voici la différence :

python
# Forme abrégée - impossible d'ajouter des points d'arrêt de cache
user_message = {
  "role": "user",
  "content": "Hi there!"
}

# Forme longue - requise pour les points d'arrêt de cache
user_message = {
  "role": "user", 
  "content": [
    {
      "type": "text",
      "text": "Hi there!",
      "cache_control": {
        "type": "ephemeral"
      }
    }
  ]
}

Fonctionnement des points de rupture du cache

Les points de rupture du cache s'étendent sur plusieurs messages et peuvent aussi mettre en cache les messages de l'assistant. Lorsque vous placez un point de rupture, tout ce qui précède ce point est mis en cache. Rappelez-vous, le contenu doit être identique pour utiliser le cache !

Travail effectué dans Claude pour chacun des quatre blocs de texte, avec la ligne pointillée du point de rupture après le premier et la case Cache vide.

Dans une requête de suivi, Claude lit le travail précédemment traité depuis le cache au lieu de le retraiter :

Claude lit le travail mis en cache pour trois blocs d'une requête de suivi dont le dernier bloc « Focus the summary on » contient le point de rupture.

Emplacement du point de rupture

Vous n'êtes pas limité aux blocs de texte ! Vous pouvez ajouter des points de rupture du cache aux invites système et aux définitions d'outils. Ce sont en fait les opportunités de mise en cache les plus courantes, puisqu'elles changent rarement d'une requête à l'autre.

python
# Définitions d'outils avec point de rupture du cache
tools = [
  add_duration_to_datetime_schema,
  get_current_datetime_schema,
  {
    "name": "set_reminder",
    "description": "Sets a reminder...",
    "input_schema": { ... },
    "cache_control": {"type": "ephemeral"}
  }
]

# Invite système avec point de rupture du cache
system = [
  {
    "type": "text",
    "text": "You are a senior software...",
    "cache_control": {"type": "ephemeral"}
  }
]

Ordre du cache

En coulisses, les outils, les invites système et les messages sont assemblés dans cet ordre précis lorsqu'ils sont transmis à Claude. Cela affecte le fonctionnement de vos points de rupture du cache.

Dans les deux requêtes, le point de rupture du cache se trouve sur l'Outil 3, avant l'invite système et les messages ; le message de l'assistant de la Requête 2 a changé.

Vous pouvez ajouter jusqu'à quatre points de rupture du cache au total. Si vous placez un point de rupture sur votre dernier outil, tout ce qui précède cet outil est mis en cache, mais l'invite système et les messages ne le seront pas. Cela vous donne un contrôle précis sur ce qui est mis en cache en fonction de ce qui change dans votre application.

Longueur minimale du contenu

Il existe une longueur minimale pour la mise en cache, et elle dépend du modèle. Pour Claude Haiku 4.5, le modèle utilisé dans ce cours, le contenu doit comporter au moins 4 096 jetons pour être mis en cache. Il s'agit de la somme de tous les messages et blocs que vous essayez de mettre en cache, et non de blocs individuels.

Un message comme « Hi there! » est bien trop court pour être mis en cache, mais une requête véritablement longue atteint le minimum. Le contenu en dessous du minimum est simplement traité sans mise en cache, et aucune erreur n'est renvoyée. Pour le vérifier, examinez l'usage de la réponse : cache_creation_input_tokens et cache_read_input_tokens seront tous les deux à 0.

La clé d'une mémorisation des requêtes efficace consiste à identifier les parties de vos requêtes qui restent constantes - généralement vos invites système et vos définitions d'outils - et à placer les points de rupture de manière stratégique afin de maximiser les succès de cache tout en minimisant le retraitement.