Spaces:
Runtime error
MCQ_SPEC v3 : integration du prompt systeme QCM affine
Browse filesAncre sur les 33 exemples valides (font foi). Ajouts :
- Distracteurs : flip de signe JAMAIS sur entree nulle ; swap de colonnes sur
entrees SYMBOLIQUES (sur entieres = risque de collision -> flips distincts) ;
near-miss meme famille ; interdits (bloc fige, etiquette linear, artificiels).
- Formatage : jamais d exemple/parenthese/annotation sur la SEULE bonne reponse.
- Formulation directe : retire compute in two ways / show that / draw / justify.
- Matrices d option en \small (anti-scrollbar) ; bmatrix pleine en solution.
- Eclatement d une question en N cas avec solution PARTITIONNEE (concat==source).
Ecart assume vs prompt fourni : questionHint reste REMPLI (35/35 dans les
exemples valides), pas vide. Smoke 71/71.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- app/pipeline/prompts.py +45 -6
|
@@ -532,6 +532,12 @@ TRANSLATE_FORMAT_BOTH = (
|
|
| 532 |
# l'app (fences 4, globals(), injections nues camelCase Aff, IDs contigus).
|
| 533 |
# v1 → v2 (2026-07-02) : MCQ_SPEC + section « DISTRACTEURS EN MIROIR » (règle
|
| 534 |
# enseignante : grille symétrique, bonne réponse jamais devinable par la forme).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 535 |
# ─────────────────────────────────────────────────────────────────────────────
|
| 536 |
|
| 537 |
MCQ_SPEC = """\
|
|
@@ -547,7 +553,7 @@ FORMAT QCM (questionType MCQ) — NORMATIF :
|
|
| 547 |
::::
|
| 548 |
|
| 549 |
::::{questionHint}
|
| 550 |
-
<indice
|
| 551 |
::::
|
| 552 |
|
| 553 |
::::{mcqAnswer}
|
|
@@ -644,10 +650,16 @@ variante trivialement éliminable :
|
|
| 644 |
singularité, bloc figé), reconstruis les distracteurs.
|
| 645 |
|
| 646 |
DISTINCTION GARANTIE SUR TOUTES LES DÉCLINAISONS :
|
| 647 |
-
• Construis chaque distracteur par une modification à DELTA NON NUL GARANTI
|
| 648 |
-
|
| 649 |
-
|
| 650 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 651 |
• Vérifie en Python : sur ≥300 tirages, `assert` que les options sont deux à
|
| 652 |
deux distinctes (chaînes rendues). Aucune collision tolérée.
|
| 653 |
|
|
@@ -671,7 +683,34 @@ questions. Les variables des paires suivantes s'ajoutent SANS aléa nouveau.
|
|
| 671 |
|
| 672 |
FORMATAGE : STRICTEMENT IDENTIQUE entre bonne réponse et distracteurs (même
|
| 673 |
style LaTeX, mêmes helpers, même nombre de décimales, même notation
|
| 674 |
-
matricielle) — sinon la bonne réponse se devine.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 675 |
|
| 676 |
L'ÉNONCÉ NE DONNE JAMAIS LA RÉPONSE (l'énoncé définit, la question interroge).
|
| 677 |
""" # noqa: E501 — texte normatif verbatim (valeur injectée telle quelle, accolades SIMPLES)
|
|
|
|
| 532 |
# l'app (fences 4, globals(), injections nues camelCase Aff, IDs contigus).
|
| 533 |
# v1 → v2 (2026-07-02) : MCQ_SPEC + section « DISTRACTEURS EN MIROIR » (règle
|
| 534 |
# enseignante : grille symétrique, bonne réponse jamais devinable par la forme).
|
| 535 |
+
# v2 → v3 (2026-07-06) : intégration du prompt système QCM affiné —
|
| 536 |
+
# distracteurs cohérents (erreur réelle, near-miss même famille, flip jamais sur
|
| 537 |
+
# entrée nulle, swap sûr en symbolique), formulation directe, matrices d'option
|
| 538 |
+
# en \small (anti-scrollbar), éclatement avec solution partitionnée. Écart
|
| 539 |
+
# assumé vs le prompt fourni : questionHint reste REMPLI (35/35 dans les 33
|
| 540 |
+
# exemples validés qui font foi), pas vide.
|
| 541 |
# ─────────────────────────────────────────────────────────────────────────────
|
| 542 |
|
| 543 |
MCQ_SPEC = """\
|
|
|
|
| 553 |
::::
|
| 554 |
|
| 555 |
::::{questionHint}
|
| 556 |
+
<indice de DÉMARRAGE qui ne révèle pas la réponse ; VERBATIM si repris de la source>
|
| 557 |
::::
|
| 558 |
|
| 559 |
::::{mcqAnswer}
|
|
|
|
| 650 |
singularité, bloc figé), reconstruis les distracteurs.
|
| 651 |
|
| 652 |
DISTINCTION GARANTIE SUR TOUTES LES DÉCLINAISONS :
|
| 653 |
+
• Construis chaque distracteur par une modification à DELTA NON NUL GARANTI,
|
| 654 |
+
chacun sur une ENTRÉE/POSITION DIFFÉRENTE. Techniques sûres :
|
| 655 |
+
– Flip de signe d'une entrée : SEULEMENT sur une entrée GARANTIE ≠ 0
|
| 656 |
+
(flipper un 0 redonne l'original → collision). Tire ces entrées dans un
|
| 657 |
+
domaine excluant 0, ou choisis une position structurellement non nulle.
|
| 658 |
+
– Interversion de colonnes/variables (∂x↔∂y) : SÛRE sur entrées
|
| 659 |
+
SYMBOLIQUES (une colonne dépend de x, l'autre de y → jamais égales) ;
|
| 660 |
+
DANGEREUSE sur entrées entières (deux colonnes peuvent coïncider) → dans
|
| 661 |
+
ce cas, préférer 3 flips de signe sur des entrées distinctes non nulles.
|
| 662 |
+
– Décalage ±1 (bornes entières) ; multiple/omission (b oublié, −b, 2b).
|
| 663 |
• Vérifie en Python : sur ≥300 tirages, `assert` que les options sont deux à
|
| 664 |
deux distinctes (chaînes rendues). Aucune collision tolérée.
|
| 665 |
|
|
|
|
| 683 |
|
| 684 |
FORMATAGE : STRICTEMENT IDENTIQUE entre bonne réponse et distracteurs (même
|
| 685 |
style LaTeX, mêmes helpers, même nombre de décimales, même notation
|
| 686 |
+
matricielle, MÊME LONGUEUR) — sinon la bonne réponse se devine.
|
| 687 |
+
• JAMAIS d'exemple/parenthèse explicative sur la SEULE bonne réponse
|
| 688 |
+
(« … (e.g. A<B donne x) ») : soit tout le monde a l'ajout, soit personne.
|
| 689 |
+
• JAMAIS d'annotation d'erreur visible dans une option (« (signe oublié) »,
|
| 690 |
+
« (forgot +b) ») — ça vit UNIQUEMENT dans la solution détaillée.
|
| 691 |
+
|
| 692 |
+
FORMULATION DIRECTE (QCM) : on demande le RÉSULTAT à cocher. Retire les consignes
|
| 693 |
+
de méthode/rédaction qui n'ont de sens qu'en réponse libre — « calcule de deux
|
| 694 |
+
façons », « vos deux réponses doivent coïncider », « montre que… », « trace /
|
| 695 |
+
esquisse… », « justifie… ». Ex. : « Compute (f∘g)(x) in two ways… should
|
| 696 |
+
agree! » → « Compute (f∘g)(x). »
|
| 697 |
+
|
| 698 |
+
RENDU DES MATRICES DANS LES OPTIONS (anti-scrollbar) : une `bmatrix` pleine dans
|
| 699 |
+
une case d'option fait apparaître un ascenseur. Si une OPTION contient une
|
| 700 |
+
matrice, réduis-la : `{\\small \\begin{bmatrix}…\\end{bmatrix}}` (échelle si
|
| 701 |
+
besoin : smallmatrix < \\scriptsize < \\footnotesize < \\small ; défaut \\small).
|
| 702 |
+
Garde les `bmatrix` PLEINES dans la detailedSolution (fidélité + place).
|
| 703 |
+
|
| 704 |
+
ÉCLATEMENT (autorisé) : si UNE question porte sur N cas indépendants (par
|
| 705 |
+
ellipse, par sous-fonction…), tu peux l'éclater en N questions — le contexte
|
| 706 |
+
commun monte dans l'énoncé global, et la detailedSolution source est PARTITIONNÉE
|
| 707 |
+
par cas (**(i)**, **(ii)**…) puis rattachée à chaque question. Contrainte dure :
|
| 708 |
+
la CONCATÉNATION des morceaux doit être IDENTIQUE à la solution source. Par
|
| 709 |
+
défaut (pas de cas multiples), garde le MÊME nombre de questions que la source.
|
| 710 |
+
|
| 711 |
+
questionHint : indice de DÉMARRAGE qui ne révèle jamais la réponse (cf. exemples
|
| 712 |
+
validés — tous en fournissent un) ; VERBATIM si la source en a un ; vide
|
| 713 |
+
seulement si aucun indice pertinent.
|
| 714 |
|
| 715 |
L'ÉNONCÉ NE DONNE JAMAIS LA RÉPONSE (l'énoncé définit, la question interroge).
|
| 716 |
""" # noqa: E501 — texte normatif verbatim (valeur injectée telle quelle, accolades SIMPLES)
|