En rendant le workflow explicite, avec des nœuds, des routes, un état partagé, des validateurs et des checkpoints. Le graph engineering évite de laisser un agent LLM tout décider dans son contexte. C’est moins magique, mais beaucoup plus pilotable.
C’est quoi le graph engineering IA ?
Le graph engineering IA, c’est le fait de modéliser une application IA comme un graphe exécutable plutôt que comme une boucle mono-agent opaque. Dit autrement, je ne laisse pas un modèle “improviser” toute l’orchestration dans un prompt géant. Je rends visibles les étapes, les responsabilités, les contrôles et les chemins possibles.
Dans un graphe IA, chaque partie du système a un rôle clair. Un nœud, c’est une étape de travail : lire un email, appeler un outil, enrichir une donnée CRM, produire une réponse, demander une validation humaine. Une arête, c’est la transition entre deux étapes. L’état partagé, c’est la mémoire de travail du process : les données collectées, les décisions prises, les erreurs, les pièces jointes, les scores de confiance.
Ce qui change vraiment, c’est qu’on peut ajouter des limites explicites autour de l’agent. Pas juste “sois prudent” dans un prompt. Des validateurs vérifient qu’une sortie respecte un format, une règle métier ou un niveau de risque. Des conditions de garde empêchent certaines actions si les prérequis ne sont pas remplis. Des routes d’exécution disent quoi faire selon le contexte. Des checkpoints enregistrent l’état à certains moments. Des chemins de reprise permettent de relancer proprement après une erreur, sans tout recommencer.
Sur le terrain, je vois souvent le même scénario. Un agent unique marche très bien en démo. Il répond vite, il utilise deux outils, tout semble magique. Puis on ajoute des retries, de la validation, un humain dans la boucle, des exceptions métier, des logs pour l’audit. Et là, ça devient difficile à comprendre. On ne sait plus vraiment pourquoi il a choisi telle action, ni où reprendre quand ça casse.
Avec une approche graph-engineered, le modèle reste puissant, mais il n’est plus seul aux commandes. Les règles métier fortes ne doivent pas être cachées dans un prompt quand elles peuvent être codées proprement. Le but n’est pas de faire un joli diagramme pour rassurer tout le monde. Le but, c’est de rendre les limites de contrôle explicites, testables et auditables.
| Critère | Mono-agent | Graphe IA |
| Lisibilité | Logique souvent cachée dans le prompt et les décisions du modèle. | Étapes, rôles et transitions visibles dans l’architecture. |
| Contrôle | Le modèle décide implicitement quoi faire et quand le faire. | Les routes, conditions et limites sont définies explicitement. |
| Reprise après erreur | Souvent bricolée avec des retries globaux. | Checkpoints et chemins de reprise prévus dans le flux. |
| Observabilité | Difficile de savoir où et pourquoi une décision a été prise. | Chaque nœud peut être loggé, mesuré et audité. |
| Validation | Souvent confiée au prompt ou à une vérification finale. | Validateurs intégrés à chaque étape critique. |
Quels blocs rendent le graphe fiable ?
Ce qui rend un graphe fiable, c’est la combinaison de nœuds bornés, d’arêtes contrôlées, d’un état typé, de reducers, de routes, de conditions de garde et de checkpoints. Pour moi, c’est là que l’agent arrête d’être une conversation magique et devient un vrai système de production.
Un nœud, c’est une étape qui fait un travail précis. Il peut appeler un LLM, utiliser un agent avec outils, lancer une fonction Python, récupérer des documents, interroger une base de données, appeler une API, vérifier une règle métier, exécuter une suite de tests, demander une approbation humaine ou même appeler un sous-graphe complet. Le point important, c’est qu’il est borné. Il reçoit un état, il produit un résultat attendu, il ne part pas dans tous les sens.
Une arête n’est pas une flèche décorative. C’est une règle de contrôle. Elle dit quoi faire après, selon le contexte.
- Une arête directe enchaîne simplement deux étapes.
- Une arête conditionnelle choisit selon un score, un statut ou une erreur.
- Une arête parallèle lance plusieurs traitements en même temps.
- Une arête de boucle permet de réessayer, mais avec une limite.
- Une arête d’erreur envoie vers un fallback propre.
- Une arête pilotée par un humain attend une validation.
- Une arête déclenchée par événement démarre quand un signal arrive, comme un email, un webhook ou une mise à jour CRM.
L’état partagé est le cœur du graphe. Au lieu de repasser tout l’historique conversationnel à chaque étape, ce qui coûte cher et augmente les erreurs, je garde des champs propres et typés. Par exemple : user_request, task_plan, retrieved_evidence, draft, validation_result, retry_count, approval_status. Chaque nœud lit ce dont il a besoin et écrit uniquement ce qu’il doit produire.
Fonction router(state):
Si state.grounding_score < 0.70:
Retourner "recherche_supplementaire"
Si state.risk_level == "eleve":
Retourner "revue_humaine"
Retourner "finalisation"
Les reducers servent quand plusieurs nœuds écrivent dans le même champ. Exemple simple : trois recherches parallèles trouvent des preuves différentes. Le reducer ne remplace pas la liste retrieved_evidence, il ajoute les nouveaux éléments dedans. Ça évite d’écraser une bonne source avec la suivante. J’ai vu ce bug chez un client, l’agent semblait halluciner alors qu’il perdait juste ses preuves en route.
Les checkpoints ajoutent la mémoire d’exécution. On peut reprendre après une erreur, auditer ce qui s’est passé, ou suspendre pour une validation humaine. LangGraph est un bon exemple d’outil construit autour de ces idées : graphes stateful, persistance, streaming, checkpoints et human-in-the-loop. Ce n’est pas l’outil qui rend fiable tout seul, c’est cette discipline de conception.
Comment structurer un workflow IA de recherche ?
Je structure un workflow IA de recherche en séparant la planification, la collecte de preuves, la rédaction, la validation, la reprise et l’approbation humaine. Le point important, c’est que chaque nœud du graphe fait une seule chose, avec une entrée claire et une sortie contrôlable.
Mon état circule dans le graphe avec des champs typés. Par exemple user_request en texte, task_plan en liste d’actions, retrieved_evidence en liste de preuves, draft en texte, validation_result en objet avec score et raisons, retry_count en nombre, approval_status avec pending, approved ou rejected. C’est bête, mais ça évite beaucoup de magie noire. J’ai vu des agents “autonomes” perdre le fil juste parce que tout était stocké dans un gros prompt flou.
Certains nœuds peuvent tourner en parallèle. Par exemple, je peux lancer une recherche web, une recherche dans la base documentaire interne et une recherche dans le CRM en même temps. Là, il faut une règle de réduction, sinon un résultat peut écraser l’autre. Ma règle simple sur retrieved_evidence ressemble à ça : Append les nouvelles preuves, puis merge par source et identifiant, puis déduplique. On garde toutes les preuves utiles, sans doublons et sans incohérence.
Les checkpoints sont non négociables. Un checkpoint, c’est une sauvegarde de l’état à un moment précis. Ça permet de reprendre après une interruption, d’attendre une validation humaine, d’inspecter un état précédent, de rejouer une exécution ou de récupérer après erreur. Le graphe n’enlève pas l’incertitude du LLM, le modèle de langage. Il l’encadre. Il force le système à prouver, vérifier, recommencer ou demander de l’aide quand le risque monte.
| Nœud | Rôle | Entrée | Sortie | Contrôle |
| Recevoir la demande utilisateur | Capturer le besoin | User_request | User_request normalisée | Format valide |
| Construire un plan de tâche | Découper la recherche | User_request | Task_plan | Plan complet |
| Récupérer des preuves | Chercher les sources | Task_plan | Retrieved_evidence | Reducer append ou merge |
| Fusionner les preuves | Nettoyer et dédupliquer | Retrieved_evidence | Preuves consolidées | Sources traçables |
| Rédiger une réponse | Produire le draft | Preuves consolidées | Draft | Citations présentes |
| Valider le grounding | Vérifier l’ancrage aux preuves | Draft et preuves | Validation_result | Score minimum |
| Router vers recherche complémentaire | Rechercher si score faible | Validation_result | Task_plan enrichi | Retry_count limité |
| Envoyer en revue humaine | Gérer le risque élevé | Draft et validation_result | Approval_status | Décision humaine |
| Finaliser | Livrer la réponse | Draft approuvé | Réponse finale | Validations passées |
Que prévoir avant la production ?
Avant la production, je prévois surtout l’observabilité, les checkpoints, les routes d’erreur, la réduction d’état, les validations et les points d’intervention humaine. C’est souvent là que les schémas d’agents IA sont trop jolis pour être vrais. On voit un agent, trois outils, une boucle, et on se dit que ça va tourner. En vrai, la production demande autre chose.
Je dois savoir où l’exécution passe, pourquoi elle prend une route, quel état a été modifié, quelle validation a échoué, et comment reprendre sans tout relancer. Sinon, au premier incident, on débugge une conversation floue avec des logs incomplets. J’ai vu ça chez un client sur un agent de traitement de demandes internes. L’agent marchait très bien en démo. En production, impossible de dire pourquoi certaines demandes partaient au mauvais service. La décision était cachée dans un prompt. Donc difficile à tester, difficile à tracer, difficile à corriger proprement.
Ce que je verrouille avant la prod est assez concret :
- Un état typé et limité, parce qu’un état fourre-tout devient vite une poubelle impossible à auditer.
- Des transitions explicites, pour savoir quel nœud appelle quel nœud, et sous quelle condition.
- Des règles de routing codées quand elles sont critiques, surtout pour les décisions métier à risque.
- Des validateurs placés aux bons endroits, avant une action externe, après une extraction, ou avant une réponse finale.
- Des chemins de reprise après erreur, pour corriger un point précis sans rejouer toute l’exécution.
- Des checkpoints persistants, c’est-à-dire des sauvegardes de l’état à chaque étape importante.
- Une exécution longue durée, avec attente possible, approbation humaine, inspection et replay.
- Du streaming quand l’exécution dure, pour suivre la progression au lieu d’attendre une boîte noire.
La production ne pardonne pas les responsabilités floues. Si une décision sensible est enfouie dans un prompt, elle devient presque invisible. Si elle est dans une condition de garde ou une route explicite, je peux la tester, la tracer, l’expliquer, puis l’améliorer. C’est ça, le graph engineering appliqué aux agents business. Moins de magie, plus de contrôle.
| Problème fréquent | Réponse graph-engineered |
| Décision critique cachée dans un prompt | Route explicite ou condition de garde testable |
| État trop large et illisible | État typé, réduit, avec champs utiles seulement |
| Erreur qui oblige à tout relancer | Checkpoint persistant et reprise ciblée |
| Validation faite trop tard | Validateur placé avant l’action risquée |
| Exécution longue invisible | Streaming, logs structurés et inspection en temps réel |
| Action sensible sans contrôle | Approbation humaine et route d’attente dédiée |
Alors, on arrête de tout mettre dans un seul agent ?
Le graph engineering IA remet un peu d’ordre dans les architectures d’agents. Au lieu de confier toute la logique à un seul LLM, je rends les rôles visibles : nœuds, routes, état, validateurs, checkpoints, reprises et interventions humaines. C’est moins spectaculaire qu’une démo où l’agent improvise tout, mais c’est beaucoup plus solide dès qu’on parle de workflows critiques, de contrôle ou de production. Mon conseil est simple : gardez le LLM pour ce qu’il fait bien, et mettez les règles fortes dans le graphe. Le bénéfice pour vous, c’est une IA plus fiable, plus observable et plus facile à améliorer.
FAQ
- Qu’est-ce que le graph engineering IA ? Le graph engineering IA consiste à construire une application IA comme un graphe exécutable. Chaque nœud a un rôle précis, chaque transition est contrôlée, et l’état partagé permet de suivre ce qui se passe sans tout cacher dans le contexte du modèle.
- Quelle différence avec un agent IA classique ? Un agent classique décide souvent lui-même de la prochaine action dans une boucle. Avec un graphe, les responsabilités, les routes, les validations et les reprises sont explicites. C’est moins flou, donc plus facile à tester, auditer et maintenir.
- Pourquoi utiliser un état partagé typé ? Un état typé rend visibles les entrées et sorties de chaque étape. On évite de transmettre tout l’historique conversationnel à chaque agent, et on sait précisément quels champs ont été produits ou modifiés.
- Les règles de routing doivent-elles être dans le prompt ? Pas quand elles sont critiques. Une contrainte forte, comme un niveau de risque élevé ou un score de grounding trop bas, doit plutôt être codée dans une route ou une condition de garde. C’est plus contrôlable.
- À quoi servent les checkpoints dans un graphe IA ? Les checkpoints stockent des instantanés de l’état. Ils permettent de reprendre après une erreur, d’attendre une validation humaine, d’inspecter une exécution précédente ou de rejouer un workflow sans repartir de zéro.
A propos de l’auteur
Je suis Franck Scandolera, responsable de l’agence webAnalyste et de l’organisme Formations Analytics. J’accompagne les entreprises sur le tracking avancé server-side, l’Analytics Engineering, l’automatisation No/Low Code avec n8n, l’intégration de l’IA dans les process business et le SEO/GEO. J’ai travaillé pour des clients comme Logis Hôtel, Yelloh Village, BazarChic, la Fédération Française de Football ou Texdecor. Si vous voulez rendre vos agents IA plus fiables, mieux contrôlés et vraiment exploitables en production, contactez-moi.
⭐ Analytics engineer, Data Analyst et Automatisation IA indépendant ⭐
- Ref clients : Logis Hôtel, Yelloh Village, BazarChic, Fédération Football Français, Texdecor…
Mon terrain de jeu :
- Data Analyst & Analytics engineering : tracking avancé (GTM server, e-commerce, CAPI, RGPD), entrepôt de données (BigQuery, Snowflake, PostgreSQL, ClickHouse), modèles (Airflow, dbt, Dataform), dashboards décisionnels (Looker, Power BI, Metabase, SQL, Python).
- Automatisation IA des taches Data, Marketing, RH, compta etc : conception de workflows intelligents robustes (n8n, App Script, scraping) connectés aux API de vos outils et LLM (OpenAI, Mistral, Claude…).
- Engineering IA pour créer des applications et agent IA sur mesure : intégration de LLM (OpenAI, Mistral…), RAG, assistants métier, génération de documents complexes, APIs, backends Node.js/Python.






