Introduction

  • La limite des agents IA ne dépend pas seulement de la taille du modèle, mais aussi de l’art de la « gestion du contexte ». Cela revient à configurer la mémoire d’un CPU, déterminant la profondeur et l’efficacité de la pensée de l’agent.
  • Une fenêtre contextuelle ne doit pas être un dépotoir : un trop grand flot d’informations peut « empoisonner », perturber et obscurcir le jugement de l’IA. La précision est bien plus importante que la quantité.
  • Les experts maîtrisent l’art de la gestion du contexte des agents IA grâce à la stratégie des quatre mots : « Rédaction, Filtrage, Compression, Isolation », utilisant judicieusement la « mémoire » pour optimiser coûts et efficacité.
  • La concurrence de demain sera celle de l’efficacité systémique. Isoler des tâches à l’aide d’une architecture multi-agents, permettant à chaque agent de briller dans sa propre petite fenêtre, est essentiel pour la construction de systèmes de tâches complexes.

Résumé Central

Les agents (Agents) accomplissent leurs missions grâce au contexte (Context). Ce que l’on appelle « ingénierie du contexte » est l’art et la science d’injecter précisément les informations appropriées dans la fenêtre contextuelle de l’agent à chaque étape de sa tâche. Cet article résume les stratégies d’ingénierie du contexte utilisées par les agents IA contemporains en plusieurs modèles généraux.

Ingénierie du Contexte

Ingénierie du Contexte

Comme l’a dit Andrej Karpathy, les grands modèles de langage (LLM) sont comme un « nouveau système d’exploitation ». Le LLM est le CPU, tandis que sa « fenêtre contextuelle » est la RAM, servant de mémoire de travail pour le modèle. Tout comme la capacité de la RAM est limitée, la fenêtre contextuelle du LLM est également soumise à des contraintes de capacité lorsqu’il traite diverses sources contextuelles. L’un des principaux travaux d’un système d’exploitation est de gérer l’utilisation efficace de la RAM du CPU, et « l’ingénierie du contexte » joue un rôle similaire. Karpathy résume cela parfaitement :

L’ingénierie du contexte est « … un art et une science subtiles pour remplir précisément la fenêtre contextuelle en prévision de la prochaine étape (de calcul) ».

Ingénierie du Contexte

Lorsque nous développons des applications de LLM, quels types de contexte devons-nous gérer ? Ce concept général d’ingénierie du contexte comprend les types de contexte suivants :

  • Instructions – Prompts, mémoire, exemples à faible échantillonnage, descriptions d’outils, etc.
  • Connaissances – Faits, mémoires, etc.
  • Outils – Feedback sur les appels d’outils.

Ingénierie du Contexte pour les Agents

Cette année, avec l’augmentation des capacités des LLM dans le raisonnement et les appels d’outils, l’intérêt pour les agents IA a considérablement augmenté. Les agents exécutent des tâches en alternant entre les appels de LLM et les outils, et ils sont particulièrement efficaces pour gérer des tâches complexes de longue durée.

Ingénierie du Contexte pour Agents

Cependant, les tâches à long terme et les feedbacks d’appels d’outils en constante accumulation impliquent que les agents consomment souvent de nombreux tokens. Cela peut soulever de nombreux problèmes : déborder la capacité de la fenêtre contextuelle, entraînant des coûts et des délais accrus, allant jusqu’à nuire à la performance de l’agent. Drew Breunig a clairement souligné que des contextes trop longs peuvent engendrer des problèmes de performance de plusieurs manières :

  • • **Empoisonnement du Contexte ** : lorsque des hallucinations (informations erronées) pénètrent dans le contexte.
  • Distraction du Contexte : lorsque trop d’informations contextuelles inondent les connaissances d’entraînement originales du modèle.
  • Confusion du Contexte : lorsqu’une information contextuelle non pertinente influence la réponse du modèle.
  • Conflit du Contexte : lorsque différentes parties du contexte se contredisent.

Tenant compte de ces défis, la société Cognition AI a souligné l’importance de l’ingénierie du contexte :

