L'AI Grader est un plugin Moodle qui corrige automatiquement les travaux des étudiants en utilisant l'intelligence artificielle. L'enseignant définit les critères de correction, l'IA analyse chaque soumission et produit une note détaillée par critère avec un feedback structuré.
L'IA tourne entièrement en local sur l'infrastructure de l'IUT (DGX Spark). Aucune donnée n'est envoyée à un service externe. Les notes sont proposées à l'enseignant qui valide ou ajuste avant publication.
M. Morancey a un examen de statistiques avec 30 copies de notebooks Jupyter. Plutôt que de corriger manuellement chaque copie, il lance l'AI Grader qui analyse le code Python, vérifie les calculs et produit un feedback détaillé par exercice. Il relit les notes suggérées, ajuste si nécessaire, et publie les notes en un clic.
Chaque soumission est analysée par un pipeline de 5 passes indépendantes pour garantir la fiabilité de la note :
| Pass | Rôle | Détail |
|---|---|---|
| 1. Analyse | Comprendre la soumission | Liste les fichiers, décrit chaque fonction/exercice, identifie le type de contenu (code, essai, etc.) |
| 2. Review | Évaluation détaillée | Pour chaque exercice du sujet : statut (fait/pas fait), méthode utilisée, vérification des calculs, erreurs spécifiques |
| 3. Notation | Note par critère | JSON structuré : score/max par critère + justification + points forts/erreurs/suggestions |
| 4. Contre-correction | Second avis indépendant | L'IA note la copie de zéro, sans voir la note de la pass 3 (correction aveugle) |
| 5. Arbitrage | Décision finale | Déclenché uniquement si l'écart entre passes 3 et 4 dépasse 15% du barème. Tranche en analysant les deux justifications. |
Après le pipeline, un algorithme de calibrage vérifie la cohérence entre le feedback et la note :
-- Si un critère est marqué "pas fait" mais a un score > 30% : forcé à 0
-- Si un critère mentionne des erreurs mais a un score > 80% : plafonné à 60%
-- Si la contre-correction est significativement plus basse : la note est tirée vers le bas
L'enseignant configure l'AI Grader directement dans les paramètres du devoir Moodle. Une section "Dream-U AI Grader" apparaît avec :

"Tu corriges un examen de statistiques en Python. Critères : Exercice 1 (25 pts) : calcul de la médiane. Exercice 2 (40 pts) : analyse de données avec graphiques. Exercice 3 (35 pts) : analyse avec Pandas."
L'AI Grader extrait automatiquement le sujet d'examen pour que l'IA connaisse les questions posées aux étudiants :
pdftotextCela évite que l'IA invente des exercices ou évalue sur des critères hors-sujet.
L'enseignant accède à la page de correction via l'onglet "Corriger tout avec l'IA" du devoir. Il peut :

Après le lancement, une page de progression affiche en temps réel :
L'enseignant peut quitter la page : une notification Moodle lui sera envoyée quand la correction sera terminée.

Chaque correction produit un feedback HTML riche avec :
En haut du feedback, un bandeau bleu informe l'étudiant : "Cette correction a été assistée par intelligence artificielle et validée par votre enseignant(e). Si vous souhaitez des précisions ou contester un point, contactez directement votre enseignant(e)."
La note est affichée avec un code couleur : vert (≥ 70%), orange (50-70%), rouge (< 50%).
Un tableau affiche pour chaque exercice/critère :
| Critère | Score | Justification |
|---|---|---|
| Exercice 1 : Médiane et écart-type | 1.5/4 | La fonction médiane est implémentée mais la fonction d'écart-type a échoué avec un TypeError (0/2). |
| Exercice 2 : Analyse de données météo | 7.5/8 | Analyse complète avec histogramme, boxplot, corrélation et régression linéaire. |
| Exercice 3 : Analyse avec Pandas | 5/8 | Utilisation correcte de pandas pour les moyennes, mais incomplet. |

Les notes IA ne sont jamais publiées automatiquement. L'enseignant accède à la page de validation et peut pour chaque étudiant :

Si l'enseignant ne modifie pas le textarea, le feedback HTML riche est envoyé à l'étudiant. S'il le modifie, son texte remplace le HTML.
| Format | Traitement |
|---|---|
| Texte en ligne (Moodle) | Extrait directement |
| Code source (.py, .java, .cpp, .js, etc.) | Lu et analysé avec détection du langage |
| Fichier HTML / Jupyter Notebook | Extraction intelligente : blocs de code préservés, CSS/JS supprimés, graphiques détectés |
| Archive ZIP | Décompression + lecture des fichiers texte (max 20 fichiers) |
Extraction via pdftotext |
Les fichiers HTML générés par Jupyter contiennent beaucoup de CSS et JavaScript inutiles. L'AI Grader :
<style>, <script> et <head><pre> (code et output) individuellement<img> base64) et les compteSi la soumission dépasse la capacité du modèle IA, elle est tronquée intelligemment :
La page de statistiques affiche :

Pour éviter que l'IA invente du contenu (comme des questions de probabilités pour un cours de statistiques descriptives), plusieurs garde-fous sont en place :
| Aspect | Mesure |
|---|---|
| Données | 100% local -- aucune donnée ne quitte l'IUT |
| Transparence | Bandeau IA dans le feedback : l'étudiant sait que l'IA a assisté la correction |
| Validation humaine | L'enseignant valide TOUJOURS avant publication -- aucune note automatique |
| Permissions | Seuls les enseignants avec local/dreamu_ai:grade peuvent lancer la correction |
| Contestation | Le bandeau invite l'étudiant à contacter l'enseignant pour contester |
| Fonctionnalité | Description |
|---|---|
| Pipeline 5 passes | Analyse, review, notation par critère, contre-correction aveugle, arbitrage |
| Notation par critère | Tableau score/max/justification pour chaque exercice |
| Injection du sujet | PDF de l'examen extrait et envoyé à l'IA automatiquement |
| Calibrage | Vérification automatique de la cohérence feedback/note |
| Validation enseignant | Note et feedback éditables, approbation individuelle ou en lot |
| Progression temps réel | Barre de progression AJAX + notification Moodle |
| Formats multiples | Code, HTML/Jupyter, ZIP, PDF, texte en ligne |
| Extraction Jupyter | Blocs de code extraits, graphiques détectés |
| Troncation intelligente | Découpage par exercice, garde début + fin |
| Anti-hallucination | Prompts stricts, injection sujet, contre-correction aveugle |
| Bandeau éthique | Information transparente à l'étudiant sur l'usage de l'IA |
| Export CSV | Export des notes avec feedback |
| Statistiques | Distribution, calibration IA vs manuel, corrélation Pearson |
| Re-correction | Relancer la correction pour un étudiant individuel |
| Import ZIP | Importer des soumissions en lot depuis une archive |
| Échelle dynamique | S'adapte au barème (/20, /100, /10, etc.) |
| Fichier | Rôle |
|---|---|
classes/ai_grader.php | Moteur de correction : pipeline 5 passes, calibrage, extraction HTML/PDF |
classes/task/grade_submissions.php | Tâche adhoc pour correction en arrière-plan |
grade.php | Page de sélection des étudiants et lancement |
validate.php | Page de validation avec note/feedback éditables |
progress.php | Progression temps réel (AJAX polling) |
stats.php | Statistiques et calibration |
regrade.php | Re-correction individuelle |
export_csv.php | Export CSV des notes |
import_submissions.php | Import de soumissions en lot (ZIP) |
dashboard.php | Dashboard par cours |
lib.php | Intégration Moodle : formulaire devoir, navigation |