Aller au contenu
Studeia Docs
AI-assisted translation — last updated 2026-06-03. For original (pt-BR or en-US), use the language switcher.

Agent Superviseur : modération IA du chat tuteur

Agent IA de modération post-session du chat tuteur. 5 niveaux de sévérité, 8 catégories. 3 strikes = quarantaine 48h. Auto-dommage active accueil, ressources de crise et alerte URGENT admin

2026-06-03 8 min
Resposta curta

L'Agent Superviseur IA de Studeia modère le chat tuteur en arrière-plan après chaque tour via Claude Haiku (~$0.001/tour). Il classe en 5 niveaux de sévérité (low/medium/high/critical/safety) et 8 catégories (langage inapproprié, violence, illégal, sexuel, off_topic, harassment, self_harm, jailbreak_attempt). 3 infractions en 7 jours = quarantaine 48h. Self-harm (severity=safety) ne punit JAMAIS — affiche soutien + ressources de crise (3114, SAMU 15) + alerte URGENT à l'admin institutionnel.

Philosophie

L'enseignement à distance avec des mineurs et dans des contextes sensibles (dépression, anxiété pré-bac, harcèlement) exige une modération IA réelle, pas seulement des avertissements. Studeia adopte :

  1. Modération en arrière-plan, pas de gatekeeping — le superviseur analyse après la réponse, sans bloquer le stream. L'apprenant reçoit une réponse normale et le superviseur intervient si nécessaire dans les tours suivants.
  2. Le self-harm comme crise, pas comme infraction — ne jamais punir un apprenant en souffrance.
  3. Configuration en cascade — l'admin peut désactiver par tenant ou par cours lorsque le contexte l'exige (anatomie, pharmacologie, psychologie).
  4. Audit complet — chaque incident, transition de statut, quarantaine et appel est enregistré dans AdminAuditLog.

Modèle de données

AiSupervisorIncident
  id, userId, tenantId, courseId?
  severity: low | medium | high | critical | safety
  categories: [types]
  status: open | acknowledged | resolved | dismissed | auto_resolved
  messagesSnapshot: JSON  (PII — rétention 2 ans via cron)
  supervisorReasoning: string
  countedAsStrike: boolean
  detectedAt, resolvedAt
  appealText: string  (max 500 chars, 1 par quarantaine)

AiTutorQuarantine
  id, userId, tenantId
  reason: string
  expiresAt: timestamp
  liftedBy: userId?  (admin ayant levé manuellement)

Pipeline superviseur

Tour de chat complet
  ↓ (after())
SupervisorAgent.run({
  userId, tenantId, courseId,
  messages: lastNTurns,
  isMinor: user.isMinor,
  courseContext: { title, description }  // whitelist contextuelle
})
  ↓
LLM (Haiku) classifie : severity + categories + reasoning
  ↓
decideAction({ severity, categories, recentStrikes, isMinor, isSafety })
  ↓
Actions possibles :
  - none (non enregistré)
  - warn (notification in-app)
  - register (crée incident, countedAsStrike)
  - quarantine (crée AiTutorQuarantine 48h)
  - safety (cooldown Redis 24h + accueil bienveillant + admin URGENT)

Règles de sévérité

SévéritéCatégorie typiqueAction 1re infractionAction 2e+ infraction
lowlangage inapproprié légeravertissementstrike +1 ; 3 strikes = quarantaine 48h
mediumhors-sujet persistant, jailbreakavertissement + enregistrementstrike +1 ; 3 strikes = quarantaine 48h
highviolence, sexuel, illégalquarantaine 48hquarantaine 7 jours
criticalmenace envers autrui, contenu extrêmequarantaine 7 joursquarantaine indéfinie + révision admin
safetyself_harmJAMAIS de quarantaine — cooldown 24h + accueil bienveillant + admin URGENTidentique

Self-harm : traitement spécial

Lorsque severity === "safety" :

  1. Le stream du tuteur est immédiatement interrompu — le tuteur ne répond pas de manière inappropriée à une crise
  2. Message d'accueil bienveillant affiché à l'apprenant :

    "Je suis là avec vous. Si vous traversez un moment difficile, veuillez chercher de l'aide :

  3. Cooldown Redis tutor-safety-cooldown:{userId} avec TTL configurable (SUPERVISOR_SAFETY_COOLDOWN_HOURS, défaut 24h)
  4. E-mail URGENT immédiat à l'admin institutionnel via le template ai_supervisor_safety_urgent
  5. Incident créé en statut 'open' — l'admin DOIT réviser
  6. JAMAIS de strike (countedAsStrike=false), JAMAIS de quarantaine, JAMAIS de punition

Appel de quarantaine

L'apprenant en quarantaine voit le composant QuarantineNotice (web + équivalent mobile) :

  • Explique le motif (severity + catégorie, sans exposer le raisonnement interne du superviseur)
  • Affiche le compte à rebours jusqu'à l'expiration
  • Formulaire d'appel : max 500 caractères, 1 par quarantaine
  • La soumission crée appealText dans l'incident + notifie l'admin institutionnel
  • L'admin peut : accuser réception, rejeter (lève la quarantaine), résoudre ou ignorer (la quarantaine expire d'elle-même)

Configuration

Cascade d'activation