« L’ingénierie du contexte » est en fait la tâche principale des ingénieurs construisant des agents IA.

La société Anthropic a également précisé :

Les agents ont généralement besoin de mener des dizaines de dialogues, ce qui exige que nous utilisions des stratégies de gestion de contexte attentives.

Comment les développeurs d’aujourd’hui relèvent-ils ce défi ? Je regroupe les méthodes existantes en quatre catégories : Écrire, Filtrer, Comprimer, Isoler et je les illustre avec des exemples.

Type de Mémoire

Écrire le Contexte

Écrire le contexte, c’est conserver des informations en dehors de la fenêtre contextuelle pour utilisation lors de l’exécution de la tâche par l’agent.

Zones de Travail (Scratchpads)

Lorsque les humains résolvent des problèmes, ils prennent des notes et gardent en mémoire certaines choses pour pouvoir les utiliser plus tard. Les agents acquièrent également progressivement ces capacités ! Prendre des notes avec une zone de travail est une méthode pour rendre l’information persistante pendant l’exécution de la tâche par l’agent. L’idée principale est de conserver les informations en dehors de la fenêtre contextuelle, tout en permettant à l’agent d’y accéder à volonté. Le système de recherche multi-agents d’Anthropic offre un exemple clair :

Le « Chercheur Principal » réfléchit d’abord à la manière de résoudre le problème et sauvegarde son plan dans la « mémoire » pour persister le contexte, car une fois que la fenêtre contextuelle dépasse 200 000 tokens, elle risque d’être coupée, et il est crucial de conserver le plan.

Les zones de travail peuvent être mises en œuvre de diverses façons. Cela peut être un simple appel d’outil, comme écrire un fichier ; ou un champ dans un objet d’état d’exécution, conservé constant tout au long de la session. Quoi qu’il en soit, la zone de travail permet à l’agent de conserver des informations utiles pour mieux accomplir ses tâches.

Mémoires (Memories)

Les zones de travail aident les agents à résoudre des tâches dans une seule session, mais parfois, les agents doivent se souvenir de choses sur plusieurs sessions. Le modèle Reflexion a introduit l’idée de réfléchir après chaque action de l’agent et de réutiliser ces mémoires générées. Le modèle Generative Agents peut synthétiser périodiquement des mémoires à partir de l’ensemble des feedbacks des agents passés.

Ces concepts ont été appliqués dans des produits populaires comme ChatGPT, Cursor et Windsurf. Tous possèdent des mécanismes pour automatiser la génération de mémoires à long terme en fonction des interactions entre les utilisateurs et les agents.

Mémoires

Filtrer le Contexte

Filtrer le contexte, c’est attirer les informations nécessaires dans la fenêtre contextuelle pour aider l’agent à exécuter sa tâche.

Zones de Travail (Scratchpad)

Le mécanisme de filtrage du contexte à partir de la zone de travail dépend de son implémentation. S’il s’agit d’un outil, l’agent n’a qu’à lire à l’aide d’un appel d’outil. Si c’est une partie de l’état d’exécution de l’agent, les développeurs peuvent exposer sélectivement certaines parties de l’état à l’agent à chaque étape. Cela permet un contrôle précis sur le contexte de la zone de travail fourni au LLM dans les tours suivants.

Mémoires (Memories)

Si l’agent a la capacité de stocker des mémoires, il doit aussi être capable de filtrer les mémoires pertinentes pour la tâche en cours. Cela est très utile pour plusieurs raisons : l’agent peut choisir des exemples à faible échantillonnage (mémo-situation) pour apprendre des comportements attendus ; envisager des instructions (mémo-programme) pour orienter son propre comportement ; ou sélectionner des faits (mémo-sémantique) pour fournir un contexte pertinent à la tâche.

Memory Type

