Fenêtre Contextuelle Glissante
Ce que vous saurez dans 3 minutes
- L’analogie de la “Lampe Torche” pour comprendre la vision limitée de l’IA.
- Pourquoi conserver le System Prompt est vital même quand on glisse.
- Comment implémenter une
ConversationBufferWindowMemoryavec LangChain.
1. Comprendre
L’Analogie de la Lampe Torche
Imaginez une fresque géante peinte sur un mur de 100 mètres (votre conversation entière). Vous êtes dans le noir complet avec une lampe torche (le contexte de l’IA). Le faisceau de la lampe ne peut éclairer que 5 mètres à la fois. Pour voir la suite de la fresque, vous devez avancer. Mais en avançant, ce qui était au début (les 5 premiers mètres) retombe dans l’obscurité.
- Lumière = Ce que l’IA “voit” pour générer sa réponse.
- Obscurité = Ce que l’IA a oublié (sauf si vous lui rappelez).
- Faisceau = La taille de la fenêtre (ex: 8k tokens).
Le Mécanisme FIFO
La Fenêtre Glissante (Sliding Window) applique une logique FIFO (First-In, First-Out). C’est un tapis roulant.
- La conversation démarre, la mémoire se remplit.
- La limite est atteinte (le verre est plein).
- L’utilisateur parle à nouveau.
- Pour faire rentrer ce nouveau message, le système supprime le message le plus vieux.
2. Appliquer
Implémentation Standard (LangChain)
C’est la stratégie par défaut pour les chatbots simples.
On définit une variable k qui est le nombre d’échanges (paires User/AI) à garder.
Si k=5, l’IA se souvient seulement des 5 derniers “Allers-Retours”.
from langchain.memory import ConversationBufferWindowMemoryfrom langchain.chains import ConversationChainfrom langchain_openai import OpenAI
# k=2 signifie qu'on garde les 2 derniers échanges seulementmemory = ConversationBufferWindowMemory(k=2)
conversation = ConversationChain( llm=OpenAI(temperature=0), memory=memory, verbose=True)
# Tour 1conversation.predict(input="Salut, je suis François.")# Mémoire : [François]
# Tour 2conversation.predict(input="Il fait beau aujourd'hui.")# Mémoire : [François, Météo]
# Tour 3conversation.predict(input="Quel est mon nom ?")# Mémoire : [Météo, Question Nom] -> "François" a été oublié ! (Glissement)# Réponse de l'IA : "Je ne connais pas votre nom."La Ruse du “System Prompt” Épinglé
Pour éviter le problème d’amnésie des règles de base, les systèmes modernes utilisent une fenêtre glissante modifiée. Ils gardent toujours le bloc #0 (Le System Prompt) fixe, et ne font glisser que les messages de #1 à #N.
Structure du Contexte envoyé au LLM :
- 📌 System Prompt (Fixe) : “Tu es un assistant expert…”
- ✂️ [Messages supprimés par glissement]
- 📜 Messages Récents (Glissants) : Les 10 derniers échanges.
3. Aller plus loin
Fenêtre Glissante vs RAG
La fenêtre glissante est une gestion de mémoire à court terme (Short-Term Memory). Pour se souvenir de choses lointaines (le nom d’Alice dit il y a 3 heures), on utilise le RAG (Retrieval Augmented Generation) ou mémoire vectorielle, qui est une mémoire à long terme.
- Sliding Window : “De quoi on parle maintenant ?”
- RAG : “Que sais-je sur ce sujet dans mes archives ?”
Limites et Évolution
Avec l’arrivée de modèles à contexte gigantesque (Gemini 1.5 Pro et son million de tokens), la fenêtre glissante devient moins critique pour les petites conversations. On peut souvent tout mettre dans le contexte (“Brute Force”). Cependant, pour des raisons de coût et de vitesse, la fenêtre glissante reste la norme industrielle pour les chatbots grand public. Payer pour ré-analyser 1 million de tokens à chaque “Bonjour” est ruineux.
Questions Fréquentes
L’IA prévient-elle quand elle oublie ?
Non. L’effacement est silencieux. Si le prompt glisse hors de la fenêtre, pour l’IA, l’événement n’a jamais existé.
Quelle est la taille idéale (k) ?
Cela dépend de votre budget token et du modèle. Généralement, on vise à remplir 70-80% de la fenêtre contextuelle du modèle pour garder une marge de sécurité pour la réponse.
Notions Liées (Spider Web)
- Concept : Context Window
- Alternative : RAG
- Unité : Token
Ressources Externes
- LangChain Docs : Memory types