| Composant | Spécification |
|---|---|
| Serveur Moodle | Machine Linux (Debian/Ubuntu) avec Docker et Docker Compose |
| GPU / Serveur IA | GPU avec minimum 24 Go de VRAM (ex : NVIDIA GB10 Blackwell, RTX 4090, A100). Nécessaire pour faire tourner le modèle de langage. |
| Réseau | Les deux machines doivent pouvoir communiquer (réseau local ou VPN type Tailscale). Le serveur IA doit être accessible depuis le serveur Moodle via HTTP. |
| Stockage | Minimum 50 Go libres sur le serveur IA pour les modèles. 10 Go sur le serveur Moodle. |
| Logiciel | Version minimale | Rôle |
|---|---|---|
| Moodle | 4.1+ (recommandé 4.5+) | Plateforme LMS |
| PHP | 8.0+ | Exécution du plugin (inclus dans l'image Docker Bitnami) |
| vLLM | 0.19+ | Serveur d'inférence IA, expose une API compatible OpenAI |
| Docker | 24+ | Conteneurisation de Moodle et de la base de données |
| Caddy | 2.7+ | Reverse proxy HTTPS (optionnel, recommandé pour la sécurité) |
| Tailscale | 1.60+ | VPN mesh pour relier les machines (optionnel) |
Le plugin est compatible avec tout modèle de langage exposé via une API compatible OpenAI (/v1/chat/completions). Il a été testé avec :
| Modèle | VRAM | Notes |
|---|---|---|
| Qwen3-Coder-30B-A3B-Instruct-FP8 | ~30 Go | Utilisé en production. Bon équilibre performance/qualité. |
| Qwen2.5-32B-AWQ | ~20 Go | Testé. Fonctionne bien pour le chat et la génération de questions. |
| Qwen2.5-Coder-14B | ~10 Go | Plus léger, adapté comme modèle de fallback. |
| Gemma-4-26B | ~16 Go | Testé. Bonne qualité de conversation. |
Le modèle doit supporter le streaming SSE et le format JSON pour la génération de quiz et flashcards.
/local/tutor_ia/locallib.php)local/tutor_ia:use aux étudiants, local/tutor_ia:configure et local/tutor_ia:viewlogs aux enseignantsLe Tutor IA est un assistant pédagogique intelligent intégré directement dans Moodle. Quand un enseignant l'active sur son cours, un bouton de chat apparaît en bas à droite de chaque page. Les étudiants peuvent poser des questions et recevoir des explications personnalisées, basées sur le contenu réel du cours.
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.
Quand un étudiant pose une question, l'IA analyse le contenu du cours (pages, documents, devoirs) et répond en se basant uniquement sur le programme. Si la question est hors-sujet, l'IA refuse poliment.
Étudiant : "Comment créer une liste en Python ?"
Tutor IA : L'IA ne donne pas directement la réponse. En mode socratique, elle répond par des questions : "Bonne question ! D'abord, qu'est-ce qu'une variable pour toi ? Et si tu devais stocker plusieurs valeurs, comment ferais-tu ?"
Étudiant : "Je mettrais plusieurs variables ?"
Tutor IA : "C'est une piste, mais imagine que tu aies 100 valeurs. Est-ce pratique d'avoir 100 variables ? Python a une structure qui permet de regrouper des valeurs. Cherche dans ton cours, section 'Fonctions et listes'..."
L'enseignant peut activer le mode socratique dans les paramètres du cours. Dans ce mode, l'IA ne donne jamais la réponse directement : elle pose des questions, donne des indices, et guide l'étudiant étape par étape. Après plusieurs échanges infructueux, elle propose un indice plus explicite.
Ce mode est particulièrement utile pour les cours de programmation où l'enseignant ne veut pas que l'IA fasse le travail à la place de l'étudiant.
Mme Yahi enseigne l'introduction à Python. Elle active le Tutor IA avec le mode socratique et ajoute dans le syllabus : "Ne pas donner de solution complète pour le TP1. Guider les étudiants vers la documentation Python."
Résultat : quand un étudiant demande la solution du TP, l'IA l'oriente vers les ressources du cours sans lui donner le code.
Quand un étudiant est sur la page d'un devoir (ex : "TP1 - Fonctions et listes en Python"), le Tutor IA détecte automatiquement l'énoncé et adapte ses réponses. L'étudiant n'a pas besoin de copier-coller l'énoncé.
Étudiant (sur la page du TP1) : "Je ne comprends pas ce qu'on me demande"
Tutor IA : "Je vois que tu travailles sur le TP1 'Fonctions et listes en Python'. L'énoncé te demande d'implémenter une fonction compter_occurrences(liste, element) qui retourne combien de fois un élément apparaît dans une liste. Tu veux que je t'explique ce qu'est une occurrence ?"
Après plusieurs échanges, l'IA continue de guider en mode socratique avec du code en couleur. Elle utilise des exemples concrets (ma_liste, 42) et pose des questions de plus en plus précises.
Après 8 messages ou plus dans une conversation, un bouton vert "Tester mes connaissances" apparaît. L'IA génère 3 questions QCM basées sur ce qui vient d'être discuté. L'étudiant répond directement dans le chat et reçoit un feedback immédiat.
Après une conversation sur les listes Python, le mini-quiz propose :
Question 1 : Quel est le résultat de len([1, 2, 3]) ?
A) 2 B) 3 C) 4 D) Erreur
L'étudiant clique sur B) -- Correct ! len() retourne le nombre d'éléments dans la liste.
Score final : 2/3 -- Les réponses incorrectes sont expliquées.
En un clic, l'IA génère un résumé structuré de tout le contenu du cours : titres, définitions, points clés, formules. Le résumé apparaît en temps réel (streaming) et peut être imprimé ou exporté en PDF. Il est mis en cache automatiquement et ne sera régénéré que si le contenu du cours change.
Avant un examen, l'étudiant ouvre le résumé IA de son cours de Python. En 30 secondes, il obtient une synthèse de toutes les notions vues : variables, types, listes, fonctions, boucles. Il clique "Imprimer / PDF" pour l'emporter en révision.
L'IA génère 15 cartes recto/verso à partir du contenu du cours. L'étudiant clique sur la carte pour la retourner, puis indique s'il la connaît ("Je sais") ou s'il doit la réviser ("À revoir"). Les cartes marquées "à revoir" reviennent plus fréquemment grâce à un système de répétition espacée.
Carte 1 -- Recto : "Qu'est-ce qu'une liste en Python ?"
Verso : "Une structure de données ordonnée et modifiable qui peut contenir des éléments de types différents. Syntaxe : ma_liste = [1, 2, 3]"
Carte 2 -- Recto : "Quelle est la différence entre append() et extend() ?"
Verso : "append() ajoute un seul élément à la fin. extend() ajoute chaque élément d'un itérable à la fin."
Carte 3 -- Recto : "Comment définir une fonction en Python ?"
Verso : "Avec le mot-clé def suivi du nom et des paramètres : def ma_fonction(param1, param2):"
Les enseignants accèdent à un tableau de bord qui montre comment les étudiants utilisent le Tutor IA. Sans voir les conversations individuelles, le professeur peut identifier les sujets qui posent problème et adapter son cours en conséquence.
M. Casali consulte le dashboard de son cours C++ le vendredi. Il voit que 15 étudiants ont posé des questions sur les "pointeurs" cette semaine (sujet le plus demandé). Il décide de consacrer la prochaine séance à un exercice pratique sur les pointeurs.
Le graphique d'activité montre un pic à 22h -- les étudiants révisent le soir. Le Tutor IA est disponible 24h/24, contrairement aux horaires de permanence.
Quand un sujet est demandé par plus de 5 étudiants différents en une semaine (seuil configurable par l'administrateur), le système envoie automatiquement une notification Moodle à tous les enseignants du cours. La notification indique le sujet concerné et le nombre d'étudiants. L'alerte est déclenchée par une tâche planifiée qui s'exécute chaque jour à 6h30.
1. Les étudiants posent des questions au Tutor IA. Chaque message est analysé et un mot-clé est extrait automatiquement (ex : "listes python", "boucle while").
2. Tous les jours à 6h30, une tâche planifiée Moodle analyse les mots-clés des 7 derniers jours.
3. Si un mot-clé a été demandé par plus de N étudiants distincts (seuil configurable, défaut : 5), une notification est envoyée à chaque enseignant du cours.
4. L'enseignant clique sur la notification et accède au tableau de bord pour voir les détails.
Le mode gamification transforme la limite de messages en opportunité d'apprentissage. Quand un étudiant atteint sa limite horaire, au lieu d'être bloqué, un quiz bonus apparaît. Chaque bonne réponse donne 5 messages supplémentaires. Cette option est activable par l'enseignant dans les paramètres du cours.
1. L'enseignant active "Mode gamification" dans les paramètres du cours.
2. L'étudiant discute normalement avec l'IA (limite configurable, défaut 30 messages/heure).
3. Quand la limite est atteinte, un quiz de 3 QCM apparaît automatiquement.
4. Chaque bonne réponse donne 5 messages supplémentaires. Score 3/3 = 15 messages bonus.
5. L'étudiant peut ensuite continuer à discuter avec les messages gagnés.
6. Si la gamification est désactivée, le message de blocage classique s'affiche.
L'administrateur du site configure les garde-fous globaux :
Toutes les fonctionnalités sont accessibles depuis le menu "Plus" du cours. Les enseignants voient les liens vers les paramètres, le dashboard, le résumé et les flashcards.
| Aspect | Mesure |
|---|---|
| Données | 100% local -- aucune donnée ne quitte l'IUT. Le modèle IA tourne sur le DGX Spark. |
| HTTPS | Toutes les connexions sont chiffrées (certificat Tailscale valide + auto-signé local). |
| Vie privée | L'enseignant voit les statistiques agrégées (sujets, nombre de sessions), jamais les conversations individuelles. |
| Accès | Seuls les étudiants inscrits au cours peuvent utiliser le chatbot. Permissions Moodle standard. |
| Anti-abus | Limite de messages par heure et budget tokens par jour pour protéger les ressources. |
| Fonctionnalité | Pour qui | Description |
|---|---|---|
| Chat IA | Étudiants | Poser des questions en temps réel, réponses basées sur le contenu du cours |
| Mode socratique | Enseignants | L'IA guide par des questions au lieu de donner la réponse |
| Aide sur les devoirs | Étudiants | Détection automatique de l'énoncé, aide ciblée sans donner la solution |
| Mini-quiz | Étudiants | 3 QCM générés après une conversation pour vérifier la compréhension |
| Résumé de cours | Tous | Synthèse structurée du cours, exportable en PDF |
| Flashcards | Étudiants | 15 cartes recto/verso avec répétition espacée pour réviser |
| Dashboard | Enseignants | Statistiques d'utilisation, sujets fréquents, activité par heure |
| Alertes | Enseignants | Notification automatique quand un sujet pose problème à plusieurs étudiants |
| Rate limiting | Admin | Limite de messages/heure et budget tokens/jour |
| Gamification | Enseignants | Quiz bonus quand la limite est atteinte : bonnes réponses = messages supplémentaires |
| Fallback | Admin | Modèle de secours en cas de panne |