Aller au contenu principal

Exercice : construire un chatbot

Mettez en pratique ce que vous avez appris en construisant un chatbot interactif en ligne de commande.

Objectif

Creer un programme Python qui :

  1. Accepte les messages de l’utilisateur en boucle
  2. Maintient l’historique de la conversation
  3. Envoie l’historique complet a chaque requete
  4. Affiche les reponses de Claude
  5. Permet de quitter avec “quit” ou “exit”

Consignes

  • Reutilisez les fonctions add_user_message, add_assistant_message et chat de la lecon precedente
  • Le chatbot doit tourner en continu jusqu’a ce que l’utilisateur decide de quitter
  • Affichez un message d’accueil au demarrage
  • Gerez proprement la sortie

Bonus

Ajoutez un prompt systeme pour donner une personnalite au chatbot (nous verrons les prompts systeme en detail dans la prochaine lecon, mais vous pouvez deja experimenter avec le parametre system de messages.create()).


Solution

Essayez d’abord par vous-meme avant de regarder la solution.

Voir la solution
from dotenv import load_dotenv
import anthropic

load_dotenv()
client = anthropic.Anthropic()

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

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

def chat(conversation, user_message, system_prompt=None, model="claude-sonnet-4-20250514", max_tokens=1024):
    add_user_message(conversation, user_message)

    kwargs = {
        "model": model,
        "max_tokens": max_tokens,
        "messages": conversation
    }

    if system_prompt:
        kwargs["system"] = system_prompt

    response = client.messages.create(**kwargs)

    assistant_text = response.content[0].text
    add_assistant_message(conversation, assistant_text)

    return assistant_text

def main():
    print("=== Chatbot Claude ===")
    print("Tapez 'quit' ou 'exit' pour quitter.\n")

    conversation = []

    # Bonus : prompt systeme pour donner une personnalite
    system_prompt = (
        "Tu es un assistant sympathique et concis. "
        "Tu reponds en francais. "
        "Tu utilises des exemples concrets quand c'est utile."
    )

    while True:
        user_input = input("Vous : ").strip()

        if not user_input:
            continue

        if user_input.lower() in ("quit", "exit"):
            print("Au revoir !")
            break

        try:
            response = chat(conversation, user_input, system_prompt=system_prompt)
            print(f"\nClaude : {response}\n")
        except Exception as e:
            print(f"\nErreur : {e}\n")

if __name__ == "__main__":
    main()

Pour aller plus loin

  • Ajoutez un compteur de tokens pour suivre la consommation
  • Sauvegardez l’historique dans un fichier JSON pour reprendre une conversation
  • Ajoutez une commande /reset pour effacer l’historique