API Claude : les message threads accélèrent vos agents sur les longues conversations

Les message threads de l'API Claude gardent la conversation côté serveur. On voit comment mesurer le gain, les limites (5 min, bêta, pas de ZDR) et comment migrer.

Un agent Claude rapide au premier message peut devenir nettement plus lent au quarantième tour. Rien n'a cassé : c'est la mécanique normale de l'API en mode classique, et c'est exactement ce que les message threads (lancés en bêta le 2 novembre 2026) cherchent à corriger. Si tu construis des agents, la base est dans le guide pour apprendre Claude : le guide complet 2026 ; ici on reste sur un seul sujet, la conversation longue.

En bref :

  • En mode classique, l'API Messages est sans état : tu renvoies tout l'historique à chaque tour, donc le prompt grossit avec la conversation.
  • Un message thread garde la conversation côté serveur : tu n'envoies que les nouveaux messages, avec l'identifiant de la réponse précédente.
  • Le thread expire 5 minutes après la dernière requête et est supprimé au plus tard 1 heure après sa dernière utilisation : ce n'est pas une mémoire longue durée.
  • La fonctionnalité est en bêta (en-tête message-threads-2026-08-12) et n'est pas éligible à la rétention zéro de données (ZDR).
  • Le gain doit se mesurer sur ton cas : chronomètre le premier token sur 20 tours, avec et sans thread, et compare les médianes.

Pourquoi un agent Claude ralentit-il quand la conversation s'allonge ?

Parce qu'à chaque tour, l'agent renvoie la totalité de l'historique, plus le prompt système et la définition des outils. Plus la conversation avance, plus la requête est lourde à transmettre et à retraiter, et plus le délai avant le premier token (time to first token) monte. Le coût d'un tour dépend donc de la longueur de tout ce qui précède, pas seulement du dernier message.

Prends un agent de qualification de leads. Au tour 1, le contexte tient en quelques milliers de tokens : prompt système, deux outils, une question. Après une heure de session, avec des fiches CRM récupérées, des emails collés et des résultats d'outils volumineux, tu peux facilement te retrouver à plusieurs dizaines de milliers de tokens renvoyés à chaque message. L'ordre de grandeur, 2 000 tokens au départ contre 60 000 à la fin, est un exemple pédagogique, pas une mesure : le tien dépendra de tes outils et de tes données.

Ce phénomène touche surtout les boucles d'agents, où un seul « tour » utilisateur déclenche en réalité plusieurs appels d'API enchaînés (appel d'outil, résultat, nouvelle réponse). Chaque appel renvoie le tout. C'est là que la facture de latence se cumule, et c'est le cas que les threads visent en premier.

Qu'est-ce qu'un message thread dans l'API Claude ?

Un message thread est une conversation conservée côté serveur par Anthropic et référencée par l'identifiant d'une réponse, au lieu d'être reconstruite et renvoyée en entier à chaque appel. Tu envoies le premier tour complet, puis seulement les nouveaux messages. Selon la documentation officielle, la fonctionnalité est en bêta sur l'API Messages depuis le 2 novembre 2026, avec l'en-tête bêta message-threads-2026-08-12.

Concrètement, deux modes d'appel :

  • Premier tour : tu envoies la conversation complète avec system, tools et le paramètre thread de type create.
  • Tours suivants : tu envoies uniquement les nouveaux messages, avec thread de type continue et le previous_message_id de la réponse précédente. system et tools ne sont pas renvoyés.

La bêta est disponible sur l'API Claude, Claude Platform on AWS, Claude Models on Google Cloud (géré par Anthropic) et Microsoft Foundry, et les SDK fournissent un assistant thread qui gère le create/continue et ajoute l'en-tête. Pour le reste de l'API, voir la page l'API Anthropic. Attention à ne pas confondre avec les « session threads » de Claude Managed Agents : c'est une autre fonctionnalité, sans rapport.

Comment les threads réduisent-ils la latence et le time to first token ?

Ils évitent de retransmettre et de reconstruire l'historique à chaque appel : la requête reste petite, quelle que soit la longueur de la conversation. La documentation parle de requêtes plus petites et d'un délai avant le premier token plus bas et plus stable à mesure que l'échange s'allonge, surtout sur les longues boucles d'agents. Elle ne donne aucun chiffre de gain, et je n'en inventerai pas.

Threads et prompt caching : deux leviers distincts

Le prompt caching agit sur un autre problème : il rend moins coûteux et plus rapide le traitement d'un préfixe de prompt qui se répète (lecture de cache facturée à 10 % du prix d'entrée standard). Le thread, lui, réduit ce que tu envoies. Les deux peuvent se combiner, mais rien ne garantit que leurs gains s'additionnent : c'est à mesurer, pas à supposer.

