Toutes les publications
Intelligence ArtificielleRetour d'expérience

Un agent IA en production qui n'a pas le droit d'inventer

Comment nous avons transformé une corvée de plusieurs heures en un agent qui collecte, agrège et rédige nos rapports de TMA Drupal / Next.js en quelques minutes — sans jamais laisser le LLM halluciner un chiffre. Retour d'expérience sur la mise en production d'un modèle de langage là où l'erreur coûte cher.

Agent IALLM en productionGrounding / RAGGarde-fous IAArchitecture multi-modèlesData-to-text
Abdelkarim Sadiki
Abdelkarim Sadiki
Stagiaire PFE — Master Big Data & IoT, ENSAM Casablanca
26 juin 2026 · 14 min de lecture
1

Du rapport manuel à l'agent IA

Sur la plupart des projets que VOID héberge et maintient, chaque cycle de maintenance se termine par un rapport envoyé au client : composants mis à jour, failles de sécurité corrigées, performance du site, parcours critiques re-testés. C'est la preuve visible du travail réalisé — et la base de la confiance du client.

Le problème : ce rapport était écrit à la main. Un ingénieur collectait les changements de version, allait chercher chaque advisory de sécurité, lançait les contrôles SSL et performance, copiait les résultats, puis réécrivait l'ensemble en français lisible. Deux à quatre heures par projet et par période, pour un résultat dont la qualité variait d'un auteur à l'autre.

Pendant mon PFE chez VOID, j'ai conçu un agent IA de reporting de TMA pour absorber cette corvée : un système qui collecte seul les informations, les agrège, les fait raisonner par un modèle de langage, puis produit un document propre en quelques minutes.

6

sources agrégées

4

tâches déléguées au LLM

0

chiffre inventé

~5 min

au lieu de 2-4 h

Mais le vrai sujet de ce retour d'expérience n'est pas l'outil. C'est la question que pose toute mise en production d'un LLM dès qu'on sort de la démo : comment faire écrire un modèle de langage quand on ne peut pas se permettre qu'il invente ?

2

La fausse bonne idée : laisser le LLM écrire le rapport

Depuis GPT-3, l'intuition dominante est simple : on rassemble les données, on les colle dans un prompt, et on demande au modèle de rédiger le rapport complet. Avec un bon modèle frontier, la démo est bluffante — quelques secondes, et un texte fluide, structuré, convaincant.

C'est exactement ce qu'il ne faut pas faire ici.

Un rapport de maintenance est un document factuel : numéros de version (Drupal 10.4.6 → 10.5.6), identifiants de CVE, scores de performance, dates de certificat. Or un LLM en génération libre produit un texte qui sonne juste mais qui est parfois faux — c'est l'hallucination, le risque le mieux documenté de ces modèles. Et plus le modèle est capable, plus il est convaincant quand il se trompe : une hallucination à haute confiance.

Le raccourci à éviter. « L'IA écrit le rapport » est une lecture trompeuse. Dans cet agent, le LLM n'écrit aucun fait : il met en mots une matière déjà collectée et vérifiée. Tout ce qui est vérifiable — versions, CVE, scores — vient du code, pas du modèle.

Dans un rapport client orienté sécurité, une version erronée ou une CVE inventée n'est pas une coquille — c'est une perte de confiance, voire un risque contractuel. Le modèle écrira « cette mise à jour corrige une vulnérabilité critique d'injection SQL » avec le même aplomb, que la faille existe ou non. Pour un livrable que personne ne recoupe ligne par ligne, c'est rédhibitoire.

3

Le principe : ancrer le modèle (grounding)

La partie difficile d'un rapport n'a jamais été la rédaction. C'est d'obtenir des données correctes. L'architecture en découle directement : on sépare les faits de la formulation.

Chaque chiffre est collecté de manière déterministe, depuis des sources officielles. Le modèle n'intervient qu'à la fin, et uniquement pour transformer cette matière vérifiée en français lisible. Le LLM n'est jamais une source de faits : c'est une couche de reformulation contrôlée posée au-dessus de données déjà collectées et validées.

C'est, mot pour mot, le principe du grounding popularisé par le RAG (retrieval-augmented generation) : on n'interroge pas la mémoire du modèle, on lui fournit le contexte vérifié et on lui demande seulement de le mettre en forme. La recherche appelle aussi cela la génération « data-to-text » : un texte dont chaque phrase est traçable jusqu'à une donnée structurée.

Ce qui passe par le code (déterministe)

Comparaison de versionsentre la baseline et la configuration actuelle, pour ne garder que les composants qui ont changé.

