L'ingénierie des systèmes basés sur les grands modèles de langage a connu une transformation radicale dans les environnements de production, passant de simples textes et instructions aléatoires liés à des codes de liaison rudimentaires, à des cadres d'exécution structurés connus sous le nom d'architectures agentiques (Agentic Harnesses). Cette évolution vise à entourer les modèles probabilistes du support logiciel nécessaire pour garantir la fiabilité, la robustesse et la capacité de surveillance dans les environnements de travail réels.
Première étape : Les chaînes et les processus linéaires simples
Les premiers systèmes reposaient sur un flux de travail linéaire et simplifié connu sous le nom de chaînes (Chains). Cette approche se caractérise par une exécution rapide et un faible coût computationnel pour des tâches restreintes telles que le résumé simple. L'idée consiste à passer la sortie de la première étape comme entrée de la deuxième étape, et ainsi de suite, en utilisant les modèles comme des boîtes noires qui reçoivent et produisent du texte.
Par exemple, LinkedIn a utilisé dans ses premières phases des chaînes fixes comprenant la classification et l'orientation, puis la récupération de données via des outils de recherche pour contextualiser la réponse, et enfin la génération et le filtrage. Malgré la rapidité de développement, ces systèmes souffraient intrinsèquement de fragilité ; toute erreur lors d'une étape précoce entraînait l'interruption de l'ensemble du flux de travail en raison de l'absence de mécanismes de réponse et de correction automatique.
Deuxième étape : Les graphes pour renforcer la structure et le contrôle
Avec l'augmentation de la complexité des cas d'utilisation, les développeurs se sont tournés vers l'utilisation de structures de graphes (Graphs) pour introduire des branchements conditionnels, le parallélisme, les tentatives de réexécution et la gestion d'état (State Management). Les nœuds dans ces structures représentent les différentes tâches, tandis que les arêtes contrôlent le chemin de contrôle.
Ces structures ont permis la conception de systèmes multi-agents (Multi-Agent Systems) avec un coordinateur principal gérant le flux de tâches et la communication asynchrone pour assurer l'ordre et la continuité. Ces architectures ont été utilisées pour lancer l'assistant de recrutement (Hiring Assistant) afin de permettre aux recruteurs d'automatiser les tâches routinières. Cependant, ces cadres sont restés limités par des flux de travail définis par l'humain, ce qui peut rendre leur maintenance complexe lorsque l'étendue des cas exceptionnels s'élargit.
Troisième étape : La programmation comme outil fondamental de raisonnement
L'évolution la plus récente consiste à s'appuyer sur le code plutôt que sur des instructions linguistiques visuelles comme moyen fondamental de raisonnement. Au lieu de se contenter d'interpréter les problèmes textuellement, ces structures génèrent du code et l'exécutent dans des environnements isolés et testés.
Le code se distingue par sa nature déterministe et vérifiable par rapport aux sorties probabilistes incertaines des modèles de langage. Cette architecture repose sur un environnement d'exécution isolé, des outils de journalisation et de surveillance, des structures de vérification automatique et des boucles de débogage itératives qui corrigent les erreurs et réexécutent le code jusqu'à ce qu'il réponde aux critères requis. LinkedIn a appliqué cette approche en interne pour permettre aux employés d'interroger les données via des langages de requête structurés et Python, conformément aux cadres de confidentialité et de gouvernance.
Meilleures pratiques pour l'ingénierie des systèmes agentiques
- Traiter les sorties comme des données non fiables : Nécessité de valider les sorties des modèles avant de les transmettre à toute logique logicielle ultérieure.
- Séparer la planification de l'exécution : Permettre au modèle de proposer des plans tandis qu'un cadre logiciel rigoureux prend en charge le processus d'exécution.
- Investir dans la surveillance : Suivre précisément les états d'exécution pour examiner les erreurs et les journaux d'état sans compromettre les données sensibles.
- Développement continu : Construire des boucles de rétroaction analytiques pour améliorer les performances des systèmes au fil du temps.
Choisir le bon niveau d'abstraction technique
Tous les problèmes techniques ne nécessitent pas la complexité opérationnelle des graphes ou du code avancé. Les chaînes simples restent l'option la plus appropriée et la moins coûteuse en temps et en ressources de calcul pour les tâches directes telles que le résumé et le traitement de contenu. En revanche, les graphes deviennent nécessaires lorsqu'il y a un besoin de branchement et de gestion d'état, et les cadres de programmation sont utilisés dans les domaines critiques exigeant une précision et une vérification strictes, tels que le génie logiciel et l'analyse de données complexes.