Travailler avec les messages
Objectifs
- Comprendre le format de l’API Messages
- Manipuler les objets de reponse
- Construire un chatbot multi-tours
Le format des messages
Chaque appel a client.messages.create() attend une liste de messages. Chaque message est un dictionnaire avec deux cles :
role:"user"(vos messages) ou"assistant"(messages de Claude)content: le texte du message
messages = [
{"role": "user", "content": "Quels sont les ingredients du Dr. Pepper ?"}
]
Pour une conversation multi-tours :
messages = [
{"role": "user", "content": "Bonjour Claude !"},
{"role": "assistant", "content": "Bonjour ! Comment puis-je vous aider ?"},
{"role": "user", "content": "Raconte-moi un fait sur les furets."},
]
Les messages doivent toujours alterner entre user et assistant.
Quiz : Quelles sont les deux cles requises dans chaque message ?
Reponse : role et content
Inspecter la reponse
L’objet Message retourne par Claude contient plusieurs proprietes :
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1000,
messages=[
{"role": "user", "content": "Traduis bonjour en anglais. Reponds en un seul mot."}
]
)
Les proprietes principales :
| Propriete | Description |
|---|---|
content | Le contenu genere (liste de blocs) |
id | Identifiant unique du message |
model | Le modele utilise |
stop_reason | Raison de l’arret (end_turn, max_tokens, stop_sequence) |
usage | Tokens d’entree (input_tokens) et de sortie (output_tokens) |
Pour acceder au texte genere :
print(response.content[0].text)
Erreurs courantes
Commencer par un message assistant
La liste doit toujours commencer par un message user :
# ERREUR : commence par assistant
messages = [
{"role": "assistant", "content": "Bonjour !"}
]
Ne pas alterner les roles
Deux messages consecutifs du meme role provoquent une erreur :
# ERREUR : deux messages user consecutifs
messages = [
{"role": "user", "content": "Salut !"},
{"role": "user", "content": "Ca va ?"}
]
Techniques avancees avec les messages
Mettre des mots dans la bouche de Claude
Vous pouvez fournir un message assistant pour que Claude continue a partir de ce point :
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=500,
messages=[
{"role": "user", "content": "Genere un beau haiku"},
{"role": "assistant", "content": "l'air frais de montagne"}
]
)
# Claude completera le haiku a partir de cette premiere ligne
print("l'air frais de montagne" + response.content[0].text)
Prompting few-shot
Fournir des exemples via l’historique de conversation guide le format de sortie de Claude :
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=500,
messages=[
{"role": "user", "content": "Ce produit est nul, je deteste !"},
{"role": "assistant", "content": "NEGATIF"},
{"role": "user", "content": "J'adore ce produit, il est genial !"},
{"role": "assistant", "content": "POSITIF"},
{"role": "user", "content": "Le nouveau modele est vraiment top !"},
]
)
print(response.content[0].text) # POSITIF
Exercice : construire un chatbot
Construisez un chatbot en ligne de commande :
- Maintenez une liste pour l’historique
- Demandez une entree utilisateur avec
input() - Envoyez l’historique a Claude
- Affichez la reponse
- Ajoutez la reponse a l’historique
- Repetez (avec une condition de sortie)
Voir la solution
from anthropic import Anthropic
client = Anthropic()
conversation_history = []
while True:
user_input = input("Vous : ")
if user_input.lower() == "quit":
print("Conversation terminee.")
break
conversation_history.append({"role": "user", "content": user_input})
response = client.messages.create(
model="claude-sonnet-4-20250514",
messages=conversation_history,
max_tokens=500
)
assistant_response = response.content[0].text
print(f"Claude : {assistant_response}")
conversation_history.append({"role": "assistant", "content": assistant_response})