Exercices AI Engineering Resumer une conversation longue
🎉

Bravo!

Débutant 🧠 Fondamentaux 10 XP 0 personnes ont réussi

Resumer une conversation longue

La sliding window a un defaut majeur : quand tu supprimes les anciens messages, tu perds du contexte. L'utilisateur a dit son prenom il y a 20 messages, et maintenant le chatbot ne sait plus comment il s'appelle. C'est frustrant.

La solution utilisee en production : avant de supprimer les vieux messages, tu les resumes. Au lieu de garder 50 messages detailles, tu gardes un resume de 2-3 phrases plus les 10 derniers messages. Ca economise des tokens tout en preservant le contexte essentiel.

Dans cet exercice, on simule le resume en extrayant les informations cles de chaque message (pas besoin d'un LLM pour ca, on fait du traitement de texte simple).

Tu vas ecrire une fonction resumer_conversation(messages, nb_recents=5) qui prend une liste de messages (chaque message est un dictionnaire avec "role" et "contenu") et un nombre de messages recents a garder intacts.

La fonction renvoie un dictionnaire avec deux cles :
- "resume" : une chaine qui concatene le contenu de tous les messages sauf les nb_recents derniers, separes par " | "
- "messages_recents" : la liste des nb_recents derniers messages, tels quels

Si la conversation a nb_recents messages ou moins, le resume est une chaine vide et tous les messages sont dans messages_recents.

Exemple :

messages = [
{"role": "user", "contenu": "Je m'appelle Alice"},
{"role": "assistant", "contenu": "Bonjour Alice"},
{"role": "user", "contenu": "J'ai 25 ans"},
{"role": "assistant", "contenu": "Note"},
{"role": "user", "contenu": "Parle-moi de Python"},
]
resumer_conversation(messages, nb_recents=2)
renvoie {
"resume": "Je m'appelle Alice | Bonjour Alice | J'ai 25 ans",
"messages_recents": [les 2 derniers messages]
}

Tests (4/5)

Resume correct
msgs = [{'role': 'user', 'contenu': 'A'}, {'role': 'assistant', 'contenu': 'B'}, {'role': 'user', 'contenu': 'C'}, {'role': 'assistant', 'contenu': 'D'}]
r = resumer_conversation(msgs, nb_recents=2)
assert r['resume'] == 'A | B'
assert len(r['messages_recents']) == 2
assert r['messages_recents'][0]['contenu'] == 'C'
Pas assez de messages pour resumer
msgs = [{'role': 'user', 'contenu': 'Salut'}]
r = resumer_conversation(msgs, nb_recents=5)
assert r['resume'] == ''
assert len(r['messages_recents']) == 1
Exactement nb_recents messages
msgs = [{'role': 'user', 'contenu': 'A'}, {'role': 'user', 'contenu': 'B'}]
r = resumer_conversation(msgs, nb_recents=2)
assert r['resume'] == ''
assert len(r['messages_recents']) == 2
Liste vide
r = resumer_conversation([], nb_recents=3)
assert r['resume'] == ''
assert r['messages_recents'] == []

+ 0 tests cachés

Indices (3 disponibles)

solution.py