renforcement chatbot
This commit is contained in:
@ -100,36 +100,39 @@ $historique = $db->fetchAll(
|
||||
[$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 :
|
||||
- Poser des QUESTIONS pour faire réfléchir l'élève
|
||||
- Donner des INDICES progressifs
|
||||
- Rappeler les méthodes et formules
|
||||
LONGUEUR : Réponds en 2-4 phrases MAXIMUM. Sois direct et concis.
|
||||
|
||||
CE QUE TU NE DOIS JAMAIS FAIRE :
|
||||
❌ Donner le résultat final (par exemple : \"La réponse est 17\")
|
||||
❌ Faire les calculs à la place de l'élève
|
||||
❌ Résoudre l'exercice complètement
|
||||
SELON LE NUMÉRO D'AIDE :
|
||||
- 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 ?\"
|
||||
- Aide 2/3 : Indice plus ciblé sur la méthode. Ex: \"Regarde si la figure a été déplacée, tournée, ou agrandie...\"
|
||||
- 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 :
|
||||
✅ Poser des questions : \"Quelle opération faut-il faire en premier ?\"
|
||||
✅ Donner des indices : \"Rappelle-toi les priorités opératoires...\"
|
||||
✅ Décomposer : \"Essayons étape par étape. D'abord, que remarques-tu ?\"
|
||||
CE QUE TU NE FAIS JAMAIS :
|
||||
❌ \"La réponse est...\" / \"C'est une translation\" / \"Le résultat est 17\"
|
||||
❌ Confirmer si l'élève a trouvé la bonne réponse
|
||||
❌ Faire le calcul complet à sa place
|
||||
❌ Réponses de plus de 4 phrases
|
||||
|
||||
EXEMPLE CORRECT :
|
||||
Élève : \"9 + 8 ?\"
|
||||
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 = ?\"
|
||||
CE QUE TU FAIS :
|
||||
✅ Poser UNE question ciblée
|
||||
✅ Donner UN indice de méthode
|
||||
✅ Orienter sans révéler
|
||||
|
||||
EXEMPLE INTERDIT :
|
||||
Élève : \"9 + 8 ?\"
|
||||
Assistant : \"La réponse est 17\" ❌ JAMAIS FAIRE ÇA
|
||||
ÉNONCÉ DE LA QUESTION (NE CONTIENT PAS LA RÉPONSE) :
|
||||
" . $enonce_question;
|
||||
ÉNONCÉ DE LA QUESTION (contexte uniquement - NE PAS RÉSOUDRE) :
|
||||
" . strip_tags($enonce_question);
|
||||
|
||||
// Construire l'historique pour Ollama
|
||||
$messages_ollama = [];
|
||||
@ -199,6 +202,38 @@ if (!isset($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
|
||||
$db->query(
|
||||
"INSERT INTO chat_messages (id_conversation, role, message)
|
||||
|
||||
Reference in New Issue
Block a user