Résolution de Problèmes Mathématiques
Les mathématiques : terrain de prédilection du raisonnement
Les problèmes mathématiques sont le cas d’usage où le raisonnement apporte la plus grande valeur ajoutée. Un modèle sans raisonnement peut répondre correctement à “2 + 2”, mais échoue souvent sur les problèmes multi-étapes, les démonstrations et les énigmes logiques. Avec le raisonnement, le modèle décompose, vérifie et valide chaque étape.
Problèmes arithmétiques multi-étapes
Commençons par un exemple classique où le raisonnement fait la différence :
from mistralai import Mistral
client = Mistral(api_key="VOTRE_CLE_API")
probleme = """Un magasin propose une réduction de 20% sur tous les articles.
Un client achète 3 articles à 45 euros, 2 articles à 30 euros et 1 article à 75 euros.
Il a aussi un bon de réduction supplémentaire de 15 euros applicable après la remise.
Quel est le montant final à payer ? Détaillez chaque étape."""
response = client.chat.complete(
model="magistral-medium-latest",
messages=[{"role": "user", "content": probleme}]
)
# Le modèle raisonne étape par étape :
# 1. Calcul du prix total avant réduction
# 2. Application de la remise de 20%
# 3. Soustraction du bon de 15 euros
# 4. Vérification du résultat
Le raisonnement permet au modèle de ne pas sauter d’étapes et de vérifier la cohérence de ses calculs intermédiaires.
Équations et systèmes d’équations
Les systèmes d’équations sont un excellent test pour le raisonnement structuré :
systeme = """Résolvez le système d'équations suivant :
3x + 2y - z = 7
x - y + 2z = 3
2x + 3y + z = 12
Montrez chaque étape de la résolution."""
response = client.chat.complete(
model="magistral-medium-latest",
messages=[
{"role": "system", "content": "Vous êtes un professeur de mathématiques. Détaillez chaque opération."},
{"role": "user", "content": systeme}
],
prompt_mode=None
)
Le modèle va typiquement :
- Choisir une méthode (substitution, élimination, matrices)
- Appliquer les opérations étape par étape
- Vérifier le résultat en substituant dans les équations originales
Démonstrations et preuves
Les démonstrations mathématiques révèlent toute la puissance du raisonnement natif :
demonstration = """Démontrez par récurrence que pour tout entier n >= 1 :
1^2 + 2^2 + 3^2 + ... + n^2 = n(n+1)(2n+1) / 6"""
response = client.chat.complete(
model="magistral-medium-latest",
messages=[
{"role": "system", "content": """Vous êtes un mathématicien rigoureux.
Structure de démonstration attendue :
1. Initialisation (cas de base)
2. Hypothèse de récurrence
3. Hérédité (passage de n à n+1)
4. Conclusion"""},
{"role": "user", "content": demonstration}
],
prompt_mode=None
)
Énigmes logiques
Les énigmes logiques sont particulièrement révélatrices car elles nécessitent exploration et déduction :
enigme = """Trois amis (Alice, Bob, Charlie) ont chacun un métier différent
(médecin, avocat, ingénieur) et une voiture de couleur différente (rouge, bleue, verte).
Indices :
1. Alice n'est pas médecin
2. Le propriétaire de la voiture rouge est avocat
3. Bob n'a pas la voiture verte
4. Charlie n'est pas avocat
5. L'ingénieur a la voiture bleue
Trouvez le métier et la couleur de voiture de chacun."""
response = client.chat.complete(
model="magistral-medium-latest",
messages=[{"role": "user", "content": enigme}]
)
Dans ses traces de réflexion, le modèle va :
- Lister les possibilités pour chaque personne
- Appliquer les contraintes une par une
- Éliminer les impossibilités
- Valider la solution contre tous les indices
Optimisation et probabilités
proba = """Une urne contient 5 boules rouges, 3 boules bleues et 2 boules vertes.
On tire 3 boules sans remise.
Quelle est la probabilité d'obtenir exactement 2 boules rouges et 1 boule bleue ?
Exprimez le résultat sous forme de fraction irréductible."""
response = client.chat.complete(
model="magistral-medium-latest",
messages=[{"role": "user", "content": proba}]
)
Pattern : validation automatique
Vous pouvez exploiter le raisonnement pour implémenter une validation automatique des résultats :
def solve_and_verify(client, problem):
"""Résout un problème et demande une vérification."""
# Étape 1 : résolution
solve_response = client.chat.complete(
model="magistral-medium-latest",
messages=[{"role": "user", "content": problem}]
)
answer = ""
for chunk in solve_response.choices[0].message.content:
if chunk.type == "text":
answer = chunk.text
# Étape 2 : vérification par un second appel
verify_response = client.chat.complete(
model="magistral-medium-latest",
messages=[
{"role": "user", "content": f"""Vérifiez cette solution au problème suivant :
PROBLÈME : {problem}
SOLUTION PROPOSÉE : {answer}
La solution est-elle correcte ? Si non, corrigez-la."""}
]
)
return {
"solution": answer,
"verification": verify_response.choices[0].message.content
}
Comparaison avec et sans raisonnement
Pour illustrer l’impact, voici le même problème traité avec et sans raisonnement :
probleme_test = "Si 3 poules pondent 3 oeufs en 3 jours, combien d'oeufs pondent 12 poules en 12 jours ?"
# Sans raisonnement — risque d'erreur par analogie naïve (réponse "12")
response_none = client.chat.complete(
model="mistral-small-latest",
messages=[{"role": "user", "content": probleme_test}],
reasoning_effort="none"
)
# Avec raisonnement — décomposition correcte
response_high = client.chat.complete(
model="magistral-medium-latest",
messages=[{"role": "user", "content": probleme_test}]
)
# Raisonnement attendu : 1 poule = 1 oeuf / 3 jours
# 12 poules en 12 jours = 12 * (12/3) = 48 oeufs
Points clés à retenir
- Le raisonnement excelle sur les problèmes mathématiques multi-étapes
- Utilisez un system prompt qui impose la structure de résolution (étapes, vérification)
- Les démonstrations par récurrence bénéficient énormément du raisonnement structuré
- Les énigmes logiques mettent en valeur l’exploration et l’élimination de possibilités
- Implémentez une double vérification pour les résultats critiques
- Comparez toujours les résultats avec et sans raisonnement pour valider l’apport