Agrégation des changelogsde six runtimes (Drupal, Next.js, Node.js, PHP, Nginx, MariaDB/MySQL), chacun depuis sa source officielle.

Résolution des CVEvia l'API du NVD, avec un filtre de sévérité (High et Critical par défaut).

Sondes externescertificat SSL, audit de performance (PageSpeed Insights), scan de vulnérabilités, tests fonctionnels Playwright.

Ce qui passe par le LLM (quatre tâches de mise en mots)

Synthétiser le contexte du projet

Reformuler en français clair les descriptions brutes de CVE / GHSA

Rédiger le narratif sécurité de l'audit

Rédiger le narratif « effets des changements » à partir des résultats Playwright

Aucune ne lui demande de produire un chiffre. On lui demande des phrases, à partir de valeurs qu'il n'a pas le droit de modifier.

4

L'agent en deux temps : un pipeline orchestré

L'agent fonctionne comme un pipeline orchestré. La validation de l'entrée arrive d'abord (schéma strict via Zod) : une entrée malformée échoue avant le moindre appel réseau. Suivent deux phases.

Pipeline en deux temps

Validation de l'entrée (schéma Zod)

Phase 1 — Collecte parallèle

Versions & changelogs
CVE (NVD)
Certificat SSL
PageSpeed / GTmetrix
Scan vulnérabilités
Tests Playwright
Barrière de fusion

Phase 2 — Rédaction LLM (concurrence bridée)

Contexte projet
Narratif CVE
Narratif sécurité
Narratif Playwright
Assemblage HTML → PDF (headless Chrome)

Phase 1 — Collecte, en parallèle

La plupart des étapes attendent un service distant : le contrôle SSL pilote un navigateur headless, l'audit performance est délégué à l'infrastructure de Google, le scan appelle notre web-scanner, l'agrégation interroge le NVD et les advisories GitHub et Drupal. Ces appels sont indépendants et dominés par la latence réseau ; lancés ensemble plutôt qu'en série, le temps mort de l'un recouvre le travail de l'autre, et la phase ne dure que le temps de sa sonde la plus lente.

La barrière de fusion

La Phase 2 ne démarre qu'une fois toutes les tâches de la Phase 1 terminées. Les narratifs raisonnent sur les faits collectés (sauts de version, CVE filtrées, scores, findings) et ne doivent jamais s'exécuter en avance sur eux. Cette barrière est précisément ce qui empêche le modèle de décrire des valeurs encore en cours de récupération — un garde-fou d'orchestration autant que de correction.

Phase 2 — Rédaction, en parallèle mais bridée

Les narratifs sont générés en concurrence, mais avec un nombre borné d'appels simultanés : inutile de saturer un serveur d'inférence, et la concurrence se paie en tokens. L'assemblage HTML puis le rendu PDF (headless Chrome) sont, eux, strictement séquentiels.

5

Les garde-fous : évaluation et validation humaine

Donner la parole à un LLM en production, c'est accepter qu'il puisse mal répondre. La réponse n'est pas de mieux « prompter » — c'est d'entourer le modèle de garde-fous, exactement comme les modèles frontier grand public sont aujourd'hui livrés avec leurs safety classifiers.

1

Le modèle est un service faillible

Une réponse vide ou trop courte compte comme un échec ; après plusieurs tentatives, on conserve le texte saisi manuellement plutôt qu'un texte douteux. Le LLM n'a aucun statut privilégié dans la chaîne.

2

Une passe d'évaluation

Avant d'être considéré comme livrable, le rapport est confronté à une check-list de cohérence et reçoit un score de fiabilité global ; en dessous du seuil, il n'est pas envoyé — il est signalé pour relecture manuelle.

3

L'humain garde le dernier mot

Aucun rapport ne part chez un client sans validation par un administrateur, via un circuit de revue tracé en base. Le LLM accélère la mise en forme ; l'humain garde le dernier mot sur ce qui sort.

Sur un livrable critique, la validation humaine n'est pas négociable. Le circuit de revue est tracé : relecture, décision, correction en cas de refus, puis envoi du PDF au client une fois le rapport validé.

6

Tenir en production : résilience, coûts, multi-modèles

Dès qu'un agent repose sur une dizaine de services externes, la vraie question n'est plus « est-ce que ça marche ? » mais « que se passe-t-il quand l'un d'eux tombe ? ». Et il y en a toujours un qui tombe : une API rate-limitée, un checker SSL qui met quatre minutes à répondre, un quota dépassé.

Deux exigences opposées

