Fenêtre de contexte d'un agent LLM : ce qu'elle contient et pourquoi l'agent oublie les règles
La fenêtre de contexte d'un LLM est l'ensemble du texte que le modèle voit à chaque réponse : prompt système, fichiers d'instructions, historique de la conversation, fichiers lus et sorties des outils. Cette fenêtre a une limite stricte en tokens, mais la qualité de l'attention baisse bien avant d'atteindre cette limite. C'est pourquoi, dans une longue session, l'agent commence à perdre les règles. Ce qui aide : des instructions courtes, la compaction, de nouvelles sessions avec un fichier de plan et la délégation du travail bruyant à des subagents.
Qu'est-ce que la fenêtre de contexte d'un LLM
La fenêtre de contexte d'un LLM est l'ensemble du texte que le modèle reçoit en entrée pour générer sa réponse suivante. Le modèle n'a pas de mémoire au sens humain : tout ce qu'il « sait » de votre tâche à un instant donné se trouve dans cette fenêtre. Ce qui n'est pas dans la fenêtre n'existe pas pour lui.
La taille de la fenêtre se mesure en tokens, c'est-à-dire en fragments de mots. Pour le français comme pour le russe, un token couvre en moyenne moins de texte qu'en anglais, si bien qu'une même instruction coûte souvent davantage de tokens. Les modèles actuels ont des fenêtres de plusieurs centaines de milliers de tokens, et l'on pense que la place suffira pour tout. En pratique, la place d'un agent s'épuise plus vite qu'on ne l'imagine, et il commence à moins bien travailler encore plus tôt.
Ce qui entre dans la fenêtre de contexte d'un agent
Un agent de programmation dispose de trois sources d'information : le prompt système qui décrit la tâche, le contenu des fichiers qu'il a lus, et les sorties des outils qu'il a appelés. Toutes trois vivent dans la même fenêtre et se disputent la place.
| Élément | Quand il entre | Coût habituel |
|---|---|---|
| Prompt système de l'agent et descriptions des outils | au début de chaque session | coût fixe, peu dépendant de vous |
| CLAUDE.md, AGENTS.md et autres fichiers d'instructions | au début de la session, en entier | de quelques centaines à des dizaines de milliers de tokens — cela dépend de vous |
| Vos messages et les réponses de l'agent | s'accumulent tout au long de la conversation | augmente à chaque échange |
| Fichiers lus | quand l'agent les ouvre | un gros fichier représente des milliers de tokens d'un coup |
| Sorties des commandes : tests, journaux, build, grep | après chaque appel | souvent la partie la plus volumineuse et la moins utile |
Point essentiel : rien de tout cela ne disparaît de lui-même. Le journal des tests qui ont échoué, utile il y a vingt étapes, reste dans la fenêtre et détourne l'attention de l'étape en cours. Une longue session est une meule qui ne cesse de grossir, où il est de plus en plus difficile de retrouver l'aiguille.
Pourquoi l'agent oublie les règles dans une longue session
Plainte fréquente : au début de la session, l'agent respecte soigneusement les règles du CLAUDE.md, puis au bout d'une heure il commence à les enfreindre. Il ne les a pas « oubliées » au sens strict : le texte des règles est toujours dans la fenêtre. Le problème tient à la façon dont le modèle répartit son attention sur un long texte.
Lost in the middle
Une étude de Liu et coauteurs, publiée en 2023, a montré que les modèles de langage exploitent nettement mieux les informations placées au début et à la fin d'un long contexte que celles du milieu. Le fichier d'instructions est chargé au début de la session, mais à mesure que la conversation avance, du texte s'accumule au-dessus et en dessous. La règle qui était bien visible se retrouve peu à peu dans la zone où le modèle « voit » le moins bien.
La part des règles dans la fenêtre diminue
Dans une session neuve, les instructions représentent une part notable du contexte. Après une centaine d'appels d'outils, elles deviennent un petit fragment au milieu des journaux, des diffs et du code lu. Le signal est le même, mais le bruit autour est des dizaines de fois plus important.
Les exemples récents l'emportent sur les anciennes règles
Le modèle s'appuie fortement sur ce qui s'est passé récemment dans la conversation. Si l'agent a plusieurs fois contourné une règle et que cela lui a été pardonné, ce schéma pèse dans l'historique davantage qu'une ligne d'instruction quelque part au début.
Context rot : la dégradation avant la limite de la fenêtre
Context rot (« pourrissement du contexte ») désigne l'effet par lequel la qualité des réponses baisse à mesure que la fenêtre se remplit, alors même que la limite technique est encore loin. Le modèle accepte formellement 200 000 tokens, mais avec 150 000 il travaille moins bien qu'avec 20 000 : il confond davantage de détails, reprend des solutions déjà écartées, perd des instructions.
Signes qu'une session « a pourri » :
- l'agent propose une approche que vous avez ensemble rejetée il y a une demi-heure ;
- il confond les noms de fichiers et de fonctions déjà discutés ;
- il cesse de lancer les contrôles qu'il lançait lui-même au début ;
- les réponses deviennent plus longues et plus floues, des « j'ai aussi corrigé… » apparaissent.
Ajouter une règle de plus ne sert à rien : la nouvelle règle se perdra dans le même bruit. Il faut réduire le bruit.
La compaction du contexte
La compaction consiste à compresser l'historique de la session : le modèle rédige un résumé de ce qui s'est passé, et la conversation continue à partir de ce résumé au lieu de l'historique complet. La fenêtre se libère, et l'essentiel du travail semble préservé.
Dans Claude Code, la commande /compact permet de lancer cette compaction, avec une indication sur ce qu'il faut privilégier. Lorsque la fenêtre approche de la limite, Claude Code effectue aussi la compaction automatiquement. La commande /clear efface entièrement l'historique et repart de zéro, et /context montre ce qui occupe la fenêtre.
/context
/compact conserve : objectif de la tâche, décisions prises avec leurs raisons, liste des fichiers modifiés, ce qui reste à vérifier
/clear
Ce qui est dangereux dans la compaction
Un résumé perd toujours des détails. Le résumé peut omettre la solution écartée et la raison du rejet, la formulation exacte d'une exigence ou une précision convenue en passant. Après la compaction, l'agent travaille avec le résumé de sa propre session, écrit par quelqu'un d'autre. C'est pourquoi les éléments importants se conservent mieux dans des fichiers qui survivront à n'importe quelle compaction, et non dans l'historique de la conversation.
Compaction ou nouvelle session
| Situation | Que faire |
|---|---|
| La tâche est presque finie, il faut juste un peu de place | Compaction avec une indication sur ce qu'il faut conserver |
| Une tâche est terminée, une autre commence | Nouvelle session : l'ancien historique ne fait que gêner |
| La session « a pourri », l'agent tourne en rond | Noter l'état dans un fichier de plan, puis ouvrir une nouvelle session |
| Une exploration longue du code ou des journaux est nécessaire | Confier l'exploration à un subagent |
Comment économiser la fenêtre de contexte
Économiser le contexte ne concerne pas le prix des tokens, mais la qualité du travail. Moins il y a de bruit dans la fenêtre, plus l'attention va à la tâche et aux règles.
1. Un fichier d'instructions court, qui sert de routeur
Le CLAUDE.md ou l'AGENTS.md d'entrée est lu en entier à chaque session. Un fichier de 600 lignes représente environ 10 000 à 20 000 tokens de coût permanent. Gardez-y les commandes de vérification, les contraintes strictes et la carte du projet, et placez les détails par thème dans des documents séparés, que l'agent n'ouvre qu'en cas de besoin.
2. Des connaissances chargées à la demande
Dans les skills de Claude Code, seule leur brève description entre au départ dans le contexte ; le texte complet de l'instruction ne se charge que lorsque le skill est nécessaire à la tâche. C'est une bonne manière de garder à portée de main les procédures rares — déploiement, migrations, publication — sans les payer à chaque session.
3. Des subagents pour le travail bruyant
Un subagent travaille dans sa propre fenêtre de contexte et ne renvoie à la session principale que le résultat. La recherche dans un grand code, l'analyse d'un long journal, l'étude d'un module inconnu : tout cela peut être confié à un subagent, qui renvoie quelques paragraphes de conclusions au lieu de milliers de lignes de sortie brute.
4. Des sorties d'outils silencieuses
Les sorties de commandes sont le principal consommateur de la fenêtre. Configurez les commandes de vérification pour qu'elles n'impriment qu'une ligne en cas de succès, et seulement l'essentiel en cas d'erreur : le test qui a échoué et son message, et non le journal complet du build.
# bruyant : des milliers de lignes dans la fenêtre à chaque exécution
pytest -v
# silencieux : en cas de succès une ligne, en cas d'échec seulement les tests en erreur
pytest -q --tb=short
# journal : non pas en entier, mais seulement la fin et les erreurs
tail -n 50 app.log | grep -i error
5. Une tâche, une session
Ne faites pas passer une seule session par trois tâches sans rapport. L'historique de la première tâche ne sert à rien pour la troisième, mais il occupe de la place et brouille l'agent. Une fois la tâche finie et le résultat fixé, ouvrez une nouvelle session.
6. L'état dans des fichiers, et non dans l'historique
Tout ce qui doit survivre à la compaction et à une nouvelle session doit être écrit dans le dépôt : objectif, décisions prises avec leurs raisons, solutions écartées, ce qui a été fait et comment on l'a vérifié, prochaine étape. Par exemple, dans PLAN.md et PROGRESS.md. La nouvelle session commence alors non pas par un récit, mais par un document précis, et vous pouvez sans crainte effacer l'historique.
# PROGRESS.md
## Objectif
Passer le calcul des remises aux centimes entiers
## Fait (vérifié)
- app/payments/discount.py : float → int, make test vert
- Migration 041 ajoutée, appliquée en local
## Décisions
- Arrondi bancaire, comme chez le prestataire de paiement
## Écarté
- Decimal dans le modèle : casse la sérialisation des webhooks
## Prochaine étape
Mettre à jour le scénario e2e de la commande et lancer make e2e
Les règles critiques ne doivent pas reposer seulement sur la fenêtre
Même un contexte parfaitement organisé ne garantit pas le respect des règles : le texte dans la fenêtre influence le modèle, mais ce n'est pas une interdiction exécutable. Si une violation est inacceptable, la règle doit être vérifiée mécaniquement. Dans Claude Code, cela passe par les hooks — commandes lancées lors des événements de l'agent, capables de bloquer une action — et par les réglages de droits qui interdisent certains outils ou certaines commandes. Les linters, les tests et la CI fonctionnent indépendamment de ce qui se passe dans la fenêtre de l'agent.
Bonne règle de harnais : tout ce qui peut être vérifié automatiquement l'est, et la fenêtre de contexte ne conserve que ce qui demande du jugement.
En résumé
La fenêtre de contexte d'un LLM est le seul endroit où l'agent voit votre tâche, et elle se remplit plus vite qu'il n'y paraît : les instructions, l'historique, les fichiers lus et les sorties de commandes s'accumulent jusqu'à la fin de la session. La qualité baisse bien avant la limite technique, les règles situées au milieu d'un long contexte se perdent, et la compaction sauve de la place au prix des détails. Gardez des instructions courtes, chargez les connaissances rares à la demande, confiez le travail bruyant aux subagents, conservez l'état dans des fichiers, et appuyez les règles critiques par des hooks et des contrôles. Le travail avec le contexte de l'agent est présenté en pratique dans le cours sur l'ingénierie des harnais.
Questions fréquentes
Quelle est la taille de la fenêtre de contexte de Claude ?
Cela dépend du modèle et de l'offre. Le repère habituel est d'environ 200 000 tokens, certains modèles et configurations offrent davantage. Les valeurs exactes se trouvent dans la documentation d'Anthropic pour le modèle concerné.
Un modèle à grande fenêtre résout-il le problème des règles oubliées ?
En partie seulement : il y a davantage de place, mais l'effet lost in the middle et le context rot ne disparaissent pas. Une grande fenêtre ne remplace ni des instructions courtes ni une session propre.
Faut-il répéter une règle importante dans un message quand l'agent la viole ?
Un rappel ponctuel aide, car un texte récent placé à la fin du contexte est mieux pris en compte par le modèle. Mais si vous devez rappeler la règle en permanence, il faut la garantir par une vérification ou un hook.
Comment savoir ce qui occupe la fenêtre de contexte dans Claude Code ?
La commande /context indique la place occupée par le prompt système, les outils, les fichiers de mémoire et l'historique des messages. C'est le moyen rapide de voir si un CLAUDE.md trop gros ou un historique trop long consomme la fenêtre.
Qu'est-ce qui se perd en premier lors de la compaction ?
Les accords qui n'existaient que dans la conversation : solutions écartées, précisions sur les exigences, petits détails. Tout ce qui est écrit dans les fichiers du dépôt, l'agent peut le relire.
Ce sujet est traité en détail avec de la pratique dans le cours « Harness Engineering: инженерия надёжности AI-агентов ».
- Карта репозитория для AI-агента: структура проекта и состояние без памяти между сессиями
- AGENTS.md: почему большой файл инструкций не работает и как устроить роутер
- Память AI-агента между сессиями: session handoff, PROGRESS.md и bootstrap-контракт