7.9 KiB
Prompt Exercices Long Terme — Analyse patterns TCF Canada
Source :
src/lib/deepseek.ts→ fonctiongeneratePatternExercices(patterns)Modèle : DeepSeek Chat (deepseek-chat) ·temperature: 0.4·response_format: json_object·AbortSignal.timeout(20_000)Introduit : Sprint 3.6c (2026-04-22) — commitc48ae8d
Contexte & Variables dynamiques
Ce prompt est déclenché par GET /users/patterns (Premium uniquement) quand l'analyse des 5 dernières productions révèle un ou plusieurs patterns confirmés (même code d'erreur présent dans ≥ 3 productions sur 5).
Les exercices produits sont distincts des exercices individuels générés par correction (prompt dans Prompt_maître.md) : ils ciblent des faiblesses structurelles récurrentes plutôt qu'une production spécifique.
| Variable | Description | Exemple |
|---|---|---|
patterns |
Liste des patterns confirmés issus de aggregatePatterns |
Voir structure ci-dessous |
Structure d'un pattern en entrée
interface PatternInput {
code: string // Code taxonomie (cf. TAXONOMIE_ERREURS.md)
critere: Critere // 'adequation_tache' | 'coherence_cohesion' |
// 'competence_lexicale' | 'competence_grammaticale'
frequency: number // 3, 4 ou 5 (seuil d'agrégation)
description: string | null // non-null uniquement pour code === 'autre'
}
Exemple d'entrée (3 patterns) :
- accord_sujet_verbe (competence_grammaticale) — apparu 4/5 fois
- connecteurs_repetes (coherence_cohesion) — apparu 3/5 fois
- repetition_lexicale (competence_lexicale) — apparu 3/5 fois
Prompt système envoyé au modèle
Tu es un coach spécialisé dans la préparation au TCF Canada (Test de connaissance du français).
Un candidat commet systématiquement les mêmes erreurs sur ses 5 dernières productions écrites. Tu dois produire UN exercice ciblé par pattern d'erreur récurrent identifié.
CONTEXTE :
- Ces exercices sont des exercices LONG TERME destinés à corriger des faiblesses structurelles récurrentes.
- Ils sont DISTINCTS des exercices individuels générés après chaque correction (qui ciblent une production spécifique).
- Tu n'as PAS accès au texte du candidat. Tes exemples doivent être génériques et représentatifs de l'erreur.
RÈGLES :
1. Un exercice par pattern en entrée, dans le même ordre.
2. Le diagnostic explique en 1-2 phrases POURQUOI cette erreur est problématique pour le TCF Canada.
3. La consigne demande au candidat de corriger ou reformuler une phrase.
4. L'exemple est une phrase incorrecte illustrant le pattern (inventée, pas tirée du candidat).
5. La correction est la version correcte de l'exemple.
6. L'astuce est un procédé mnémotechnique, une règle pratique ou un réflexe de relecture que le candidat doit appliquer APRÈS avoir rédigé son texte pour détecter et corriger cette erreur lui-même. Formulée comme un conseil direct et actionnable.
Exemples d'astuces :
- Subjonctif : "Après 'bien que', 'pourvu que', 'avant que' → le verbe qui suit est TOUJOURS au subjonctif. Relisez votre texte en cherchant ces expressions."
- Accords : "Relisez chaque phrase en pointant du doigt le sujet et son verbe. S'ils sont éloignés, vérifiez l'accord."
- Connecteurs : "Après rédaction, surlignez tous vos connecteurs. Si le même revient plus de 2 fois, remplacez-en un."
7. Niveau de langue : NCLC 7-9 (ni trop simple, ni trop littéraire).
8. Les exemples doivent être en contexte TCF Canada : courriels, lettres formelles, essais argumentatifs, situations professionnelles canadiennes.
FORMAT DE SORTIE — JSON strict, aucun texte avant ni après :
{
"exercises": [
{
"code": "<code_taxonomie>",
"critere": "<critere>",
"diagnostic": "<1-2 phrases>",
"exercice": {
"consigne": "<instruction au candidat>",
"exemple": "<phrase incorrecte>",
"correction": "<phrase corrigée>",
"astuce": "<procédé mnémotechnique ou réflexe de relecture>"
}
}
]
}
Prompt utilisateur — template dynamique
Construit par buildPatternExercicesUserPrompt(patterns) dans src/lib/deepseek.ts :
Voici les patterns d'erreurs récurrents détectés sur les 5 dernières productions du candidat :
- <code> (<critere>) — apparu <frequency>/5 fois[ — « <description> »]
- ...
Produis un exercice ciblé par pattern. JSON strict uniquement.
Le fragment — « <description> » n'apparaît que lorsque le code est autre (description textuelle obligatoire selon la taxonomie — cf. TAXONOMIE_ERREURS.md §Règles d'utilisation).
Structure de la réponse JSON attendue
{
"exercises": [
{
"code": "accord_sujet_verbe",
"critere": "competence_grammaticale",
"diagnostic": "<1-2 phrases expliquant pourquoi cette erreur coûte des points au TCF>",
"exercice": {
"consigne": "<instruction claire au candidat>",
"exemple": "<phrase incorrecte générique, contexte TCF Canada>",
"correction": "<version correcte>",
"astuce": "<procédé mnémotechnique ou réflexe de relecture actionnable>"
}
}
]
}
Champs expliqués
| Champ | Rôle |
|---|---|
code |
Code taxonomie propagé depuis l'entrée — permet au frontend de rattacher l'exercice à son pattern |
critere |
Critère TCF parmi les 4 officiels — validé en runtime via isValidCritere |
diagnostic |
Explication pédagogique courte : pourquoi cette erreur pénalise au TCF |
exercice.consigne |
Instruction explicite au candidat (« Corrigez », « Reformulez », « Complétez ») |
exercice.exemple |
Phrase incorrecte illustrant l'erreur — inventée par le modèle, en contexte TCF Canada (courriel formel, lettre, essai, cadre professionnel) |
exercice.correction |
Version correcte de l'exemple |
exercice.astuce |
Conseil de relecture actionnable — procédé mnémotechnique ou règle pratique que le candidat applique lors de la phase de relecture pour détecter ses propres erreurs |
Post-traitement côté serveur
Après réception de la réponse DeepSeek, generatePatternExercices valide chaque item :
- Présence stricte des champs
code,critere,diagnostic,exercice.consigne,exercice.exemple,exercice.correction,exercice.astuce— tous doivent être des chaînes non vides. - Validation du critère via
isValidCritere(cf.src/lib/taxonomieErreurs.ts) — tout critère hors taxonomie est filtré. - Les items invalides sont silencieusement ignorés — pas de throw. La liste retournée peut donc être plus courte que la liste de patterns en entrée.
La réponse persistée dans pattern_analyses.exercises (JSONB) est la liste filtrée.
Dégradation gracieuse
Si l'appel DeepSeek échoue (timeout, API error, JSON invalide) :
patternsController.listcapture l'erreur, logue[patternsController.list] generatePatternExercices failed.- L'analyse est persistée avec
exercises: []— patterns et indice de préparation restent disponibles. - Le frontend affiche la liste des patterns sans section exercices (cf.
ProgressionPremium). - Un refetch ultérieur (après
staleTimeou nouvelle correction) retentera la génération.
Contraintes opérationnelles
| Paramètre | Valeur | Justification |
|---|---|---|
| Modèle | deepseek-chat |
Cohérent avec les autres prompts (correction, modèle, idées) |
| Température | 0.4 |
Légèrement plus élevée que la correction (0.2) pour favoriser la variété des exemples |
| Format | json_object |
Strict, pas de markdown parasite |
| Timeout | 20 000 ms | Plus long que generateIdees (15 s) car la réponse peut contenir jusqu'à ~10 exercices (4 critères × patterns) |
Historique de ce document
| Version | Date | Changements |
|---|---|---|
| 1.0 | 2026-04-23 | Création — documentation du prompt validé par Hermann lors du Sprint 3.6c (2026-04-22) |