feat(corrections/eo): évaluation phonologique Gemini — 5 critères × /4 (Sprint 4.8)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
34b4bcdd82
commit
ec0598d122
15 changed files with 2086 additions and 290 deletions
176
docs/Prompt_exercices_long_terme.md
Normal file
176
docs/Prompt_exercices_long_terme.md
Normal file
|
|
@ -0,0 +1,176 @@
|
|||
# Prompt Exercices Long Terme — Analyse patterns TCF Canada
|
||||
|
||||
> **Source :** `src/lib/deepseek.ts` → fonction `generatePatternExercices(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) — commit `c48ae8d`
|
||||
|
||||
---
|
||||
|
||||
## 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
|
||||
|
||||
```typescript
|
||||
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
|
||||
|
||||
```json
|
||||
{
|
||||
"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 :
|
||||
|
||||
1. **Présence stricte** des champs `code`, `critere`, `diagnostic`, `exercice.consigne`, `exercice.exemple`, `exercice.correction`, `exercice.astuce` — tous doivent être des chaînes non vides.
|
||||
2. **Validation du critère** via `isValidCritere` (cf. `src/lib/taxonomieErreurs.ts`) — tout critère hors taxonomie est **filtré**.
|
||||
3. **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.list` capture 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 `staleTime` ou 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) |
|
||||
Loading…
Add table
Add a link
Reference in a new issue