Comment mesurer le gain sur ton agent

Une méthode simple, sans outil spécial :

  1. Active le streaming et relève l'horodatage d'envoi de la requête et celui du premier fragment reçu.
  2. Rejoue la même conversation de test sur au moins 20 tours, d'abord en mode classique, puis avec thread.
  3. Compare la médiane du premier token par tour, pas la moyenne : un pic ponctuel (réseau, charge) fausse une moyenne.
  4. Trace la latence en fonction du numéro de tour. La courbe du mode classique doit monter, celle du thread rester plus plate. Si les deux sont identiques, tu n'as rien à gagner.

Garde le même modèle, le même prompt système et les mêmes outils des deux côtés, sinon tu compares autre chose que les threads.

Quels agents gagnent vraiment à passer aux threads ?

Ceux dont l'historique devient lourd : agents conversationnels longs (support, onboarding client, coaching), agents qui accumulent de gros résultats d'outils, sessions de travail étalées sur plusieurs heures. Pour une tâche en un ou deux tours, ou un pipeline sans état, le gain est négligeable et la migration ne vaut pas l'effort.

Un critère de décision utilisable : si ton agent dépasse régulièrement quelques dizaines de tours, ou si ton historique atteint plusieurs dizaines de milliers de tokens, la bêta mérite un test. En dessous, ne touche à rien. Ces seuils sont à calibrer sur tes propres mesures, la documentation n'en fixe pas.

Un point à tenir en tête : le thread expire 5 minutes après la dernière requête. Un agent qui discute en continu avec un client en direct s'y prête bien ; un agent dont les tours sont séparés par des heures (relance de prospect, suivi différé) repartira presque toujours d'un thread expiré. Dans ce second cas, le thread n'apporte rien et il vaut mieux regarder ailleurs. Si tes agents branchent des outils métier, la logique reste la même qu'avec MCP et vos outils branchés : les outils sont déclarés au premier tour, puis conservés. Sur l'architecture générale, le pilier construire des agents IA autonomes avec Claude donne le cadre.

Comment migrer un agent existant vers les threads, étape par étape ?

La migration touche surtout la gestion de session, pas tes prompts ni tes outils. Voici la procédure, à tester sur une fraction du trafic avant de basculer :

  1. Mesure l'existant : latence du premier token par tour et coût par session, avec la méthode ci-dessus.
  2. Crée le thread au premier tour : envoie la conversation complète avec system, tools et thread de type create, puis stocke l'identifiant de la réponse.
  3. Au tour suivant, n'envoie que le nouveau message avec thread de type continue et ce previous_message_id.
  4. Gère l'expiration : si le thread n'existe plus, la requête continue renvoie une erreur 404. Dans ce cas, renvoie la conversation complète dans une nouvelle requête create.
  5. Re-mesure sur le même scénario et compare les médianes.

