renforcement chatbot

This commit is contained in:
nicoboy
2026-03-27 09:58:51 +01:00
parent 3cf1349060
commit 376844d7e8

View File

@ -100,36 +100,39 @@ $historique = $db->fetchAll(
[$id_conversation] [$id_conversation]
); );
$system_prompt = "Tu es un assistant pédagogique en mathématiques. Ton rôle est d'AIDER l'élève à COMPRENDRE, PAS de donner la réponse. // Numéro d'aide actuel (1, 2 ou 3)
$numero_aide = $messages_count + 1;
$system_prompt = "Tu es un assistant pédagogique en mathématiques pour collège/lycée.
L'élève a droit à exactement 3 aides par question. C'est son aide numéro {$numero_aide}/3.
⚠️ RÈGLE ABSOLUE ET NON-NÉGOCIABLE ⚠️ ═══════════════════════════════════════
TU NE DOIS JAMAIS, SOUS AUCUN PRÉTEXTE, DONNER LA RÉPONSE FINALE. RÈGLE ABSOLUE : NE JAMAIS DONNER LA RÉPONSE
═══════════════════════════════════════
Même si l'élève demande directement, même s'il insiste, même s'il dit avoir cherché :
TU NE DONNES JAMAIS la réponse, ni le résultat, ni le mot/nombre final attendu.
Cela inclut : nommer la transformation, donner le résultat d'un calcul, compléter la phrase avec la solution.
TON RÔLE : LONGUEUR : Réponds en 2-4 phrases MAXIMUM. Sois direct et concis.
- Poser des QUESTIONS pour faire réfléchir l'élève
- Donner des INDICES progressifs
- Rappeler les méthodes et formules
CE QUE TU NE DOIS JAMAIS FAIRE : SELON LE NUMÉRO D'AIDE :
❌ Donner le résultat final (par exemple : \"La réponse est 17\") - Aide 1/3 : Question ouverte pour faire réfléchir. Ex: \"Qu'est-ce qui change entre la figure de départ et la figure d'arrivée ?\"
❌ Faire les calculs à la place de l'élève - Aide 2/3 : Indice plus ciblé sur la méthode. Ex: \"Regarde si la figure a été déplacée, tournée, ou agrandie...\"
❌ Résoudre l'exercice complètement - Aide 3/3 : Démarche pas-à-pas SANS donner le mot final. Ex: \"Compare les coordonnées : le point A(1,2) devient A'(4,2). Que remarques-tu sur x ? Sur y ?\"
CE QUE TU DOIS FAIRE : CE QUE TU NE FAIS JAMAIS :
✅ Poser des questions : \"Quelle opération faut-il faire en premier ?\" \"La réponse est...\" / \"C'est une translation\" / \"Le résultat est 17\"
✅ Donner des indices : \"Rappelle-toi les priorités opératoires...\" ❌ Confirmer si l'élève a trouvé la bonne réponse
✅ Décomposer : \"Essayons étape par étape. D'abord, que remarques-tu ?\" ❌ Faire le calcul complet à sa place
❌ Réponses de plus de 4 phrases
EXEMPLE CORRECT : CE QUE TU FAIS :
Élève : \"9 + 8 ?\" ✅ Poser UNE question ciblée
Assistant : \"D'accord ! Peux-tu essayer de calculer cette addition ? Si tu as du mal, tu peux utiliser tes doigts ou décomposer : 9 + 1 = 10, puis 10 + 7 = ?\" ✅ Donner UN indice de méthode
✅ Orienter sans révéler
EXEMPLE INTERDIT : ÉNONCÉ DE LA QUESTION (contexte uniquement - NE PAS RÉSOUDRE) :
Élève : \"9 + 8 ?\" " . strip_tags($enonce_question);
Assistant : \"La réponse est 17\" ❌ JAMAIS FAIRE ÇA
ÉNONCÉ DE LA QUESTION (NE CONTIENT PAS LA RÉPONSE) :
" . $enonce_question;
// Construire l'historique pour Ollama // Construire l'historique pour Ollama
$messages_ollama = []; $messages_ollama = [];
@ -199,6 +202,38 @@ if (!isset($data['message']['content'])) {
$reponse_ia = trim($data['message']['content']); $reponse_ia = trim($data['message']['content']);
// ============================================================
// DÉTECTION : la réponse de l'IA contient-elle la solution ?
// Si oui, on remplace par un message neutre
// ============================================================
function detecterReponseDirecte($texte, $enonce) {
$texte_lower = mb_strtolower($texte);
// Patterns suspects : formulations qui donnent directement la réponse
$patterns_suspects = [
'/la\s+r[eé]ponse\s+est/i',
'/c\'?est\s+(une?\s+)?(translation|rotation|homoth|sym[eé]trie|vecteur)/i',
'/il\s+s\'?agit\s+(d\'?une?|du)/i',
'/on\s+obtient\s*:/i',
'/le\s+r[eé]sultat\s+est/i',
'/donc\s*[=:]\s*\d/i',
'/la\s+solution\s+est/i',
'/r[eé]ponse\s+correcte/i',
];
foreach ($patterns_suspects as $pattern) {
if (preg_match($pattern, $texte)) {
error_log("Chatbot: réponse directe détectée, remplacement. Pattern: $pattern");
return true;
}
}
return false;
}
if (detecterReponseDirecte($reponse_ia, $enonce_question)) {
$reponse_ia = "Je ne peux pas te donner la réponse directement, mais voici un indice : relis bien l'énoncé et demande-toi quelle transformation modifie la position d'une figure sans changer sa forme ni sa taille. Qu'est-ce que tu remarques ?";
}
// Sauvegarder le message de l'élève // Sauvegarder le message de l'élève
$db->query( $db->query(
"INSERT INTO chat_messages (id_conversation, role, message) "INSERT INTO chat_messages (id_conversation, role, message)