Back to deblo
deblo

Quiz interactifs avec LaTeX : tester les élèves dans un chat

Quiz anti-triche en deux phases : l'IA envoie les questions sans les réponses, Redis stocke la bonne option et le serveur valide. Avec rendu mathématique LaTeX complet.

Juste A. Gnimavo (Thales) & Claude | March 26, 2026 3 min deblo
EN/ FR/ ES
debloquizlatexkatexredisanti-tricheéducation

Par Thales & Claude -- CEO & AI CTO, ZeroSuite, Inc.

Une élève de Terminale à Abidjan révise les limites et la continuité. Elle demande à Deblo : « Teste-moi sur les limites de fonctions. » L'IA génère une question à choix multiples avec des formules mathématiques correctement typographiées -- barres de fractions, notation de limites, symboles d'infini.

Cette interaction semble simple. Derrière elle, quatre systèmes se coordonnent : l'outil IA qui génère la structure du quiz, le store Redis qui conserve la bonne réponse côté serveur, l'endpoint de validation qui note la réponse, et la couche de rendu qui transforme les chaînes LaTeX en mathématiques typographiées sur web et mobile.

L'architecture anti-triche

La décision de conception la plus importante dans le système de quiz est une décision d'absence : la bonne réponse n'est jamais envoyée au client.

La nouvelle architecture divise le quiz en deux phases. En phase un, l'IA génère la question et les options, mais la bonne réponse est stockée côté serveur dans Redis, jamais transmise au client. En phase deux, l'élève soumet sa réponse, le serveur récupère la bonne réponse depuis Redis, compare et retourne le résultat.

État éphémère Redis

La bonne réponse vit dans Redis avec un TTL d'une heure. L'état du quiz est supprimé après une seule tentative de réponse. Un élève ne peut pas soumettre plusieurs réponses pour forcer la bonne option par force brute.

Rendu LaTeX

Sur le web, nous utilisons KaTeX -- la bibliothèque de rendu LaTeX la plus rapide disponible. Sur mobile (React Native), nous utilisons un composant MathBlock personnalisé qui rend le LaTeX en SVG.

Les options throwOnError: false et strict: false sont critiques. Les LLM produisent occasionnellement du LaTeX légèrement malformé. Sans ces options, une seule expression malformée ferait planter tout le pipeline de rendu.

Crédits bonus et gamification

Après un quiz, l'IA peut attribuer des crédits bonus : 1 crédit pour une question facile correcte, 2 pour moyenne, 5 pour difficile, et 1 crédit pour toute question tentée mais incorrecte (récompense de l'effort). La récompense de l'effort est délibérée : nous voulons que les élèves tentent les quiz même quand ils ne sont pas sûrs.

Suivi des exercices et analytique

Chaque tentative de quiz alimente la table ExerciseResult, qui nourrit trois systèmes en aval : le tableau de bord de progression personnel de l'élève, le tableau de bord enseignant/parent (pour les membres d'organisation), et la propre logique d'adaptation de l'IA (difficulté adaptative basée sur les performances passées).


Ceci est l'article 15 de 20 dans la série « Comment nous avons construit Deblo.ai ».

Share this article:

Responses

Write a response
0/2000
Loading responses...

Related Articles

Thales & Claude deblo

Le Step Zero ne suffisait pas : comment valider un constructeur sans valider le runtime a fait tomber toutes les sessions vocales de Déblo l’heure où nous avons livré le streaming caméra temps réel

La phase 14 a livré Déblo Eyes — streaming caméra temps réel via LiveKit vers Gemini Live native audio. Le premier deploy a fait tomber toutes les sessions vocales en production en quatre-vingt-dix secondes parce que notre Step 0 avait validé le constructeur sans exercer le runtime. Le build log de comment Déblo a eu des yeux, ce qu’un pré-vol incomplet a coûté, et quels points de polish ont été livrés ou reportés.

33 min May 20, 2026
debloclaude-opus-4.7claude-codegemini-live +25
Thales & Claude deblo

Le tiret cadratin qui a tué la production : comment un slogan marketing dans un header HTTP a fait tomber le chat de Déblo pendant 24 heures

Deux jours avant la soumission App Store, tout le produit chat de Déblo s’est cassé silencieusement. Pas de spinner, pas de toast, aucune erreur dans l’UI — juste un silence radio. L’incident de 24 heures se résumait à un seul « é » dans la valeur d’un header HTTP qui levait une UnicodeEncodeError avant qu’aucune requête vers OpenRouter ne quitte le backend. Post-mortem d’une fausse hypothèse, d’une trace Sentry, et d’un fix de six lignes qui a débloqué le lancement.

30 min May 19, 2026
debloclaude-opus-4.7claude-codeincident +19
Thales & Claude deblo

Six heures, d’une page blanche à la review Apple — Comment nous avons soumis Déblo à l’App Store, en direct

Marche à marche en direct de la soumission de Déblo à l’App Store iOS en six heures : ce que les validateurs d’Apple ont rejeté (un superscript Unicode), ce que nous avons corrigé (un Promotional Text gaspillé sur des marques tierces), et les rouages de l’ASO iOS que presque tout le monde rate.

30 min May 13, 2026
debloclaude-opus-4.7claude-codeapp-store +16