tooling / ia
Context engineering: l'évolution du prompt engineering
9 juillet 2026·6 min de lecture

Introduction
Si votre stratégie pour guider une intelligence artificielle consiste uniquement à peaufiner des adjectifs dans un prompt système géant, vous gaspillez vos ressources. Avec l'avènement des agents autonomes fonctionnant sur de longs horizons et effectuant des dizaines d'appels d'outils, le véritable défi n'est plus de se focaliser que sur la formulation des instructions. Il réside surtout dans la gestion dynamique de la mémoire de travail du modèle. Bienvenue dans l'ère du _context engineering_.
Le terme a été popularisé en juin 2025. Tobi Lütke, PDG de Shopify, l'a défini comme _"l'art de fournir tout le contexte nécessaire pour que la tâche soit plausiblement résoluble par le LLM"_. Andrej Karpathy a précisé quelques jours plus tard : _"l'art délicat et la science de remplir la fenêtre de contexte avec exactement les bonnes informations pour l'étape suivante."_ Ce déplacement conceptuel est fondamental : il s'agit de passer de l'optimisation du langage à l'orchestration de l'information.
Le contexte désigne l'ensemble des jetons envoyés au modèle à chaque appel. Le gérer efficacement consiste à optimiser ces jetons face aux contraintes des grands modèles de langage. Bâtir des agents de production nécessite de penser en contexte : concevoir l'état global disponible pour le modèle à un instant précis et anticiper les comportements induits par cet état.
La RAM de l'IA : comprendre le budget d'attention
Les grands modèles de langage disposent de fenêtres de traitement de plus en plus vastes, atteignant parfois plus d'un million de jetons. Pourtant, l'attention du modèle n'est pas infinie. Chroma Research a documenté le phénomène de pourriture de contexte (_context rot_) en testant les principaux modèles du marché : tous sans exception voient leurs performances se dégrader à mesure que la fenêtre se remplit, et cette dégradation commence bien avant d'atteindre la limite maximale.
Pour comprendre cette limite, il faut regarder sous le capot des modèles de type Transformer (l'architecture de réseau de neurones sur laquelle reposent presque toutes les intelligences artificielles actuelles). Leur mécanisme d'attention compare chaque mot avec tous les autres pour en saisir le sens global. Ce calcul croisé est de nature quadratique. Concrètement, si vous doublez la quantité de texte, le modèle ne fait pas simplement deux fois plus d'efforts : il doit réaliser quatre fois plus d'opérations. C'est cette explosion mathématique qui explique pourquoi le traitement s'alourdit si vite à mesure que la fenêtre se remplit. Le modèle ne s'arrête pas de fonctionner d'un coup ; sa capacité de raisonnement s'érode simplement de manière progressive.
Ce déclin s'accompagne d'un biais de position bien connu : le modèle retient très bien le début et la fin de ce qu'il lit, mais tend à oublier le milieu. Pour couronner le tout, la présence de données superflues agit comme un bruit de fond. Ces distracteurs parasitent l'attention du modèle et le poussent à l'erreur, même lorsque la réponse recherchée figure textuellement dans son contexte.
Le contexte doit donc être traité comme une ressource rare à rendement marginal décroissant. Le rôle du développeur est de trouver la plus petite quantité de jetons à forte valeur ajoutée pour obtenir le comportement attendu.
Les quatre piliers du context engineering
Pour structurer la gestion de la mémoire des agents, nous pouvons diviser les pratiques en quatre catégories : écrire, sélectionner, compresser et isoler.
Écrire : déporter l'information hors du contexte actif
Pour éviter de saturer la mémoire de travail, l'agent doit pouvoir écrire des informations dans un espace de stockage externe.
- Les blocs-notes (_scratchpads_) : L'agent utilise des outils pour consigner son plan d'action et ses conclusions intermédiaires dans un fichier texte (comme un fichier de notes). Si la session doit être réinitialisée pour vider la mémoire, l'agent n'a qu'à relire ce fichier pour reprendre son travail.
- La mémoire à long terme : L'agent peut synthétiser ses apprentissages à la fin d'une tâche pour les sauvegarder dans une base de données. Ces connaissances persistantes serviront lors des sessions futures.
Sélectionner : le chargement juste-à-temps
Remplir la mémoire du modèle avec l'intégralité d'une base de données ou d'un codebase serait, pour les raisons évoquées ci-dessus, une erreur de conception.
- L'extraction juste-à-temps (_just-in-time_) : Au lieu d'injecter tous les fichiers d'un projet, l'agent dispose d'outils de recherche (comme la recherche textuelle ou sémantique) pour localiser et charger uniquement les extraits nécessaires au moment précis de leur utilisation.
- La sélection dynamique d'outils : Présenter des dizaines d'outils différents au modèle sature son attention et provoque des erreurs de sélection. Filtrer dynamiquement les outils disponibles en fonction de l'étape de la tâche améliore significativement la précision de sélection et la non-surcharge du contexte.
Compresser : réduire la taille de l'historique
Les agents génèrent un volume considérable de jetons via les retours d'appels d'outils et les messages système.
- Le nettoyage des outils (_tool clearing_) : Une fois qu'un outil a renvoyé ses données et que le modèle les a analysées, conserver l'intégralité du résultat brut dans l'historique est inutile. Le tool clearing permet de vider le contenu des appels passés tout en conservant la trace de l'appel pour maintenir la cohérence logique.
- La compaction : Lorsque le contexte approche de sa limite, une routine capture l'historique, en extrait un résumé de haute fidélité (les décisions clés, les bugs non résolus, l'état d'avancement) et réinitialise une nouvelle session vierge contenant uniquement ce résumé.
Isoler : diviser pour régner
- Les architectures multi-agents : Plutôt que de confier une tâche complexe à un unique agent dont le contexte va saturer, le travail peut être réparti entre plusieurs agents spécialisés dotés de contextes étroits et indépendants. L'agent coordinateur ne reçoit que des comptes-rendus synthétiques.
- L'isolation par variable : Les données lourdes (comme le code source complet ou des fichiers lourds) restent confinées dans un environnement d'exécution sécurisé (_sandbox_). L'agent manipule ces données à travers des variables et des pointeurs, sans jamais charger les objets volumineux dans sa mémoire de travail.
Ce que le développeur doit garder à l'oeil
Bâtir un système avec des agents de code impose des choix d'ingénierie logicielle classiques pour faciliter le travail de l'IA :
- L'organisation du projet : Des conventions de nommage strictes, des hiérarchies de dossiers claires (ou l'utilisation d'arbres syntaxiques par exemple) pour indexer le code sont essentiels. Si un développeur humain peine à naviguer dans votre architecture, un agent de code échouera également.
- Les fichiers de contexte persistants : Des outils comme Claude Code (avec son fichier
CLAUDE.md), Cursor (avec ses fichiersrules) chargent automatiquement des fichiers d'instructions dans la fenêtre de contexte à chaque session. Ces fichiers constituent une mémoire procédurale : les conventions du projet, les contraintes d'architecture et les processus à respecter. Maintenez-les courts et centrés sur ce qui change d'un projet à l'autre, pas sur ce que le modèle sait déjà faire. - La conception des outils pour la densité : Chaque résultat d'outil appelé par l'agent reste dans l'historique. Un outil qui retourne un dump brut de plusieurs milliers de caractères pollue le contexte durablement. Concevez vos outils pour qu'ils renvoient des résumés structurés et actionnables, puis utilisez le nettoyage de résultats pour éliminer le contenu des appels passés une fois consommés. Par exemple, au lieu de concevoir un outil de lecture de logs qui renvoie des milliers de lignes de serveur brutes, créez un outil qui filtre le fichier et retourne uniquement la liste des types d'erreurs uniques et les quelques dernières lignes de trace de la pile. L'agent obtient l'information clé en quelques mots plutôt que d'ingérer des blocs de texte inutiles.
- L'évaluation du contexte : Concevez des batteries de tests pour mesurer la fidélité des informations conservées après une étape de compaction ou de nettoyage. Sans mesures, vous optimisez votre gestion de contexte à l'aveugle.
Exemple concret : un gestionnaire de contexte pour agent de recherche
Voici un exemple d'implémentation en Python illustrant comment un orchestrateur peut automatiser la compaction de l'historique des messages et le nettoyage des résultats d'outils volumineux.
Dans ce code, le nettoyage des outils intervient pour supprimer les résultats de lecture de fichiers ou de requêtes réseau massives une fois qu'ils ont été consommés. Si le volume global de la conversation dépasse le seuil fixé, la méthode de compaction intervient pour condenser l'historique complet en un unique message de synthèse, libérant immédiatement de l'espace pour la suite de l'exécution.
L'intégration native dans les environnements de développement modernes
Bonne nouvelle pour les développeurs : ces mécanismes complexes de gestion de contexte ne doivent pas nécessairement être recodés à partir de zéro pour chaque projet. Les environnements de développement et les outils d'exécution agentiques modernes (_harnesses_) les intègrent désormais nativement sous le capot.
Des outils en ligne de commande comme Claude Code ou Gemini CLI, ainsi que les éditeurs intelligents tels que Cursor et Gemini IDE, appliquent ces stratégies de manière transparente. Ils analysent en arrière-plan votre historique de commandes, indexent la structure de vos projets et effectuent une sélection chirurgicale des extraits de code pertinents au moment exact où vous formulez une requête. Cette abstraction technique vous évite d'avoir à gérer manuellement la mémoire de travail de l'IA, vous permettant de vous concentrer sur la logique métier et la conception de vos applications.
Conclusion
Vouloir exploiter la puissance des grands modèles de langage en ignorant la physique de leur mémoire de travail est la recette assurée pour obtenir des agents instables en production. Le _context engineering_ n'est pas une simple technique d'optimisation : c'est un changement mature. Il nous force à traiter la fenêtre de contexte non pas comme un espace de stockage passif et infini, mais comme une ressource système dynamique, sujette à l'érosion de l'attention et au bruit de fond.
Bâtir des agents fiables sur le long terme exige une rigueur logicielle classique. En orchestrant l'écriture dans des blocs-notes déportés, en sélectionnant les données avec une extraction "juste-à-temps", en nettoyant l'historique des appels d'outils et en isolant les tâches complexes, l'IA a un cadre où elle peut raisonner avec clarté. Que vous choisissiez d'exploiter l'intégration native des éditeurs modernes ou de coder vos propres orchestrateurs, la règle d'or reste la même : la performance de vos agents dépend moins de la subtilité de vos prompts que de la bonne gestion de la propreté de leur mémoire de travail.
Sources pour l'écriture de l'article
- Anthropic Engineering : Effective Context Engineering for AI Agents : anthropic.com/engineering/effective-context-engineering-for-ai-agents
- Claude Cookbook : Context Engineering Tools : anthropics/claude-cookbooks
- LangChain Blog : Context Engineering for Agents : langchain.com/blog/context-engineering-for-agents
- Prompt Engineering Guide : Context Engineering : promptingguide.ai/guides/context-engineering-guide
- Anthropic Developer Documentation : Context Management APIs : platform.claude.com/docs
- Andrej Karpathy — Définition du Context Engineering (X, juin 2025) : x.com/karpathy/status/1937902205765607626
- Chroma Research : Context Rot : research.trychroma.com/context-rot