renforcement chatbot
This commit is contained in:
@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user