Un plafondune génération complète doit tenir en moins de dix minutes.

Un plancherle rapport doit toujours sortir, même service distant en panne.

Le premier justifie le pipeline parallèle ; le second, une couche de résilience uniforme : une primitive de retry (trois tentatives, backoff aléatoire, erreurs transitoires seulement), des wrappers best-effort (un échec renvoie des données vides plutôt que d'arrêter le pipeline) et des chaînes de fallback (SSL ×3, PageSpeed ↔ GTmetrix, scan repris du cache).

Coûts d'inférence et portabilité

Un agent qui appelle un LLM sur chaque rapport, plusieurs fois, peut voir sa facture s'envoler. Trois leviers le contiennent : la concurrence bornée en Phase 2, le caractère strictement optionnel de l'enrichissement (sans endpoint configuré, l'agent saute la rédaction et garde le texte manuel — le rapport sort quand même), et un découpage des tâches qui n'envoie au modèle que le strict nécessaire.

Enfin, la portabilité. L'agent vise un endpoint compatible OpenAI, défini par configuration. On peut donc router vers un modèle auto-hébergé open-weight — un Qwen sur notre propre infrastructure, pour les données sensibles — ou vers une API commerciale comme Claude quand sa puissance fait la différence, et basculer de l'un à l'autre sans toucher au code. C'est la même logique d'architecture multi-modèles et de souveraineté des données que VOID applique à ses projets IA : le bon modèle pour le bon usage, selon le rapport coût / capacité / sensibilité.

7

Cinq leçons pour mettre un LLM en production

1

Ne demandez pas des faits au modèle, demandez-lui des mots

Tout ce qui est vérifiable doit venir d'un code déterministe.

2

Ancrez tout (grounding / RAG)

Le modèle reformule une matière vérifiée, il ne la génère pas.

3

Traitez l'appel au LLM comme un appel réseau faillible

Retry, dégradation propre, et un plan B qui reste correct.

4

Entourez le modèle de garde-fous

Évaluation automatique du livrable et validation humaine sur tout ce qui part au client.

5

Restez multi-modèles et neutre côté fournisseur

Un endpoint configurable, c'est la liberté de changer de modèle — ou de rapatrier les données sensibles sur un open-weight souverain.

Notre conviction. Un LLM en production n'a pas besoin d'être brillant pour être utile ; il a besoin d'être cadré. Le travail d'ingénierie ne consiste pas à faire confiance au modèle, mais à construire autour de lui ce qui lui retire toute occasion de se tromper là où ça compte. L'IA générative déplace le goulot : produire du texte n'est plus le problème, la fiabilité l'est.

8

Questions fréquentes

Pourquoi ne pas tout confier au LLM ?
Parce qu'un rapport de maintenance est factuel. Un LLM en génération libre hallucine ; sur des versions, des CVE et des scores, une seule erreur ruine la confiance. Le modèle ne sert qu'à reformuler des faits déjà collectés.
Quel modèle utilisez-vous ?
L'agent est agnostique : il parle à n'importe quel endpoint compatible OpenAI. Selon le contexte, ce peut être un modèle open-weight auto-hébergé (Qwen) ou une API commerciale (Claude). L'enrichissement reste optionnel.
L'agent remplace-t-il l'ingénieur ?
Non. Il absorbe la collecte et la mise en forme — la partie systématique. Le jugement, la relecture et la validation finale restent humains, par conception.
Comment gérez-vous les hallucinations ?
En amont, par le grounding : le modèle ne voit que des faits vérifiés. En aval, par une check-list de fiabilité, un score global et une validation humaine avant tout envoi.

Besoin d'un agent IA fiable pour vos workflows ?

Architecture multi-modèles, grounding, garde-fous, validation humaine — nous concevons des agents IA qui produisent des résultats vérifiables, pas des hallucinations convaincantes.

À propos de l’auteur

Abdelkarim Sadiki

Abdelkarim Sadiki

Stagiaire PFE — Master Big Data & IoT, ENSAM Casablanca

Étudiant en Master Big Data & IoT à l'ENSAM Casablanca, Abdelkarim a conçu pendant son PFE chez VOID un agent IA de reporting de TMA qui collecte, agrège et rédige des rapports de maintenance Drupal / Next.js — sans jamais laisser le LLM halluciner un chiffre.

Encadré par

Mehdi Najeddine
Mehdi Najeddine
Fondateur & Directeur de VOID

Cet article vous a été utile ?

Partagez-le à votre réseau — en particulier aux équipes qui s'apprêtent à déployer un agent IA en production.

🌱Site éco-conçu