Aller au contenu principal
Leçon 4 sur 66 · Claude sur Google Cloud (Vertex AI / Agent Platform)

Conversations multi-tours

Leçon 4 sur 66 Mis à jour le 5 novembre 2026 Développeur
Sur cette page
  1. Claude est sans état
  2. Le principe
  3. Les fonctions utilitaires
  4. Une conversation complète
  5. Le coût d’une longue conversation
  6. À vous de jouer
  7. Points clés à retenir

Claude ne garde aucun souvenir d’une requête à l’autre. Pour tenir une conversation, c’est votre code qui conserve l’historique et le renvoie en entier à chaque appel. Cette leçon montre pourquoi, puis écrit les trois fonctions utilitaires que le cours réutilise jusqu’aux agents : add_user_message, add_assistant_message et chat.

Claude est sans état

Chaque appel à l’API est totalement indépendant. Le cours officiel le montre simplement : demandez « Qu’est-ce que l’informatique quantique ? », puis, dans une seconde requête, « Écris une autre phrase » ; Claude écrit une phrase sur n’importe quoi, car il ne sait pas de quoi vous parliez. Ce n’est pas une limite à contourner mais une propriété à exploiter : puisque vous détenez l’historique, vous pouvez le relire, en retirer un échange raté, le résumer ou le stocker.

Le principe

Pour qu’une conversation tienne, deux règles : garder la liste de tous les messages, et l’envoyer en entier à chaque requête. Le déroulé est toujours le même :

  1. Envoyer le premier message user.
  2. Ajouter la réponse de Claude à la liste, comme message assistant.
  3. Ajouter la question suivante, comme nouveau message user.
  4. Envoyer toute la liste.
Tenir une conversation sans état Quatre étapes : ajouter le message user, envoyer toute la liste, ajouter la réponse comme message assistant, ajouter la question suivante ; retour à l'envoi à chaque tour. MULTI-TOURS Tenir une conversation sans état 1 user add_user_message 2 Envoi chat(messages) : toute la liste 3 assistant add_assistant_message(réponse) 4 Suite nouvelle question user à chaque tour, toute la liste repart L'API ne garde rien d'un appel à l'autre : c'est votre code qui tient l'historique, et le coût croît avec sa longueur.
D'après la leçon « Multi-turn conversations » (Claude Academy, Claude on Google Cloud).

Les fonctions utilitaires

from anthropic import AnthropicVertex

client = AnthropicVertex(project_id="votre-projet", region="global")
model = "claude-sonnet-5-5"

def add_user_message(messages, text):
    messages.append({"role": "user", "content": text})

def add_assistant_message(messages, text):
    messages.append({"role": "assistant", "content": text})

def chat(messages):
    message = client.messages.create(
        model=model,
        max_tokens=4096,
        messages=messages,
    )
    # un bloc de réflexion peut précéder le texte : on ne garde que les blocs text
    return "".join(block.text for block in message.content if block.type == "text")

Ce sont les fonctions du cours officiel, à deux détails près. max_tokens vaut 4 096 et non 1 000, parce que Sonnet 5.5 réfléchit avant de répondre et que sa réflexion compte dans ce plafond. Et chat lit les blocs de type text au lieu de message.content[0].text, pour la même raison. La conversation ne garde que le texte des réponses de Claude : hors appel d’outil, la documentation l’autorise, même si elle recommande de renvoyer chaque tour tel quel (la section 5, sur les outils, y reviendra, car là c’est obligatoire).

Une conversation complète

messages = []

add_user_message(messages, "Définis l'informatique quantique en une phrase.")
answer = chat(messages)
add_assistant_message(messages, answer)

add_user_message(messages, "Écris une autre phrase.")
final_answer = chat(messages)
print(final_answer)

Cette fois, « Écris une autre phrase » prolonge la définition : Claude voit tout l’historique.

for msg in messages:
    role = "Vous" if msg["role"] == "user" else "Claude"
    print(f"{role} : {msg['content'][:80]}…")

Le coût d’une longue conversation

Puisque tout l’historique repart à chaque requête, le vingtième échange ne coûte pas un message mais la somme de tous ceux qui précèdent : le coût cumulé d’une conversation croît bien plus vite que son nombre de tours, et la fenêtre de contexte finit par se remplir. Trois parades, vues plus loin dans le cours : tronquer les messages les plus anciens, résumer périodiquement la conversation, et mettre en cache le début de l’historique (section 7).

À vous de jouer

Vérifier l’absence de mémoire. Envoyez « Je m’appelle Camille » puis, dans une requête séparée, « Comment je m’appelle ? ». Recommencez avec les fonctions utilitaires et la même liste : la réponse change.

Compter les tokens. Modifiez chat pour afficher message.usage.input_tokens à chaque appel, puis tenez une conversation de six tours. Observez la croissance des tokens d’entrée.

Sources officielles : Multi-turn conversations (Claude Academy) · Create a Message et Thinking (documentation Claude : historique, blocs de réflexion d’un tour à l’autre)

Points clés à retenir

  • Claude est sans état : chaque requête est indépendante.
  • Votre code garde la liste des messages et l’envoie en entier à chaque appel.
  • Trois utilitaires : add_user_message, add_assistant_message, chat, qui lit les blocs de type text.
  • Le coût d’une conversation croît avec la longueur de l’historique : tronquer, résumer, mettre en cache.