Débutant
🧠 Fondamentaux
10 XP
0 personnes ont réussi
Gerer l'historique de conversation
Dans un vrai chatbot, l'utilisateur pose plusieurs questions d'affilee. "Combien de jours de conges ?" puis "Et si je suis en CDD ?" La deuxieme question n'a de sens que si le modele se souvient de la premiere. Pour ca, tu dois garder l'historique de la conversation et le renvoyer a chaque appel.
Mais attention : chaque message coute des tokens, et les tokens coutent de l'argent. Si ta conversation fait 200 messages, tu vas payer une fortune a chaque nouvelle question (parce que tu renvoies TOUT l'historique). En plus, les modeles ont une limite de contexte (128k tokens pour GPT-4o, ca parait enorme mais ca part vite).
La solution : un gestionnaire de conversation qui garde les N derniers messages et jette les plus anciens. C'est une fenetre glissante, comme une file d'attente ou les vieux messages sortent quand les nouveaux entrent.
Cree une classe ConversationManager qui gere l'historique d'une conversation. Elle prend un system_prompt et un max_messages (par defaut 20) a la construction.
La classe doit avoir ces methodes :
add_message(role, content) : ajoute un message a l'historique. Si le nombre de messages (sans compter le system prompt) depasse max_messages, supprime les plus anciens pour rester dans la limite.
get_messages() : renvoie la liste complete des messages (system prompt + historique) au format API OpenAI.
get_history() : renvoie uniquement l'historique (sans le system prompt), sous forme de liste de tuples (role, content).
clear() : vide l'historique (mais garde le system prompt).
Exemple :
conv = ConversationManager("Tu es un assistant.", max_messages=4) conv.add_message("user", "Bonjour") conv.add_message("assistant", "Salut !") conv.get_messages() renvoie [ {"role": "system", "content": "Tu es un assistant."}, {"role": "user", "content": "Bonjour"}, {"role": "assistant", "content": "Salut !"} ]
conv = ConversationManager("Sys", max_messages=3)
for i in range(10):
conv.add_message("user", f"Message {i}")
history = conv.get_history()
assert len(history) == 3, f"L'historique doit contenir max 3 messages, pas {len(history)}"
# Les 3 derniers messages sont gardes
assert history[0][1] == "Message 7"
assert history[2][1] == "Message 9"
Clear vide l'historique
conv = ConversationManager("Sys")
conv.add_message("user", "Test")
conv.add_message("assistant", "OK")
conv.clear()
messages = conv.get_messages()
assert len(messages) == 1, "Apres clear, il ne doit rester que le system prompt"
assert messages[0]["role"] == "system"