Raisonnement natif (obsolète)

Attention

Obsolète

Les modèles de raisonnement natif (magistral-small-latest, magistral-medium-latest) sont obsolètes. Nous vous recommandons d'utiliser Reasoning avec mistral-small-latest ou mistral-medium-3-5, offrant les mêmes capacités et une flexibilité accrue grâce au paramètre reasoning_effort.

Astuce

Avant de continuer, nous vous conseillons de lire la documentation Chat Completions pour en savoir plus sur l'API de complétions de chat et son utilisation.

Avant de commencer

Avant de commencer

Modèles

Les modèles de raisonnement natif génèrent toujours une trace de réflexion sans paramètre supplémentaire :

  • magistral-small-latest : notre version légère et ouverte dédiée à la recherche ouverte et au raisonnement efficace.
  • magistral-medium-latest : notre modèle de raisonnement plus puissant, équilibrant performance et coût.
i
Information

Actuellement, -latest pointe vers -2509, notre version la plus récente des modèles de raisonnement. Si vous utilisiez -2506 auparavant, une migration des chunks de réflexion est nécessaire.

  • -2509 & -2507 (nouveau) : utilisent des segments de réflexion tokenisés à l'aide des tokens de contrôle, fournissant la trace de réflexion dans différents types de chunks de contenu.

  • -2506 (ancien) : utilisait les balises <think>\n et \n</think>\n sous forme de chaînes pour encapsuler les traces de réflexion en entrée et sortie dans un même type de contenu.

Le nouveau format sépare correctement les étapes de réflexion de la réponse finale du modèle, ce qui permet une entrée/sortie plus structurée et plus facile à analyser.

[
  {
    "role": "system",
    "content": [
      {
        "type": "text",
        "text": "Invite système, avec à la fois des instructions et"
      },
      {
        "type": "thinking",
        "thinking": [
          {
            "type": "text",
            "text": "Instructions de raisonnement encapsulées."
          }
        ]
      }
    ]
  },
  {
    "role": "user",
    "content": [
      {
        "type": "text",
        "text": "Entrée utilisateur."
      }
    ]
  },
  {
    "role": "assistant",
    "content": [
      {
        "type": "thinking",
        "thinking": [
          {
            "type": "text",
            "text": "Traces de raisonnement."
          }
        ]
      },
      {
        "type": "text",
        "text": "Suivi de la réponse finale."
      }
    ]
  }
]
Utilisation

Utilisation

Comment utiliser les modèles de raisonnement natif

Les modèles de raisonnement natif fonctionnent comme les modèles standard : le raisonnement est toujours activé et aucun paramètre supplémentaire n’est requis. Cependant, ils génèrent davantage de tokens pendant l’étape de raisonnement et offrent les meilleurs résultats avec un prompt système spécifique.

Prompt système

Prompt système

Pour obtenir les meilleures performances avec les modèles de raisonnement natif, nous recommandons d’utiliser le prompt système suivant (actuellement celui par défaut) :

{
  "role": "system",
  "content": [
    {
      "type": "text",
      "text": "# COMMENT VOUS DEVEZ RÉFLÉCHIR ET RÉPONDRE\n\nCommencez par rédiger votre processus de réflexion (monologue interne) jusqu’à arriver à une réponse. Formatez votre réponse en Markdown, et utilisez LaTeX pour toutes les équations mathématiques. Rédigez vos pensées et la réponse dans la même langue que l’entrée.\n\nVotre processus de réflexion doit suivre le modèle ci-dessous :"
    },
    {
      "type": "thinking",
      "thinking": [
        {
          "type": "text",
          "text": "Vos pensées ou brouillon, comme si vous réfléchissiez à une question sur une feuille de brouillon. Soyez aussi informel et détaillé que vous le souhaitez jusqu’à être sûr de pouvoir générer une réponse à l’utilisateur."
        }
      ]
    },
    {
      "type": "text",
      "text": "Fournissez ici une réponse complète et autonome."
    }
  ]
}

En fournissant votre propre prompt système, vous remplacez le prompt système par défaut par le nouveau.

