Aller au contenu principal

Le Paramètre prompt_mode

Mis à jour le 29 juillet 2026

⚠️ Modèle déprécié (mise à jour du 28 juillet 2026) : les modèles Magistral sont dépréciés par Mistral, avec des retraits échelonnés jusqu’à mi-2026. Le raisonnement est désormais intégré aux modèles généralistes (Mistral Small 4, Medium 3.5). Les concepts de ce cours restent instructifs, mais ne construisez plus de nouveau projet sur Magistral — consultez le cours « Mistral en 2026 » pour la migration.

Contrôler le system prompt par défaut

Les modèles Magistral intègrent un system prompt par défaut optimisé pour le raisonnement. Vous ne le voyez pas, mais il agit à chaque appel : c’est lui qui décide de la manière dont le modèle structure sa réflexion et ses réponses. Le paramètre prompt_mode détermine si ce prompt interne est appliqué ou non — et donc, en creux, qui de Mistral ou de vous impose la méthode.

Les deux valeurs de prompt_mode

Quand prompt_mode vaut "reasoning", ou quand vous ne le spécifiez pas du tout, le modèle utilise son system prompt interne. Celui-ci structure le raisonnement en étapes logiques, encourage la vérification des hypothèses et sépare nettement la réflexion de la réponse finale.

from mistralai import Mistral

client = Mistral(api_key="VOTRE_CLE_API")

# Le system prompt par défaut est appliqué automatiquement
response = client.chat.complete(
    model="magistral-medium-latest",
    messages=[
        {"role": "user", "content": "Démontrez que la somme des n premiers entiers est n(n+1)/2."}
    ],
    prompt_mode="reasoning"  # valeur par défaut, peut être omis
)

En passant prompt_mode à nullNone en Python — vous désactivez ce prompt par défaut et récupérez un contrôle total sur les instructions du modèle. Rien ne s’interpose plus entre votre system prompt et la réflexion :

# Désactiver le system prompt par défaut
response = client.chat.complete(
    model="magistral-medium-latest",
    messages=[
        {"role": "system", "content": "Votre propre system prompt personnalisé ici."},
        {"role": "user", "content": "Démontrez que la somme des n premiers entiers est n(n+1)/2."}
    ],
    prompt_mode=None  # désactive le prompt par défaut
)

Quand désactiver le prompt par défaut

La règle se joue sur un critère unique : votre system prompt entre-t-il en concurrence avec la méthode par défaut, ou seulement en complément ?

Il entre en concurrence dès lors que vous avez conçu une méthodologie propre à votre domaine, comme le prompt juridique ci-dessous. Celui-ci impose son propre enchaînement — articles de loi, jurisprudence, doctrine — qui ne coïncide pas avec la démarche générique du prompt interne. Laisser les deux cohabiter produit des réponses qui hésitent entre deux plans ; désactiver le défaut supprime le conflit.

# Votre prompt personnalisé pourrait entrer en conflit avec le prompt par défaut
custom_prompt = """Vous êtes un juriste spécialisé en droit européen du numérique.

MÉTHODE :
- Citez les articles de loi pertinents
- Analysez la jurisprudence applicable
- Distinguez les interprétations doctrinales

RÉFLEXION :
Explorez les différentes interprétations possibles. Évaluez leur solidité juridique.

RÉPONSE :
Avis juridique structuré avec fondements textuels et jurisprudentiels."""

response = client.chat.complete(
    model="magistral-medium-latest",
    messages=[
        {"role": "system", "content": custom_prompt},
        {"role": "user", "content": "Le RGPD s'applique-t-il aux données anonymisées ?"}
    ],
    prompt_mode=None  # évite le conflit avec votre prompt
)

Le cas inverse est tout aussi fréquent. Quand votre instruction se borne à attribuer un rôle ou un ton sans toucher à la méthode de raisonnement, elle est complémentaire : gardez le mode par défaut et bénéficiez gratuitement de la structuration interne.

# Ce prompt est complémentaire, pas contradictoire
response = client.chat.complete(
    model="magistral-medium-latest",
    messages=[
        {"role": "system", "content": "Vous êtes un tuteur bienveillant pour étudiants en informatique."},
        {"role": "user", "content": "Expliquez-moi les pointeurs en C."}
    ]
    # prompt_mode non spécifié = "reasoning" par défaut
)

Impact sur les tokens de raisonnement

Le paramètre influence également la génération des traces. Avec prompt_mode="reasoning", les versions récentes -2509 et -2507 produisent leurs traces via des control tokens : ces tokens spéciaux sont tokenisés et structurés, ce qui garantit un parsing propre et fiable côté client.

Avec prompt_mode=None, le modèle raisonne toujours — c’est sa nature, rien ne peut l’en empêcher — mais le format des traces peut varier selon vos instructions. Vous prenez alors la responsabilité de guider la structure du raisonnement, et donc celle de vérifier que votre parsing tient dans tous les cas.

Relation avec les versions de modèles

Le comportement de prompt_mode dépend aussi de la version ciblée. Sur -2509, vous obtenez les control tokens structurés décrits plus haut ; sur une version antérieure, le format peut différer, et la documentation de la version cible fait foi.

# Version -2509 : control tokens structurés
response_new = client.chat.complete(
    model="magistral-medium-2509",
    messages=[{"role": "user", "content": "..."}],
    prompt_mode="reasoning"
)

# Si vous utilisez une ancienne version, le format peut différer
# Vérifiez toujours la documentation de la version cible

Pattern de décision

Plutôt que de trancher à chaque appel, encapsulez la règle une fois pour toutes. La fonction suivante applique mécaniquement le critère vu plus haut : présence d’un system prompt personnalisé égale désactivation du défaut, absence égale mode "reasoning".

def configure_magistral(custom_system_prompt=None):
    """Configure les paramètres Magistral selon le contexte."""
    params = {
        "model": "magistral-medium-latest",
    }

    if custom_system_prompt:
        # System prompt personnalisé : désactiver le prompt par défaut
        params["prompt_mode"] = None
        params["messages"] = [
            {"role": "system", "content": custom_system_prompt}
        ]
    else:
        # Pas de system prompt spécial : utiliser le défaut
        params["prompt_mode"] = "reasoning"
        params["messages"] = []

    return params

# Utilisation
config = configure_magistral(
    custom_system_prompt="Vous êtes un expert en cybersécurité..."
)
config["messages"].append(
    {"role": "user", "content": "Analysez cette faille XSS..."}
)
response = client.chat.complete(**config)

Le dictionnaire retourné se déballe directement dans l’appel, ce qui évite de disséminer la logique de configuration dans chaque module de votre application.

Points clés à retenir

  • prompt_mode="reasoning" (défaut) : utilise le system prompt interne optimisé de Magistral
  • prompt_mode=None : désactive le prompt par défaut pour un contrôle total
  • Désactivez le prompt par défaut si vous avez un system prompt spécifique à un domaine
  • Gardez le défaut si votre system prompt est complémentaire (rôle sans méthode)
  • Le modèle Magistral raisonne toujours, même sans le prompt par défaut
  • Les versions récentes utilisent des control tokens, indépendamment du prompt_mode