Un grand défi consiste à garantir que les mémoires filtrées sont pertinentes. Certains agents populaires n’utilisent qu’une petite partie de fichiers fixes, qui sont toujours chargés dans le contexte. Par exemple, de nombreux agents codants utilisent ces fichiers pour stocker des instructions (« mémo-programme ») ou, dans certains cas, des exemples (« mémo-situation »). Claude Code utilise CLAUDE.md, tandis que Cursor et Windsurf utilisent des fichiers de règles.

Cependant, si l’agent a stocké un grand nombre de faits ou de relations de type « mémo-sémantique », le filtrage devient plus complexe. ChatGPT en est un bon exemple, car il filtre ses données à partir d’un grand ensemble de mémoires spécifiques à l’utilisateur.

Les embeddings vectoriels et/ou les graphes de connaissances sont des techniques d’indexation de mémoires couramment utilisées pour faciliter le filtrage. Pourtant, le filtrage des mémoires reste un défi. Lors de la conférence AIEngineer World Expo, Simon Willison a partagé un exemple où le filtrage des mémoires a échoué : ChatGPT a obtenu des informations sur sa localisation et les a accidentellement injectées dans l’image qu’il demandait. Cette récupération de mémoire inattendue peut donner à certains utilisateurs l’impression que la fenêtre contextuelle « ne leur appartient plus » !

Outils (Tools)

Les agents doivent utiliser des outils, mais si trop d’outils sont proposés, ils risquent d’être submergés. C’est généralement dû à un chevauchement potentiel des descriptions d’outils, ce qui confond le modèle lors du choix de l’outil à utiliser. Une méthode consiste à appliquer RAG (Récupération Augmentée par Génération) aux descriptions d’outils pour en récupérer les plus pertinentes selon leur similarité sémantique. Des études récentes ont montré que cette méthode pouvait tripler la précision des choix d’outils.

Connaissances (Knowledge)

La récupération augmentée par génération (RAG) est elle-même un vaste sujet et peut constituer un défi central de l’ingénierie du contexte. Les agents codants sont l’un des meilleurs exemples de la RAG dans les applications de production à grande échelle. Varun de Windsurf résume très bien certains des défis :

Indexer du code ≠ récupérer le contexte… Ce que nous faisons, c’est analyser le code à l’aide d’un AST (arbre de syntaxe abstrait) et diviser en frontières sémantiquement significatives… Mais à mesure que la taille du code augmente, la recherche par embeddings vectoriels devient peu fiable… Nous devons compter sur une combinaison de plusieurs techniques, comme grep/recherche de fichiers, récupération basée sur des graphes de connaissances, et… une étape de réordonnancement, où le contexte est classé selon sa pertinence.

Compresser le Contexte

Compresser le contexte signifie ne conserver que les tokens nécessaires à l’exécution de la tâche.

Résumé du Contexte (Context Summarization)

Les interactions avec les agents peuvent s’étendre sur des centaines de tours, en utilisant des outils qui consomment beaucoup de tokens. Résumer est une méthode courante pour relever ces défis. Si vous avez utilisé Claude Code, vous avez déjà vu son application pratique. Lorsque l’utilisation de la fenêtre contextuelle dépasse 95 %, Claude Code exécute une « compression automatique », résumant l’ensemble de l’interaction de l’utilisateur avec l’agent. Cette compression du parcours de l’agent peut adopter plusieurs stratégies, comme le résumé récursif ou le résumé hiérarchique.

Résumé du Contexte

Intégrer des étapes de résumé au moment opportun dans la conception des agents est également très utile. Par exemple, cela peut être utilisé pour post-traiter certains appels d’outils (en particulier des outils ayant une forte consommation de tokens, comme les outils de recherche). De plus, Cognition a mentionné effectuer des résumés aux frontières de transition entre agents afin de réduire la consommation de tokens lors du transfert de connaissances. Il peut être difficile de capturer certains événements ou décisions spécifiques en résumé. Pour cela, Cognition a utilisé un modèle de fine-tuning, soulignant le travail considérable que cette étape peut nécessiter.

Élagage du Contexte (Context Trimming)

