- Qodo est une équipe qui développe des outils d’assistance au codage par IA depuis l’époque de GPT-3, et a récemment choisi le framework LangGraph afin de créer un agent de codage plus flexible et dynamique
- Cet article explique comment LangGraph a permis de concilier à la fois la flexibilité du flux de développement et les exigences de qualité du code
Passage d’une approche structurelle initiale à LangGraph
- Aux débuts, avec GPT-3, l’accent était mis sur des tâches structurées avec un flux clair, comme la génération de tests, la revue de code et les travaux d’amélioration
- Depuis Claude Sonnet 3.5, les performances des LLM se sont nettement améliorées, rendant possible la conception d’agents plus dynamiques
- Jusqu’alors, seuls des workflows standardisés étaient envisageables, mais l’objectif est devenu de développer un système capable de répondre avec souplesse aux demandes des utilisateurs grâce à ces nouveaux modèles
- C’est en cherchant un framework permettant d’expérimenter et de valider rapidement que l’équipe a choisi LangGraph, avec la possibilité de passer d’une simple preuve de concept à un véritable produit
Concilier flexibilité et règles explicites
- LangGraph fournit une structure en graphe fondée sur une machine à états (
state machine)
- Chaque nœud prend en charge une étape individuelle du workflow (collecte du contexte, planification, exécution, validation, etc.), et les arêtes (
edges) définissent les règles de transition entre les étapes
- Selon la densité des arêtes, le workflow devient plus flexible ou plus structuré
- Graphe peu dense → flux fixe et prévisible
- Graphe dense → flux dynamique et possibilité de choisir parmi divers parcours
- L’un des atouts de LangGraph est de permettre de réajuster facilement le niveau de structuration du workflow à mesure que les modèles progressent
- Le flux principal suit la structure suivante :
- collecte du contexte → planification du travail → exécution du code → validation du résultat → répétition en cas d’échec
Une interface concise et intuitive
- LangGraph permet de définir les workflows de façon déclarative, si bien que le code se lit presque comme de la documentation
- Le fonctionnement repose sur la déclaration d’un graphe d’état, puis sur l’ajout de nœuds et d’arêtes
- Les flux conditionnels sont aussi faciles à implémenter (par exemple : revenir au nœud d’exécution en cas d’échec de la validation)
- Contrairement aux abstractions complexes de LangChain, LangGraph expose clairement la logique, ce qui offre une bonne expérience développeur
Réutilisabilité entre différents workflows
- Grâce à sa structure fondée sur les nœuds, les composants sont faciles à réutiliser
- Exemple : les nœuds de collecte du contexte et de validation sont réemployés dans la plupart des flux
- Même lors de la création de nouveaux flux spécialisés (comme le TDD), il est possible d’étendre rapidement le système en reconnectant les nœuds existants
Gestion d’état intégrée
- LangGraph fournit nativement des fonctions de persistance de l’état, ce qui rend l’implémentation de la persistance très simple
- Exemple : la fonctionnalité de checkpointing via Postgres peut être configurée en quelques lignes de code
- Il est possible de sauvegarder l’état complet, y compris le contexte collecté, les plans et les résultats d’exécution, avec prise en charge des branches et du rollback
- D’autres options, comme SQLite ou l’in-memory, peuvent aussi être remplacées facilement
Points à améliorer
- Comme il s’agit d’un framework en évolution rapide, la documentation peut être incomplète ou mise à jour avec retard
- Heureusement, les échanges avec les mainteneurs via Slack ont été rapides et très réactifs
- Les tests de systèmes LLM non déterministes restent un défi
- Dans le cas d’agents interagissant avec un IDE, il est difficile de mettre en place un environnement de test automatisé
- Certaines fonctions d’IDE sont très difficiles à mocker, ce qui a imposé de s’appuyer sur des tests manuels et a ralenti les itérations
- Les frameworks plus matures proposent souvent une infrastructure de test et de mocking, et l’équipe espère voir LangGraph évoluer dans cette direction
Aucun commentaire pour le moment.