amelioration latex

This commit is contained in:
nicoboy
2026-01-04 10:08:27 +01:00
parent a1ef578526
commit bff66c00ee
3 changed files with 84 additions and 26 deletions

View File

@ -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 = [];

View File

@ -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';

View File

@ -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>