Les résumés utilisent souvent des LLM pour extraire les segments de contexte les plus pertinents, tandis que l’élagage ressemble davantage à un filtrage ou, comme l’a dit Drew Breunig, à une « taille » du contexte. Cela peut emprunter des règles heuristiques codées, comme supprimer les messages plus anciens d’une liste de messages. Drew a également mentionné Provence, un élagage contextuel entraîné pour des tâches de questions-réponses.

Isoler le Contexte

Isoler le contexte signifie diviser le contexte afin d’aider l’agent à exécuter sa tâche.

Multi-agents

L’une des formes les plus populaires d’isolation du contexte consiste à le répartir entre plusieurs sous-agents. L’une des motivations de la bibliothèque Swarm d’OpenAI est la « séparation des points de focus », où une équipe d’agents gère des sous-tâches. Chaque agent a son propre ensemble d’outils, des instructions et des fenêtres contextuelles indépendantes.

Multi-agents

Le système de recherche multi-agents d’Anthropic apporte des preuves solides à cet égard : plusieurs agents ayant des contextes indépendants se montrent plus performants qu’un seul agent, en grande partie parce que la fenêtre contextuelle de chaque sous-agent peut se concentrer sur une sous-tâche plus étroite. Comme le mentionne son blog :

Les sous-agents fonctionnent en parallèle avec leurs propres fenêtres contextuelles, explorant différents aspects d’un problème.

Cependant, les multi-agents rencontrent également des défis, y compris la consommation de tokens (par exemple, Anthropic a rapporté que son utilisation de tokens est 15 fois supérieure à celle de la conversation), la nécessité d’une ingénierie des prompts soignée pour planifier le travail des sous-agents, et des problèmes de coordination entre les sous-agents.

Isolement du Contexte par Environnements (Context Isolation with Environments)

Le projet Deep Research de HuggingFace montre un autre exemple fascinant d’isolement du contexte. La plupart des agents utilisent des appels d’outils API qui retournent des objets JSON (paramètres des outils), puis les transmettent aux outils (comme l’API de recherche) pour obtenir des retours (comme des résultats de recherche). HuggingFace opte pour un CodeAgent, qui génère directement le code pour le nécessaire appel d’outil. Ce code est ensuite exécuté dans un environnement sandbox. Seul le contexte spécifique de l’appel d’outil (comme la valeur retournée) est renvoyé au LLM.

Isolement du Contexte par Environnements

Cela permet de garder le contexte isolé de l’environnement vis-à-vis du LLM. Hugging Face souligne que c’est une excellente méthode pour isoler des objets consommant beaucoup de tokens :

Les Code Agents sont capables de mieux gérer l’état… Besoin de conserver des images/son/données pour une utilisation ultérieure ? Aucun problème, il suffit de les affecter en tant que variable, et vous pourrez l’utiliser plus tard.

État

Il convient de mentionner que l’objet d’état d’exécution de l’agent est également un bon moyen d’isoler le contexte. Cela peut fonctionner comme un sandbox. L’objet d’état peut avoir un schéma (Schema, par exemple un modèle Pydantic) contenant des champs pouvant être écrits dans le contexte. Un champ dans le schéma (comme messages) peut être exposé au LLM à chaque interaction de l’agent, tandis que d’autres champs peuvent conserver les informations isolées pour une utilisation plus sélective.

Conclusion

Les modèles d’ingénierie du contexte pour les agents continuent d’évoluer, mais nous pouvons les regrouper en quatre catégories principales : Écrire, Filtrer, Comprimer, Isoler :

  • • Écrire le contexte signifie conserver des informations en dehors de la fenêtre contextuelle pour utilisation lors de l’exécution de la tâche par l’agent.
  • • Filtrer le contexte signifie attirer les informations nécessaires dans la fenêtre contextuelle pour aider l’agent à exécuter sa tâche.
  • • Comprimer le contexte signifie ne conserver que les tokens nécessaires à l’exécution de la tâche.
  • • Isoler le contexte signifie diviser le contexte afin d’aider l’agent à exécuter sa tâche.

Comprendre et appliquer ces modèles est le cœur du travail actuel de construction d’agents IA efficaces.