Aller au contenu principal
Leçon 5 sur 67 · Claude sur Amazon Bedrock

Conversations multi-tours

Leçon 5 sur 67 Mis à jour le 5 novembre 2026 Développeur
Sur cette page
  1. Aucun stockage de messages
  2. Trois fonctions utilitaires
  3. Une conversation en quatre messages
  4. L’ordre des rôles
  5. À vous de jouer
  6. Points clés à retenir

Jusqu’ici, chaque échange avec Claude était un aller-retour unique. Dans une vraie application, l’utilisateur pose des questions de suivi : après « Combien font 1+1 ? », il demande « Et 3 de plus ? », et Claude doit comprendre qu’il parle du résultat précédent. Cette leçon construit le mécanisme qui le permet, et qui servira dans tout le cours.

Aucun stockage de messages

Point fondamental : ni Bedrock ni Claude ne conservent vos messages. Chaque appel est indépendant, sans session ni identifiant de conversation côté service. C’est donc à votre code de tenir l’historique et de le renvoyer en entier à chaque requête.

Faites l’expérience : envoyez seulement « Et 3 de plus ? ». Claude ne sait pas de quoi vous parlez. Il répondra quand même, mais sur une supposition. Si les interfaces de chat que vous connaissez semblent avoir de la mémoire, c’est que leur code fait exactement ce que nous allons écrire.

Trois fonctions utilitaires

Pour garder le contexte, chaque requête contient tout l’historique : les messages de l’utilisateur et les réponses de Claude, dans l’ordre. Comme ces manipulations reviendront partout, isolons-les :

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


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


def chat(messages):
    response = client.converse(modelId=model_id, messages=messages)
    content = response["output"]["message"]["content"]
    return "".join(block["text"] for block in content if "text" in block)

chat reprend la lecture de la leçon 4 : elle ne garde que les blocs de texte, ce qui la protège des blocs de réflexion de Haiku 5.5. Le cours officiel renvoie content[0]["text"], qui ne tient qu’avec un modèle qui ne réfléchit pas. Ces trois fonctions seront enrichies section après section, du prompt système aux outils.

Une conversation en quatre messages

messages = []

add_user_message(messages, "Combien font 1+1 ?")
answer = chat(messages)
add_assistant_message(messages, answer)

add_user_message(messages, "Et 3 de plus ?")
answer = chat(messages)
print(answer)

Suivez la liste messages : un message, puis deux, puis trois. Le second appel envoie donc l’échange complet, question, réponse et relance. Claude comprend le contexte et répond, par exemple : « En partant de 1+1 = 2, si on ajoute 3, on obtient 2 + 3 = 5. » L’étape la plus souvent oubliée est add_assistant_message : sans elle, Claude verrait deux questions d’affilée, sans sa propre réponse entre les deux.

Un historique en quatre messages Quatre messages qui alternent : la question de l'utilisateur, la réponse de Claude, la relance de l'utilisateur, la seconde réponse, qui s'appuie sur tout l'historique. CONVERSATIONS MULTI-TOURS Un historique en quatre messages 1 user « Combien font 1+1 ? » 2 assistant « 1 + 1 = 2. » 3 user « Et 3 de plus ? » 4 assistant « 2 + 3 = 5. » Chaque appel renvoie toute la liste : Bedrock ne garde rien d'une requête à l'autre.
D'après la leçon « Multi-Turn conversations » (Claude Academy, Claude with Amazon Bedrock).

L’ordre des rôles

Le cours officiel pose deux règles pour la liste de messages : elle commence par un message user, et les rôles alternent, user puis assistant puis user. L’API Converse refuse une liste qui ne respecte pas l’alternance avec une ValidationException : « A conversation must alternate between user and assistant roles ». Cette règle sert de garde-fou : une erreur d’alternance signale presque toujours un add_assistant_message oublié dans votre boucle.

Cette gestion manuelle peut sembler fastidieuse au début. C’est le prix d’une API sans état, qui en échange ne vous impose aucune infrastructure de session. Toute application conversationnelle avec Claude, du chatbot à l’agent, repose sur cette liste que votre code entretient.

À vous de jouer

La mémoire, c’est vous. Lancez la conversation de la leçon, puis recommencez en supprimant l’appel à add_assistant_message et observez ce que renvoie l’API. Écrivez ensuite une fonction check_roles(messages) qui vérifie, avant chaque appel, que la liste commence par user et que les rôles alternent.

Un petit chat en boucle. Écrivez une boucle while qui lit une question au clavier avec input(), appelle chat et ajoute chaque réponse à l’historique. Posez trois questions qui dépendent les unes des autres, puis affichez la longueur de messages.

Sources officielles : Multi-Turn conversations (Claude Academy) · Carry out a conversation with the Converse API operations et API Converse (documentation AWS)

Points clés à retenir

  • Bedrock ne garde rien : chaque requête est indépendante, et l’historique est votre responsabilité.
  • Renvoyez tout l’échange à chaque tour, questions et réponses de Claude.
  • add_user_message, add_assistant_message et chat serviront tout le cours ; chat ne lit que les blocs de texte.
  • La liste commence par un message user et les rôles alternent ; une erreur d’alternance trahit un oubli dans la boucle.