Squelette Python, à adapter à la version de ton SDK (les noms exacts des paramètres et de l'assistant thread sont à vérifier dans la documentation avant usage) :

# Schéma de principe, à adapter à ton SDK
messages_locaux = []   # ta propre copie de la conversation
thread_id = None

def tour(message_utilisateur):
    global thread_id
    messages_locaux.append({"role": "user", "content": message_utilisateur})

    if thread_id is None:
        # Premier tour : conversation complete + system + tools
        reponse = appeler_api(thread={"type": "create"},
                              messages=messages_locaux)
    else:
        try:
            # Tours suivants : seulement le nouveau message
            reponse = appeler_api(
                thread={"type": "continue", "previous_message_id": thread_id},
                messages=[messages_locaux[-1]])
        except ThreadNotFound:   # erreur 404
            reponse = appeler_api(thread={"type": "create"},
                                  messages=messages_locaux)

    thread_id = reponse.id
    messages_locaux.append({"role": "assistant", "content": reponse.content})
    return reponse

Remarque sur messages_locaux : le thread est « au mieux » (best-effort), donc ton application reste la source de vérité et doit garder sa propre copie des messages. Sans elle, tu ne peux pas repartir après une expiration.

Quelles limites et quels points de vigilance avant de migrer ?

Trois points pèsent plus que les autres : la bêta, l'expiration courte et la confidentialité. Le thread expire 5 minutes après la dernière requête et est supprimé au plus tard 1 heure après sa dernière utilisation. La fonctionnalité est en bêta, donc susceptible d'évoluer. Et elle n'est pas éligible à la rétention zéro de données (ZDR).

Sur la confidentialité, la documentation précise que le contenu d'un thread est conservé en mémoire, chiffré, jamais écrit en stockage durable, et supprimé au plus tard 1 heure après la dernière utilisation. Si tes conversations contiennent des données personnelles de clients, ce traitement doit être cohérent avec ton registre RGPD et, si tu as un contrat ZDR, tu ne peux pas utiliser les threads sur ce périmètre. Vérifie les règles générales auprès de la CNIL et les engagements du fournisseur dans sa documentation. Ce que je ne peux pas te dire : l'impact exact sur ton analyse de risques, qui dépend de tes données et de tes contrats.

Autres points concrets :

  • Contrôle du contexte : tu ne retailles plus l'historique à la main à chaque tour. Si tu comptais sur une troncature ou un résumé maison, il faudra l'organiser autrement.
  • Pas de mémoire longue durée : ne présente jamais les threads à un client comme un historique conservé. Pour retrouver une conversation le lendemain, c'est ta base de données qui sert.
  • Gain non chiffré : la documentation ne donne aucune réduction de latence ni de coût. Toute promesse chiffrée à ton équipe serait inventée.

Threads, prompt caching ou résumé de contexte : lequel choisir ?

Les trois leviers attaquent le même symptôme par des voies différentes, et le bon choix dépend de la durée de tes sessions et de ton niveau de contrôle voulu. Voici la comparaison, avec les limites connues de chacun :

CritèreMessage threadsPrompt cachingRésumé de contexte
Ce qu'il réduitDonnées envoyées par tourCoût et temps de traitement d'un préfixe répétéTaille de l'historique conservé
Contrôle du contexteFaible (côté serveur)TotalTotal
Mise en placeSimple, mais bêtaSimple, stablePlus de code, plus d'évaluation
Limite principaleExpire en 5 min, ni ZDR ni mémoire longueNe réduit pas ce que tu envoiesUn résumé peut perdre une information utile

Pour une petite équipe sans développeur dédié, commence par le prompt caching : stable, bien documenté, sans exigence de session continue. Pour une équipe technique qui industrialise des agents à conversations longues et rapprochées dans le temps, teste les threads sur un flux réduit, combinés au caching si ta mesure le confirme. Le résumé de contexte reste la voie quand tu veux garder la main sur ce que l'agent « se rappelle », ou quand tes sessions durent bien plus d'une heure.

Questions fréquentes

Les threads remplacent-ils le prompt caching ?

Non, ce sont deux mécanismes différents. Le prompt caching réduit le coût et le temps de traitement d'un préfixe de prompt répété, les threads évitent de renvoyer l'historique à chaque appel. Ils peuvent se combiner, et leurs gains ne s'additionnent pas toujours : il faut mesurer sur ton cas.

À partir de quelle longueur de conversation faut-il passer aux threads ?

Il n'existe pas de seuil universel. La documentation n'en fixe pas. Le gain concerne surtout les longues conversations et les boucles d'agents. Chronomètre le premier token sur 20 tours de ton propre agent avant de décider.

Mes données clients restent-elles stockées avec les threads ?

Le contenu d'un thread est conservé en mémoire, chiffré, jamais écrit en stockage durable, et supprimé au plus tard 1 heure après la dernière utilisation. La fonctionnalité n'est pas éligible à la rétention zéro de données (ZDR). Pour des données personnelles, vérifie ces conditions dans la documentation officielle avant toute mise en production.

Faut-il réécrire tout son agent pour utiliser les threads ?

Rarement. La migration touche surtout la gestion de session : créer un thread, stocker son identifiant, n'envoyer que le nouveau message à chaque tour. Les prompts système et les outils branchés restent en grande partie identiques, mais teste d'abord sur une fraction du trafic.

Comment mesurer le time to first token de mon agent ?

Relève l'horodatage de l'envoi de la requête et celui de l'arrivée du premier fragment en mode streaming, sur au moins 20 tours d'une même conversation. Compare la médiane avant et après migration plutôt que la moyenne, qui est faussée par les pics ponctuels.

Passer à la pratique

Garde en tête l'ordre des opérations : mesurer d'abord, migrer sur un flux réduit ensuite, et conserver ta propre copie des messages. Si tu veux construire des agents qui tiennent la route en production, du choix des outils à la sécurité, c'est précisément ce qu'on déroule dans la formation : Piloter vos agents autonomes.

Pilier stratégique

Construire des agents IA autonomes avec Claude

Architecture d'agent, multi-agents, sécurisation, déploiement en production. Le territoire de Claude Agent.

Découvrir le pilier complet →Formation Claude Mastery →