Il semble que tout le monde converge vers la même architecture d'agent : un LLM, exécuté en boucle, appelant des outils, s'exécutant dans un bac à sable. Claude Code - sans doute la première manifestation très médiatisée de ce phénomène - est sorti il y a plus d'un an et demi. Deep Agents, notre harnais d'agent, a été lancé il y a plus d'un an. Cette tendance se dessine depuis un certain temps.
Rien de mauvais en soi dans cette convergence, mais elle a suscité chez certains ingénieurs en IA avec lesquels j'ai échangé récemment le sentiment que « tous les problèmes difficiles sont résolus » ou « qu'il n'y a plus de nouveaux problèmes d'ingénierie IA à résoudre ».
Quand les gens expriment ce sentiment, je pense qu'ils parlent en grande partie des pratiques d' ingénierie du contexte que nous mettons en œuvre pour faire fonctionner les agents. Et dans une certaine mesure, ils ont raison - nous en sommes tous arrivés à un grand nombre de solutions d'ingénierie du contexte plus ou moins standardisées :
- Résumer les longs fils de discussion quand ils deviennent trop volumineux pour la fenêtre de contexte
- Externaliser les grands résultats d'appels d'outils
- Les Skills pour la divulgation progressive
- La recherche d'outils pour gérer un grand nombre d'outils
- Les sous-agents pour l'isolation du contexte
- Bash comme outil principal
La bonne nouvelle (pour les amateurs d'ingénierie du contexte comme moi) est que je pense que nous assistons à un changement en marche d'escalier des capacités des agents, ou du moins de la façon dont ils sont utilisés. Concrètement, au cours des derniers mois, chaque créateur d'agents avec qui j'ai discuté a réfléchi aux agents proactifs, toujours actifs et orientés vers un objectif. Le cœur de ce type d'agent présente de nombreuses similitudes avec les agents de codage, mais il comporte également un ensemble de nouveaux défis. J'en souligne quelques-uns ci-dessous. Nous (chez LangChain, et dans l'industrie) n'avons pas nécessairement de solutions (ou du moins, de solutions générales) pour ces défis, et y réfléchir constitue donc le plus grand plaisir que j'ai eu depuis un moment !
Comment être proactif sans être agaçant: ces agents proactifs s'exécutent en arrière-plan et soit écoutent des flux d'événements , soit sont réveillés par des battements de cœur. D'un côté, ils doivent pouvoir pousser des éléments vers l'utilisateur - cela crée un sentiment d'assistance. De l'autre, si vous poussez trop de notifications vers l'utilisateur, vous risquez de le submerger. Calibrer cela pour offrir une expérience agréable (ni trop, ni trop peu) reste un défi difficile d'ingénierie du contexte !
La mémoire: La mémoire des agents est un sujet dont nous parlons avec les créateurs depuis un certain temps. Les systèmes de mémoire finissent par comporter deux parties : la structure de données sous-jacente et une couche d'intelligence (un agent) autour des données. Les structures de données sont souvent assez simples (fichiers, une chaîne unique). La partie la plus difficile de la couche d'intelligence consiste à déterminer ce qu'il faut retenir. Comme pour la proactivité, il est facile de se tromper dans les deux extrêmes (ne rien retenir du tout, ou retenir des détails beaucoup trop granulaires). Comme cette couche d'intelligence qui décide de ce qu'il faut retenir est souvent elle-même un agent (simple), l'ingénierie du contexte autour de ce qu'il faut retenir et quand reste un problème ouvert.
Async: Ces agents ont des durées d'exécution de plus en plus longues et interagissent avec d'autres systèmes (outils, autres agents) qui ont eux-mêmes des durées d'exécution de plus en plus longues. Cependant, on veut presque toujours s'assurer que l'agent principal qui interagit avec l'utilisateur reste réactif aux nouveaux messages. Tout cela conduit à une architecture où de plus en plus de travail est effectué dans des outils et des sous-agentsasynchrones. Cela présente de nouveaux défis d'ingénierie du contexte : comment notifier l'agent principal lorsque ce travail est terminé ? Comment gérer les situations où l'agent principal est encore en cours d'exécution, par rapport aux cas où il a terminé ? Et s'il est en pause en attente d'une approbation humaine ?
Suivi des objectifs: Les agents passent de l'exécution de tâches au travail vers des objectifs. Des agents comme Hone en sont un excellent exemple. Comment concevoir des agents capables de décomposer des objectifs en étapes plus petites, de mener des expériences, d'obtenir des retours et de continuer à itérer vers un objectif plus grand. Il est difficile de faire en sorte que les agents essaient de nouvelles expériences dans la poursuite d'un objectif (et ne se contentent pas de répéter les mêmes choses). Il est difficile de faire en sorte que les agents réfléchissent à des objectifs larges et pas seulement à de petites tâches. Il est difficile de les maintenir cohérents sur de longues périodes.
Alignement: En lien avec ce qui précède. La conception des objectifs est déjà difficile en soi. Il sera très difficile pour les utilisateurs de concevoir des objectifs que les agents ne peuvent pas tricher. Si les agents essaient aveuglément d'optimiser un objectif, ils peuvent l'accomplir, mais ils peuvent aussi tricher de manière imprévisible. Par exemple : l'exemple classique « éliminer tous les bugs de la base de code » → supprime entièrement la base de code (pas de code = pas de bugs). Comment concevoir un harnais pour que les agents restent non seulement concentrés sur les objectifs, mais sans trop les optimiser.
Utilisation du navigateur: Pour les agents de codage, l'outil le plus important était un outil bash capable d'exécuter du code. Pour bon nombre de ces agents plus généralistes, le navigateur devient cet outil. Un navigateur est bien plus compliqué à piloter qu'un terminal ! Interagissez-vous avec les images ou avec le DOM ? Les deux sont des objets volumineux — comment gérer le contexte autour de cela ? Ce ne sont là que quelques-unes des questions qui se posent.
Il y a quelques mois, j'aurais peut-être accepté l'idée qu'il n'y avait pas tant de questions ouvertes en ingénierie du contexte. Mais avec ces agents toujours actifs et proactifs, nous voyons émerger toute une nouvelle série de défis ! Quelle époque pour être vivant.