amelioration latex
This commit is contained in:
@ -96,31 +96,23 @@ $historique = $db->fetchAll(
|
||||
[$id_conversation]
|
||||
);
|
||||
|
||||
// Construire le prompt système
|
||||
$system_prompt = "Tu es un assistant pédagogique en mathématiques pour élèves de collège/lycée.
|
||||
$prompt_systeme = "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.
|
||||
|
||||
RÈGLES ABSOLUES :
|
||||
- NE JAMAIS donner la réponse finale ou les calculs complets
|
||||
- Utiliser la méthode socratique : poser des questions pour guider la réflexion
|
||||
- Donner des INDICES progressifs (formules, méthodes, étapes)
|
||||
- Encourager l'élève à décomposer le problème lui-même
|
||||
- Rester positif et encourageant
|
||||
- Répondre en français simple et clair
|
||||
- Réponses courtes (max 3-4 lignes)
|
||||
- JAMAIS donner la réponse finale ou résoudre l'exercice
|
||||
- Poser des QUESTIONS pour guider la réflexion
|
||||
- Donner des INDICES progressifs
|
||||
- Rappeler les formules/théorèmes pertinents
|
||||
- Encourager l'élève à décomposer le problème
|
||||
|
||||
STRICTEMENT INTERDIT :
|
||||
- Résoudre l'exercice complètement
|
||||
- Donner les chiffres de la réponse finale
|
||||
- Faire les calculs à la place de l'élève
|
||||
UTILISE LA NOTATION MATHÉMATIQUE :
|
||||
- Fractions : 1/2 (sera converti automatiquement)
|
||||
- Puissances : x^2, 10^3
|
||||
- Symboles : × (multiplication), ÷ (division)
|
||||
- Tu peux aussi utiliser LaTeX entre dollars : \$\\frac{1}{2}\$
|
||||
|
||||
CONTEXTE :
|
||||
Évaluation : {$question['titre_eval']}
|
||||
Type de question : {$question['type_question']}
|
||||
|
||||
ÉNONCÉ :
|
||||
{$question['enonce']}
|
||||
|
||||
Aide l'élève avec des questions et indices, PAS avec la réponse.";
|
||||
ÉNONCÉ DE LA QUESTION (NE CONTIENT PAS LA RÉPONSE) :
|
||||
" . $enonce_question;
|
||||
|
||||
// Construire l'historique pour Ollama
|
||||
$messages_ollama = [];
|
||||
|
||||
@ -243,13 +243,71 @@ async loadHelpRemaining() {
|
||||
}
|
||||
|
||||
ajouterMessage(texte, type) {
|
||||
const msgDiv = document.createElement('div');
|
||||
msgDiv.className = `message message-${type}`;
|
||||
msgDiv.textContent = texte;
|
||||
this.chatMessages.appendChild(msgDiv);
|
||||
this.scrollToBottom();
|
||||
const msgDiv = document.createElement('div');
|
||||
msgDiv.className = `message message-${type}`;
|
||||
|
||||
// Convertir le texte brut en HTML avec support LaTeX
|
||||
const htmlContent = this.formatMathText(texte);
|
||||
msgDiv.innerHTML = htmlContent;
|
||||
|
||||
this.chatMessages.appendChild(msgDiv);
|
||||
|
||||
// Rendre les formules mathématiques avec KaTeX
|
||||
if (typeof renderMathInElement !== 'undefined') {
|
||||
renderMathInElement(msgDiv, {
|
||||
delimiters: [
|
||||
{left: '$$', right: '$$', display: true}, // Mode display (centré)
|
||||
{left: '$', right: '$', display: false}, // Mode inline
|
||||
{left: '\\(', right: '\\)', display: false},
|
||||
{left: '\\[', right: '\\]', display: true}
|
||||
],
|
||||
throwOnError: false,
|
||||
trust: true
|
||||
});
|
||||
}
|
||||
|
||||
this.scrollToBottom();
|
||||
}
|
||||
|
||||
// NOUVELLE MÉTHODE : Formater le texte avec support maths
|
||||
formatMathText(texte) {
|
||||
// Convertir les retours à la ligne en <br>
|
||||
let html = texte.replace(/\n/g, '<br>');
|
||||
|
||||
// Détecter et convertir les fractions communes
|
||||
// 1/2 → $\frac{1}{2}$
|
||||
html = html.replace(/(\d+)\/(\d+)/g, '$\\frac{$1}{$2}$');
|
||||
|
||||
// Convertir les puissances
|
||||
// x^2 → $x^2$
|
||||
html = html.replace(/([a-z0-9]+)\^([0-9]+)/gi, '$$$1^{$2}$$');
|
||||
|
||||
// Convertir les indices
|
||||
// x_1 → $x_1$
|
||||
html = html.replace(/([a-z0-9]+)_([0-9]+)/gi, '$$$1_{$2}$$');
|
||||
|
||||
// Symboles mathématiques courants
|
||||
const symbols = {
|
||||
'×': '\\times',
|
||||
'÷': '\\div',
|
||||
'≤': '\\leq',
|
||||
'≥': '\\geq',
|
||||
'≠': '\\neq',
|
||||
'≈': '\\approx',
|
||||
'∞': '\\infty',
|
||||
'√': '\\sqrt',
|
||||
'π': '\\pi',
|
||||
'∑': '\\sum',
|
||||
'∫': '\\int'
|
||||
};
|
||||
|
||||
for (let [symbol, latex] of Object.entries(symbols)) {
|
||||
html = html.replace(new RegExp(symbol, 'g'), '$' + latex + '$');
|
||||
}
|
||||
|
||||
return html;
|
||||
}
|
||||
|
||||
afficherTypingIndicator() {
|
||||
const typingDiv = document.createElement('div');
|
||||
typingDiv.className = 'typing-indicator';
|
||||
|
||||
@ -595,6 +595,9 @@ $reponses_sauvegardees = json_decode($tentative['reponses_json'] ?? '{}', true)
|
||||
</style>
|
||||
<!-- Chatbot IA Styles -->
|
||||
<link rel="stylesheet" href="assets/css/chatbot.css">
|
||||
|
||||
<!-- KaTeX pour le rendu mathématique -->
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css">
|
||||
</head>
|
||||
<body>
|
||||
<?php if ($apercu_mode): ?>
|
||||
@ -997,6 +1000,11 @@ $reponses_sauvegardees = json_decode($tentative['reponses_json'] ?? '{}', true)
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- KaTeX JS -->
|
||||
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js"></script>
|
||||
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js"></script>
|
||||
|
||||
<!-- Chatbot IA Scripts -->
|
||||
<script src="assets/js/chatbot.js"></script>
|
||||
<script>
|
||||
|
||||
Reference in New Issue
Block a user