Course.supervisorEnabled (null = inherit)
  ↓ si null
Tenant.supervisorEnabled (null = inherit)
  ↓ si null
défaut = true pour B2B (avec tenant)

Cache Redis versionné : supervisor-flag-version:{tenantId} + clé supervisor-enabled:v{N}:{tenantId}:{courseId}. Toute mutation appelle bumpSupervisorFlagVersion(tenantId) qui incrémente la version — invalide logiquement toutes les clés sans SCAN+DEL.

Seul l'admin global peut modifier

  • PATCH /api/admin/tenants/[id]/supervisor — toggle par tenant
  • PATCH /api/admin/courses/[id]/supervisor — toggle par cours
  • Les deux exigent role === "admin" global + sont auditées dans AdminAuditLog

Prompt du superviseur

Modifié UNIQUEMENT par l'admin global (règle critique 141) : PromptTemplate avec taskType = chat_supervisor accepte UNIQUEMENT tenantId = null. Les endpoints /api/institution/prompts/* rejettent ce taskType avec 403.

Audit + rétention

  • Chaque incident est enregistré avec messagesSnapshot (PII)
  • Cron quotidien /api/cron/supervisor-maintenance :
    • Auto-expire les quarantaines échues
    • Purge messagesSnapshot=[] + appealText=null après 2 ans (règle critique 145)
    • Envoie un digest ai_supervisor_digest à l'admin regroupant les incidents open/acknowledged des dernières 24h
  • AdminAuditLog : ai_supervisor.incident.created/acknowledged/dismissed/resolved, quarantine.lift, prompt.update, tenant.toggle, course.toggle

RGPD

  • GET /api/user/data-export inclut aiSupervisor.{incidents, quarantines} de l'utilisateur
  • DELETE /api/user/account anonymise messagesSnapshot=[] + appealText=null en conservant severity/categories pour la rétention réglementaire
  • Les listes (/api/institution/ai-supervisor/incidents) utilisent un select explicite qui OMET messagesSnapshot et reasoning — seule la route de détail les expose

Limites connues

  • Faux positifs dans un contexte médical/pharmacologie : le contexte du cours (courseContext.title) est transmis au superviseur pour la whitelist. Mais cela peut échouer dans des cas extrêmes. Solution : désactiver le superviseur pour des cours spécifiques.
  • Langue : le prompt du superviseur est localisé (4 langues), mais la classification peut présenter de légères variations de qualité entre PT-BR et EN-US.
  • Jailbreak sophistiqué : des attaques d'injection de prompt très élaborées peuvent passer. Atténuation : défense en couches (system prompt + superviseur + rate limit).
  • Compromis vie privée vs sécurité : messagesSnapshot est une PII. Rétention maximale 2 ans. L'admin global y accède via /admin/ai-supervisor/incidents/[id] — audité.

Voir aussi

FAQ

Comment Studeia protège-t-il les apprenants dans le chat IA ?

Trois couches : (1) Le system prompt du tuteur inclut des guardrails (pas de conseil médical/juridique/financier, pas de sujets inappropriés). (2) L'Agent Superviseur (Haiku, arrière-plan, ~$0,001) classifie chaque tour selon 5 niveaux de sévérité × 8 catégories. (3) Pour le self-harm (severity=safety), le tuteur est interrompu avec un message d'accueil bienveillant + ressources de crise (CVV 188, SAMU 192) + notification URGENT à l'admin.

Si l'apprenant écrit quelque chose d'inapproprié, que se passe-t-il ?

Cela dépend de la sévérité. LOW (1re infraction) : avertissement à l'apprenant. MEDIUM : avertissement + incident enregistré. 3 strikes (LOW ou MEDIUM en 7 jours) : quarantaine 48h. CRITICAL : quarantaine 7 jours + notification admin. SAFETY (self-harm) : JAMAIS de punition — accueil bienveillant + ressources de crise + alerte URGENT.

La quarantaine empêche-t-elle l'apprenant d'utiliser la plateforme ?

Uniquement le chat tuteur IA. L'apprenant conserve l'accès aux cours, leçons, matériaux, gradebook et messages avec le professeur. L'apprenant peut soumettre un appel (max 500 caractères, 1 par quarantaine) qui est examiné par l'admin institutionnel.

Puis-je désactiver le superviseur pour un cours spécifique ?

Oui. Cascading : Course.supervisorEnabled (null = inherit) → Tenant.supervisorEnabled → défaut ON. L'admin global modifie via /admin/ai-supervisor/tenants ou /admin/ai-supervisor/courses. Utile pour les cours contenant du contenu médical/pharmacologie/anatomie où des termes sensibles sont légitimes.

Le self-harm est-il traité comme une infraction ?

JAMAIS. Le self-harm (severity=safety) est une crise, pas une infraction. Le système : (1) Interrompt le tuteur avec un message d'accueil bienveillant. (2) Affiche des ressources de crise — CVV 188 (24h, anonyme), SAMU 192, Centre de Valorisation de la Vie en ligne. (3) Notifie l'admin URGENT par e-mail immédiat. (4) Crée un incident en statut 'open' destiné à une révision humaine. (5) N'applique JAMAIS de strike, ne crée JAMAIS de quarantaine.

Veja tambem

Agent Superviseur : modération IA du chat tuteur