Le code que nous avons écrit jusqu'à présent simule un échange très simple avec Claude. Mais que se passe-t-il lorsque vous souhaitez poursuivre une conversation ? Lorsque vous posez une question de suivi comme « Et 3 de plus ? » après avoir demandé « Combien font 1+1 ? », vous pourriez vous attendre à ce que Claude comprenne que vous demandez d'ajouter 3 au résultat précédent de 2.

Cependant, il y a quelque chose de crucial que vous devez comprendre à propos de l'API Bedrock et de Claude lui-même.
Aucun stockage de messages
Bedrock et Claude ne stockent aucun message. Aucun des messages que vous envoyez n'est stocké, et aucune des réponses que vous recevez n'est stockée non plus. Chaque appel API est complètement indépendant.

Pour avoir une conversation avec plusieurs messages qui maintiennent le contexte, vous devez :
- Maintenir manuellement une liste de tous les messages dans votre code
- Fournir cette liste complète de messages avec chaque requête de suivi
Pourquoi le contexte est important
Voyons ce qui se passe sans contexte approprié. Si vous envoyez simplement « Et 3 de plus ? » comme message autonome, Claude n'a aucune idée de ce à quoi vous faites référence. Il fera de son mieux pour répondre, mais la réponse n'aura pas de sens car elle manque le contexte de votre conversation précédente.

Lorsque vous envoyez uniquement la question de suivi, Claude voit seulement ce message isolé et tente de répondre sans connaître l'échange précédent « Combien font 1+1 ? ».

Construire le contexte de conversation
Pour maintenir le contexte, vous devez inclure l'historique complet de la conversation dans chaque requête. Voici comment cela fonctionne :

Votre liste de messages doit contenir tous les échanges précédents - à la fois les messages de l'utilisateur et les réponses de l'assistant. Lorsque vous envoyez ce contexte complet, Claude peut comprendre que « Et 3 de plus ? » fait référence à l'ajout de 3 au résultat précédent de 2.
Fonctions d'assistance pour la gestion des messages
Pour faciliter la gestion des conversations, vous pouvez créer des fonctions d'assistance :
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"]Implémenter des conversations multi-tours
Voici comment construire une conversation étape par étape :
# Créer une liste de départ de messages
messages = []
# Ajouter la question initiale de l'utilisateur « What's 1+1? »
add_user_message(messages, "What's 1+1?")
# Transmettre la liste de messages à chat pour obtenir une réponse
answer = chat(messages)
# Prendre la réponse et l'ajouter comme message assistant dans notre liste
add_assistant_message(messages, answer)
# Ajouter la question de suivi de l'utilisateur
add_user_message(messages, "And 3 more added to that?")
# Rappeler chat avec la liste de messages pour obtenir une réponse finale
answer = chat(messages)
print(answer)Cette approche garantit que Claude dispose du contexte complet et peut répondre de manière appropriée : « En partant du résultat de 1+1 = 2, si nous ajoutons 3 de plus à cela, nous obtenons : 2 + 3 = 5 »
Alternance des rôles de message
Lors de la construction de votre liste de messages, assurez-vous toujours que les rôles des messages alternent correctement :

Votre conversation doit suivre le modèle : utilisateur → assistant → utilisateur → assistant. N'ayez jamais deux messages utilisateur à la suite ou deux messages assistant à la suite. Ce modèle alterné est requis par l'API et reflète le flux naturel de la conversation.
Bien que cette gestion manuelle des messages puisse sembler fastidieuse au début, vous vous y habituerez rapidement. Ce modèle est fondamental pour construire toute application qui doit maintenir un contexte conversationnel avec Claude.