Aller au contenu principal

Conversations multi-tours

Jusqu’ici, chaque echange avec Claude etait un aller-retour unique. Mais dans une vraie application, l’utilisateur pose des questions de suivi. Si apres “Combien font 1+1 ?” vous demandez “Et si j’ajoute 3 ?”, Claude doit savoir que vous parlez du resultat precedent.

Aucun stockage de messages

Point fondamental : ni Bedrock ni Claude ne conservent vos messages. Chaque appel API est totalement independant. La consequence directe : c’est a votre code de maintenir l’historique de conversation et de le renvoyer integralement a chaque requete.

Si vous envoyez uniquement “Et si j’ajoute 3 ?” sans contexte, Claude ne sait pas de quoi vous parlez. Il tentera de repondre, mais la reponse sera incoherente.

Construire le contexte conversationnel

Pour maintenir le contexte, incluez l’integralite de l’historique dans chaque requete. Votre liste de messages doit contenir tous les echanges precedents : messages utilisateur ET reponses de l’assistant.

Voici des fonctions utilitaires pour gerer cette liste :

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

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

def chat(messages):
    response = client.converse(
        modelId=model_id,
        messages=messages
    )
    return response["output"]["message"]["content"][0]["text"]

Implementer une conversation multi-tours

Voici le flux complet etape par etape :

# Initialiser la liste de messages
messages = []

# Ajouter la question initiale
add_user_message(messages, "Combien font 1+1 ?")

# Obtenir la reponse
answer = chat(messages)

# Ajouter la reponse de l'assistant a l'historique
add_assistant_message(messages, answer)

# Poser une question de suivi
add_user_message(messages, "Et si j'ajoute 3 a ce resultat ?")

# Appeler chat avec l'historique complet
answer = chat(messages)
print(answer)

Avec l’historique complet, Claude comprend le contexte et repond correctement : “En partant du resultat de 1+1 = 2, si nous ajoutons 3, nous obtenons : 2 + 3 = 5.”

Alternance obligatoire des roles

L’API impose une alternance stricte des roles dans la liste de messages : utilisateur, assistant, utilisateur, assistant. Deux messages consecutifs du meme role provoqueront une erreur. Ce schema reflete le flux naturel d’une conversation.

Cette gestion manuelle de l’historique peut sembler fastidieuse au debut, mais c’est un schema fondamental pour toute application conversationnelle avec Claude.