Choisir entre Ajustable et Natif
Le bon modèle pour le bon usage
Après avoir exploré les deux approches de raisonnement de Mistral AI, il est temps de synthétiser et de vous donner les clés pour choisir la bonne stratégie selon votre contexte. Cette leçon récapitule les différences et fournit un cadre de décision concret.
Récapitulatif des deux approches
Raisonnement Ajustable (mistral-small-latest)
- Activation : paramètre
reasoning_effort(“high” ou “none”) - Flexibilité : vous choisissez quand activer le raisonnement
- Coût : maîtrisé car le raisonnement n’est consommé que quand nécessaire
- Intégration : Chat Completions, Agents, Conversations
Raisonnement Natif (Magistral)
- Activation : toujours actif, impossible à désactiver
- Flexibilité : aucune, le raisonnement est systématique
- Coût : plus élevé car chaque requête inclut des tokens de réflexion
- Qualité : supérieure sur les tâches de raisonnement complexe
Tableau comparatif
| Critère | Small (Ajustable) | Magistral (Natif) |
|---|---|---|
| Modèles | mistral-small-latest | magistral-small-latest, magistral-medium-latest |
| Contrôle | Granulaire (on/off par requête) | Aucun (toujours actif) |
| Coût moyen | Variable (bas sans reasoning, modéré avec) | Toujours élevé (reasoning systématique) |
| Latence | Basse (none) à modérée (high) | Toujours modérée à haute |
| Qualité raisonnement | Bonne avec "high" | Excellente (modèles dédiés) |
| System prompt | Standard | Structure 3 parties recommandée + prompt_mode |
| Format traces | Chunk thinking avec text direct | Chunk thinking avec sous-tableau thinking |
| Cas d'usage idéal | Applications mixtes (simple + complexe) | Tâches exclusivement complexes |
Arbre de décision
Voici un guide pas-à-pas pour choisir :
1. Votre application mélange tâches simples et complexes ?
Si oui, utilisez mistral-small-latest avec un routage intelligent :
from mistralai import Mistral
client = Mistral(api_key="VOTRE_CLE_API")
def smart_router(question):
"""Route la question vers le bon mode."""
complex_patterns = [
"démontre", "prouve", "analyse", "compare",
"debug", "optimise", "pourquoi", "risque",
"architecture", "stratégie"
]
needs_reasoning = any(p in question.lower() for p in complex_patterns)
return client.chat.complete(
model="mistral-small-latest",
messages=[{"role": "user", "content": question}],
reasoning_effort="high" if needs_reasoning else "none"
)
2. Toutes vos tâches sont complexes ?
Si oui, utilisez directement Magistral :
# Application dédiée au raisonnement : Magistral d'office
response = client.chat.complete(
model="magistral-medium-latest",
messages=[
{"role": "system", "content": "Votre system prompt spécialisé..."},
{"role": "user", "content": question}
],
prompt_mode=None
)
3. Vous avez un budget serré ?
Privilégiez Small avec raisonnement ajustable. Activez “high” uniquement quand la qualité le justifie.
4. La précision est critique (médical, juridique, financier) ?
Utilisez Magistral Medium pour maximiser la qualité du raisonnement sur chaque requête.
Architecture hybride
L’approche la plus efficace combine les deux :
class ReasoningRouter:
"""Router intelligent entre les modèles de raisonnement."""
def __init__(self, api_key):
self.client = Mistral(api_key=api_key)
def classify_complexity(self, question):
"""Évalue la complexité d'une question (0-10)."""
response = self.client.chat.complete(
model="mistral-small-latest",
messages=[{
"role": "user",
"content": f"Évaluez la complexité de cette question de 0 à 10 (répondez uniquement le chiffre) : {question}"
}],
reasoning_effort="none"
)
try:
score = int(response.choices[0].message.content.strip())
return min(max(score, 0), 10)
except ValueError:
return 5 # défaut modéré
def query(self, question, system_prompt=None):
"""Route automatiquement vers le bon modèle."""
complexity = self.classify_complexity(question)
if complexity <= 3:
# Simple : Small sans raisonnement
return self.client.chat.complete(
model="mistral-small-latest",
messages=[{"role": "user", "content": question}],
reasoning_effort="none"
)
elif complexity <= 6:
# Modéré : Small avec raisonnement
return self.client.chat.complete(
model="mistral-small-latest",
messages=[{"role": "user", "content": question}],
reasoning_effort="high"
)
else:
# Complexe : Magistral
messages = []
if system_prompt:
messages.append({"role": "system", "content": system_prompt})
messages.append({"role": "user", "content": question})
return self.client.chat.complete(
model="magistral-medium-latest",
messages=messages,
prompt_mode=None if system_prompt else "reasoning"
)
Bonnes pratiques de production
1. Monitoring des coûts
def track_reasoning_cost(response, model):
"""Estime le coût de raisonnement."""
usage = response.usage
reasoning_tokens = usage.completion_tokens
prompt_tokens = usage.prompt_tokens
print(f"Modèle: {model}")
print(f"Tokens entrée: {prompt_tokens}")
print(f"Tokens sortie (raisonnement inclus): {reasoning_tokens}")
2. Versionnage en production
# TOUJOURS spécifier une version fixe en production
MODELS = {
"fast": "mistral-small-latest",
"reasoning": "mistral-small-latest",
"deep": "magistral-medium-2509" # version fixe
}
3. Fallback gracieux
def resilient_query(client, question, preferred_model="magistral-medium-latest"):
"""Requête avec fallback si le modèle principal échoue."""
try:
return client.chat.complete(
model=preferred_model,
messages=[{"role": "user", "content": question}]
)
except Exception:
# Fallback vers Small avec raisonnement
return client.chat.complete(
model="mistral-small-latest",
messages=[{"role": "user", "content": question}],
reasoning_effort="high"
)
Synthèse finale du cours
Au fil de ces 12 leçons, vous avez appris à :
- Comprendre le Test Time Computation et les thinking traces
- Contrôler le raisonnement ajustable avec
reasoning_effort - Parser les thinking chunks dans vos applications
- Intégrer le raisonnement dans les Agents et Conversations
- Maîtriser les modèles Magistral et leurs versions
- Optimiser le system prompt pour guider le raisonnement
- Configurer le
prompt_modeselon vos besoins - Anticiper les implications du raisonnement permanent
- Appliquer le raisonnement aux problèmes mathématiques
- Exploiter le raisonnement pour le code et le debugging
- Structurer vos analyses et prises de décision
- Choisir la bonne approche selon votre contexte
Le raisonnement est un outil puissant, mais comme tout outil, son efficacité dépend de la manière dont vous l’utilisez. Choisissez le bon modèle, structurez vos prompts, et mesurez l’impact sur vos coûts et performances.
Points clés à retenir
- Small ajustable : flexibilité et maîtrise des coûts, idéal pour les applications mixtes
- Magistral natif : qualité maximale, idéal pour les tâches exclusivement complexes
- L’architecture hybride avec routage intelligent est souvent la meilleure approche
- Toujours monitorer les coûts et utiliser des versions fixes en production
- Le raisonnement est un investissement : il coûte plus cher mais améliore significativement la qualité sur les tâches qui le nécessitent