Vous pouvez également contrôler le comportement du prompt système via le paramètre prompt_mode :

  • "reasoning" : utilise explicitement le prompt système de raisonnement par défaut.
  • null : désactive totalement le prompt système par défaut.
Raisonnement natif avec chat completions

Raisonnement natif avec chat completions

Vous pouvez utiliser nos modèles de raisonnement natif de façon analogue aux autres modèles de texte, voici un exemple via notre endpoint chat completions :

import os
from mistralai.client import Mistral

api_key = os.environ["MISTRAL_API_KEY"]
model = "magistral-medium-latest"

client = Mistral(api_key=api_key)

chat_response = client.chat.complete(
    model = model,
    messages = [
        {
            "role": "user",
            "content": "John is one of 4 children. The first sister is 4 years old. Next year, the second sister will be twice as old as the first sister. The third sister is two years older than the second sister. The third sister is half the age of her older brother. How old is John?",
        },
    ],
    # prompt_mode = "reasoning" si vous souhaitez explicitement utiliser le prompt système de raisonnement par défaut, ou None si vous souhaitez désactiver le prompt système par défaut.
)
Sortie raisonnement natif

Sortie raisonnement natif

Ci-dessous, la sortie complète du modèle pour visualiser les traces de raisonnement et la réponse finale dans le détail.

La sortie du modèle contiendra différents blocs de contenu, principalement un type thinking avec les traces de raisonnement et un type text avec la réponse, par exemple :

"content": [
  {
    "type": "thinking",
    "thinking": [
      {
        "type": "text",
        "text": "*Thoughts and reasoning traces will go here.*"
      }
    ]
  },
  {
    "type": "text",
    "text": "*Final answer will go here.*"
  },
  ...
]

Vous trouverez ci-dessous le contenu complet de la réponse JSON.

