Recent Changes - Search:

Navigation

Plugins

Architecture

Infrastructure

Exploitation

Projet

Tutor IA — Chatbot IA contextualisé

Tutor IA (local_tutor_ia)

Version : 2026051900 | Composant : local_tutor_ia | Moodle 4.x | GitHub

Objectif

Chatbot IA intégré dans chaque cours Moodle. Répond en se basant strictement sur le contenu du cours. Flashcards, résumés, dashboard enseignant, alertes.

Architecture

Widget chat injecté via hook before_footer_html_generation (classes/hooks.php). Frontend : CSS inline + JS AMD (amd/src/chat.js). Backend : ajax.php (SSE) + locallib.php (tutor_ia_api). Config IA : hérite de local_dreamu_ai, fallback configurable.

Chat streaming (ajax.php + locallib.php)

  1. Widget POST ajax.php avec historique JSON
  2. Vérifie config active, rate limit, capability
  3. Extraction contenu cours via content_extractor
  4. System prompt : règles strictes (FR, contenu cours uniquement), mode socratique si activé, syllabus
  5. Streaming SSE vers l'API. Filtrage think tags temps réel.
  6. Estimation tokens (~4 chars/token) dans les logs.
  7. Fallback automatique si endpoint principal échoue (HTTP 500+).

Mode socratique

Activé par cours (course_settings.php). Prompt : ne JAMAIS donner la réponse, poser des questions guidées, indice après 3 échanges, pas de code complet.

Rate limiting + Gamification (ajax.php)

Rate limit : configurable (défaut 30 msgs/heure), fenêtre glissante 1h. Quand limite atteinte :

  • Sans gamification : message de blocage
  • Avec gamification : quiz bonus 3 QCM générés par l'IA. Chaque bonne réponse = +5 messages (bonus_tokens dans logs). Action earn_tokens crédite le bonus.

Mini-quiz post-conversation (chat.js)

Après 8+ messages : bouton « Tester mes connaissances ». 3 QCM générés via ajax.php (action=generate_quiz). Feedback immédiat + score.

Extraction contenu (content_extractor.php)

Cache en base (local_tutor_ia_content_cache) avec hash. Invalidation auto via observer (événements course_module created/updated/deleted). Types : page, label, book, resource (PDF pdftotext), assign, url, forum. Limites : 2000 chars/module, 15000 chars total.

Résumé de cours (summary.php + ajax_summary.php)

Streaming IA (Markdown structuré). Cache en base (local_tutor_ia_summaries) avec hash. Régénération si contenu changé. Rendu via marked.js. Bouton « Imprimer / PDF ».

Flashcards (flashcards.php)

5 flashcards générées par l'IA (max_tokens=1500). Algorithme Leitner : 3 statuts (0=new, 1=known, 2=review), 4 intervalles known (1j, 3j, 7j, 14j). Si « review » reset 1j, review_count=0. Interface carte retournable CSS 3D.

Dashboard enseignant (dashboard.php)

Capability : viewlogs. Métriques 30j : sessions (7j/30j), étudiants actifs, messages total, tokens consommés. Graphique activité par heure (CSS pur 24 barres). Top 15 mots-clés (cloud).

Alertes zone de difficulté (detect_difficulty_zones.php)

Tâche planifiée 6h30 quotidienne. Pour chaque cours actif : cherche topic_keywords demandés par N étudiants distincts (seuil défaut 5, 7 jours). Notification Moodle aux enseignants.

Configuration par cours (course_settings.php)

Activé/désactivé | Mode socratique | Mode gamification | Programme/instructions personnalisées (injecté dans system prompt).

Settings admin (settings.php)

ParamètreDéfaut
rate_limit (msgs/heure)30
daily_token_limit (par cours)100000
api_endpoint_fallback(vide)
model_name_fallback(vide)

Note : reset_daily_budgets ne fait rien (budgets gérés par timestamps logs).

Tables (5)

local_tutor_ia_config (courseid unique) | local_tutor_ia_logs (courseid+userid) | local_tutor_ia_content_cache (courseid unique) | local_tutor_ia_summaries (courseid unique) | local_tutor_ia_flashcards (courseid+userid). Voir Base de données.

Capabilities (4)

tutor_ia:configure (COURSE, editingteacher+manager) | tutor_ia:use (COURSE, student+teacher+editingteacher+manager) | tutor_ia:viewlogs (COURSE, editingteacher+manager) | tutor_ia:manage (SYSTEM, manager).

Événements

question_asked (chaque message) | session_started (nouveau log).

Tâches planifiées

detect_difficulty_zones (6h30 quotidienne) | reset_daily_budgets (minuit, ne fait rien).

Backup/Restore

Table config préservée (socratic_mode, syllabus). Logs, flashcards, caches exclus.

CDN externes

marked.js (Markdown) | KaTeX 0.16.10 (formules math).

Edit - History - Print - Recent Changes - Search
Page last modified on 03/06/2026 12:32