Module 6 — Fenêtre de contexte et gestion de la mémoire
Un LLM ne se souvient pas d'un tour à l'autre. Ce qu'il « sait » d'une conversation ne dépend que de ce qui se trouve dans son invite à l'appel courant. C'est ce texte, mesuré en jetons, qu'on appelle le contexte. Pour notre assistant de support, la question n'est pas académique : un client peut envoyer un historique de tickets, un extrait de CGV, une facture, plus la question elle-même. Faut-il tout mettre dans l'invite ? La réponse est presque toujours non, et ce module explique pourquoi.
La fenêtre de contexte, une contrainte à deux visages
Chaque modèle publie une taille de fenêtre de contexte maximale, exprimée en jetons. Les modèles récents affichent des fenêtres allant de 4 000 à plus de 200 000 jetons.
| Modèle représentatif (2026) | Contexte maximal | Contexte utile en pratique |
|---|---|---|
| Modèles 7-8 milliards ouverts standard | 8 000 - 32 000 | 4 000 - 8 000 |
| Modèles ouverts contexte long | 128 000 - 200 000 | 32 000 - 64 000 |
| Modèles propriétaires haut de gamme | 200 000 - 1 000 000 | 32 000 - 100 000 |
L'écart entre le maximum annoncé et le contexte utile est capital. Un modèle peut techniquement lire 200 000 jetons sans erreur, et pourtant s'y comporter de plus en plus mal. La cause tient à un phénomène étudié depuis 2023.
La perte au milieu
Liu et al. (2023) ont montré qu'un LLM, placé face à une information critique enfouie dans un contexte long, la retrouve très bien si elle est au début ou à la fin, mais très mal si elle est au milieu. La courbe de précision en fonction de la position de l'information dessine un U : haute aux extrémités, basse au milieu. Le phénomène s'appelle lost in the middle, ou perte au milieu.
Le mécanisme n'est pas pleinement compris, mais deux facteurs contribuent. D'abord, la position du texte est encodée par des vecteurs qui, aux positions éloignées vues rarement pendant l'entraînement, sont moins bien appris. Ensuite, l'attention se répartit sur toute la séquence : plus il y a de jetons, plus la masse individuelle sur chaque jeton est faible, et l'information critique se noie dans le bruit.
Pour notre assistant, la conséquence pratique est directe. Mettre un historique de vingt messages en tête d'invite puis poser la question à la fin marche mieux que l'inverse, et marche beaucoup mieux qu'un ordre aléatoire.
def construire_invite(historique, contexte_produit, question):
# Ordre optimal : consigne, question au debut, contexte long au milieu,
# rappel de la question a la fin.
return (
"Tu es l'assistant support d'ACME. Reponds en francais, concisement.\n\n"
f"Question du client : {question}\n\n"
"--- Contexte produit ---\n"
f"{contexte_produit}\n"
"--- Historique ---\n"
f"{historique}\n\n"
f"Rappel : la question est '{question}'. Reponse :"
)
Ce simple rappel de la question à la fin gagne systématiquement quelques points d'exactitude sur les jeux de test dès que le contexte dépasse 4 000 jetons.
Le coût du contexte, quadratique en attention
Le calcul de l'attention d'un Transformer est en pour une séquence de jetons. Doubler le contexte multiplie par quatre le calcul et la mémoire d'attention. La latence perçue par l'utilisateur suit la même loi.