{
  "model": "magistral-medium-2507",
  "usage": {
    "prompt_tokens": 173,
    "total_tokens": 11170,
    "completion_tokens": 10997
  },
  "object": "chat.completion",
  "choices": [
    {
      "index": 0,
      "finish_reason": "stop",
      "message": {
        "role": "assistant",
        "tool_calls": null,
        "content": [
          {
            "type": "thinking",
            "thinking": [
              {
                "type": "text",
                "text": "Très bien, analysons ce problème méthodiquement.

1. Identifier les enfants mentionnés :
   - Il y a 4 enfants au total : John et trois sœurs.

2. Informations sur les sœurs :
   - Première sœur : 4 ans.
   - Deuxième sœur : L'année prochaine, elle aura deux fois l'âge de la première sœur.
     - Âge actuel de la première sœur : 4 ans.
     - L'année prochaine, la première sœur aura 5 ans.
     - Mais l'énoncé dit « deux fois l'âge de la première sœur » (âge actuel, qui est 4).
     - Attention, relisons : « L'année prochaine, la deuxième sœur aura deux fois l'âge de la première sœur. »
       - L'année prochaine, la première sœur aura 5 ans (car elle a 4 ans actuellement).
       - Donc, l'année prochaine, la deuxième sœur aura deux fois l'âge de la première sœur à ce moment-là, soit 2 × 5 = 10 ans l'an prochain.
       - Donc actuellement, la deuxième sœur a 10 - 1 = 9 ans.

   Réexaminons cette interprétation car cela peut prêter à confusion. Le texte indique : « L'année prochaine, la deuxième sœur aura deux fois l'âge de la première sœur. »

   Il y a deux façons de l'interpréter :
   a) L'année prochaine, l'âge de la deuxième sœur sera le double de l'âge de la première sœur l'année prochaine.
   b) L'année prochaine, l'âge de la deuxième sœur sera le double de l'âge actuel de la première sœur.

   L'interprétation la plus naturelle est a) : « L'année prochaine, la deuxième sœur aura deux fois l'âge de la première sœur [à ce moment-là]. »

   Donc :
   - Première sœur, âge actuel : 4
   - L'année prochaine, elle aura 5 ans.
   - L'année prochaine, la deuxième sœur aura donc 10 ans.
   - Aujourd'hui, la deuxième sœur a donc 10 - 1 = 9 ans.

   Vérifions si cette logique s'accorde avec la suite du problème.

3. Âge de la troisième sœur :
   - La troisième sœur a deux ans de plus que la deuxième sœur.
   - La deuxième a 9 ans, donc la troisième a 9 + 2 = 11 ans.

4. Âge du frère aîné (John) :
   - La troisième sœur a la moitié de l'âge de son frère aîné.
   - La troisième sœur a 11 ans, donc son frère aîné a 11 × 2 = 22 ans.

Attendez, mais l'énoncé dit qu'il y a 4 enfants : John et trois sœurs. Donc John fait partie des quatre, les autres sont les trois sœurs. Si John est le frère aîné, alors les quatre enfants sont :
1. Première sœur : 4
2. Deuxième sœur : 9
3. Troisième sœur : 11
4. John : ?

L'énoncé dit « la troisième sœur a la moitié de l'âge de son frère aîné ». Si John est le frère en question (aîné), alors il a bien 22 ans.

Vérifions la cohérence avec toutes les informations :
- Première sœur : 4
- Deuxième sœur : l'an prochain elle aura deux fois l'âge futur de la première (l'an prochain 5) → 10 ans donc aujourd'hui 9
- Troisième sœur : 9 + 2 = 11
- Troisième sœur a la moitié de l'âge de John → John a 22 ans

Le compte des enfants correspond : John + trois sœurs = 4 enfants.

Concernant le terme « première sœur », il est naturel d'associer « première » à l'ordre de mention, et non à l'âge croissant ou décroissant, car elle est la plus jeune. Cela rend l'interprétation ci-dessus cohérente.

En comparant avec une autre possibilité, si on considère que la seconde interprétation — comparer l'âge futur de la seconde sœur avec l'âge actuel de la première sœur — aboutit à des écarts d'âge plus réalistes (par exemple John aurait alors 18 ans), mais la formulation la plus standard dans ce type de problème mathématique consiste à comparer les âges au même moment dans le futur, ce qui donne John à 22 ans.

En résumé : malgré l'ambiguïté possible dans l'énoncé, l'interprétation la plus courante dans les problèmes de ce type donne l'âge de John comme étant de 22 ans.

Pour couvrir les deux cas :
- Si l'on compare avec l'âge futur de la première sœur, alors John a 22 ans.
- Si on compare à l'âge actuel de la première sœur, John a 18 ans.

La formulation mathématique la plus précise donne John à 22 ans."
              }
            ]
          },
          {
            "type": "text",
            "text": "Pour résoudre ce problème, analysons les informations fournies et les relations entre les âges des sœurs et de John.

1. La première sœur a actuellement 4 ans.
2. L'année prochaine, la deuxième sœur aura deux fois l'âge que la première sœur aura à ce moment-là.
3. La troisième sœur a deux ans de plus que la deuxième sœur.
4. La troisième sœur a la moitié de l'âge de son frère aîné, John.

Notons les âges actuels des sœurs et de John comme suit :
- \\( S_1 \\) : Âge de la première sœur
- \\( S_2 \\) : Âge de la deuxième sœur
- \\( S_3 \\) : Âge de la troisième sœur
- \\( J \\) : Âge de John

À partir des informations donnés :
- \\( S_1 = 4 \\)
- L'année prochaine, la première sœur aura \\( 4 + 1 = 5 \\) ans et la deuxième sœur aura \\( 2 \times 5 = 10 \\) ans. Donc, actuellement, la deuxième sœur a \\( 10 - 1 = 9 \\) ans.
- La troisième sœur a deux ans de plus que la deuxième : \\( S_3 = 9 + 2 = 11 \\) ans.
- La troisième sœur a la moitié de l'âge de John : \\( J = 2 \times 11 = 22 \\) ans.

Ainsi, l'âge de John est \\(\\boxed{22}\\)."
          }
        ]
      }
    }
  ]
}