Exercices AI Engineering Construire un systeme de memoire
🎉

Bravo!

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

Construire un systeme de memoire

Les LLM n'ont pas de memoire entre les appels. Si tu envoies "Bonjour, je m'appelle Alice" puis "Quel est mon prenom ?", le LLM ne sait pas repondre car il ne se souvient pas du message precedent. Pour creer l'illusion d'une conversation, tu dois renvoyer les anciens messages a chaque appel.

Le probleme, c'est que les modeles ont une fenetre de contexte limitee (8k, 32k, 128k tokens). Si ta conversation dure longtemps, tu depasses la limite et le LLM plante ou oublie le debut. La solution la plus simple : la fenetre glissante (sliding window). Tu gardes seulement les N derniers messages.

C'est comme une file d'attente dans un magasin avec une capacite maximale. Quand un nouveau client arrive et que le magasin est plein, le premier client sort.

Tu vas creer une classe ConversationMemory qui gere l'historique d'une conversation avec une taille maximale.

La classe prend un parametre max_messages (par defaut 10) a l'initialisation.

ajouter(role, contenu) ajoute un message sous forme de dictionnaire {"role": role, "contenu": contenu}. Si le nombre de messages depasse max_messages, les plus anciens sont supprimes.

obtenir_historique() renvoie la liste des messages actuels.

compter() renvoie le nombre de messages actuels.

vider() supprime tous les messages.

Exemple :

mem = ConversationMemory(max_messages=3)
mem.ajouter("user", "Bonjour")
mem.ajouter("assistant", "Salut !")
mem.ajouter("user", "Ca va ?")
mem.ajouter("assistant", "Oui et toi ?")
mem.obtenir_historique()
renvoie les 3 derniers messages (le "Bonjour" a ete supprime)

Tests (4/5)

Ajouter et recuperer
mem = ConversationMemory()
mem.ajouter('user', 'Bonjour')
assert mem.compter() == 1
assert mem.obtenir_historique()[0] == {'role': 'user', 'contenu': 'Bonjour'}
Sliding window respectee
mem = ConversationMemory(max_messages=2)
mem.ajouter('user', 'A')
mem.ajouter('assistant', 'B')
mem.ajouter('user', 'C')
assert mem.compter() == 2
assert mem.obtenir_historique()[0]['contenu'] == 'B'
assert mem.obtenir_historique()[1]['contenu'] == 'C'
Vider la memoire
mem = ConversationMemory()
mem.ajouter('user', 'Test')
mem.vider()
assert mem.compter() == 0
assert mem.obtenir_historique() == []
Historique est une copie
mem = ConversationMemory()
mem.ajouter('user', 'Test')
h = mem.obtenir_historique()
h.append({'role': 'fake', 'contenu': 'intrusion'})
assert mem.compter() == 1, 'obtenir_historique doit renvoyer une copie, pas la liste interne'

+ 0 tests cachés

Indices (3 disponibles)

solution.py