Les Rôles : System, User et Assistant
Mis à jour le 28 juillet 2026
Comprendre le système de rôles
L’API Chat Completions de Mistral structure chaque conversation autour de rôles attribués aux messages. Chaque message envoyé au modèle doit obligatoirement comporter un rôle qui définit sa fonction dans l’échange : qui parle, et avec quelle autorité. Cette mécanique peut sembler être un détail technique, mais elle est en réalité le squelette de tout prompt professionnel — c’est elle qui distingue une simple question posée dans un chat d’une application construite avec soin.
Mistral reconnaît quatre rôles distincts, chacun avec une fonction précise :
| Rôle | Description | Exemple |
|---|---|---|
| system | Définit la personnalité, le comportement et le contexte global du modèle | « Vous êtes un expert juridique français spécialisé en droit du travail. » |
| user | Contient la requête ou l'instruction de l'utilisateur | « Quelles sont les obligations de l'employeur en cas de licenciement économique ? » |
| assistant | Représente les réponses du modèle, ou permet de pré-remplir le début d'une réponse | « Voici les 5 obligations principales : 1. ... » |
| tool | Retourne le résultat d'un appel de fonction (function calling) | Résultat JSON d'une recherche en base de données |
Le rôle system : la fondation de votre prompt
Le message system est placé en tout premier dans la liste des messages, et il agit comme une directive permanente qui influence l’ensemble de la conversation. Pensez-y comme à la fiche de poste que vous remettriez à un nouveau collaborateur avant sa première journée : elle définit la personnalité attendue (le ton, le niveau de formalité, la langue), le domaine d’expertise à privilégier, les règles de ce que le modèle doit ou ne doit pas faire, et le format par défaut de ses réponses. Une fois cette fiche rédigée, chaque échange ultérieur s’inscrit dans ce cadre sans que vous ayez à le répéter.
messages = [
{
"role": "system",
"content": """Vous êtes un rédacteur technique senior spécialisé dans la documentation API.
Règles :
- Utilisez un français technique précis
- Incluez toujours des exemples de code Python
- Structurez vos réponses avec des titres et des listes
- Ne dépassez jamais 500 mots par réponse"""
},
{
"role": "user",
"content": "Expliquez comment gérer les erreurs HTTP dans une API REST."
}
]
Notez un point important pour vos futures applications : le system prompt est géré par le développeur, pas par l’utilisateur final. L’utilisateur de votre application ne le voit jamais, mais toutes ses interactions se déroulent dans le cadre que vous y avez posé. C’est ce qui en fait votre levier de contrôle le plus puissant.
Le rôle user : la requête concrète
Le message user contient la demande spécifique. C’est le rôle le plus intuitif : il représente ce que l’humain dit au modèle, et chaque nouvelle question ou instruction de l’utilisateur devient un message avec le rôle user. Sa simplicité apparente ne doit pas faire oublier les bonnes pratiques : soyez précis dans votre demande, indiquez le format souhaité s’il diffère de celui défini dans le system prompt, et fournissez directement dans le message les données dont le modèle a besoin — un texte à résumer, des chiffres à analyser. Le modèle ne peut pas aller chercher ce que vous ne lui donnez pas.
Le rôle assistant : guider la réponse
Le rôle assistant est le plus subtil des trois, car il a deux usages bien distincts. Le premier est l’historique de conversation : dans un échange multi-tours, les réponses précédentes du modèle sont réinsérées avec le rôle assistant pour maintenir le contexte. C’est ainsi que le modèle « se souvient » de ce qu’il a dit :
messages = [
{"role": "user", "content": "Quelle est la capitale de la France ?"},
{"role": "assistant", "content": "La capitale de la France est Paris."},
{"role": "user", "content": "Et sa population ?"}
]
Sans le message assistant intermédiaire, le « sa » de la dernière question ne renverrait à rien : l’API est sans état, et c’est vous qui reconstruisez la mémoire à chaque appel.
Le second usage est le pré-remplissage (prefix) : vous pouvez terminer votre liste de messages par un message assistant qui contient le début de la réponse attendue. Le modèle continuera à partir de ce point, comme si les premiers mots étaient déjà sortis de sa bouche. C’est une technique redoutable pour contrôler le format de sortie :
messages = [
{"role": "user", "content": "Listez 3 frameworks Python pour le web."},
{"role": "assistant", "content": "```json\n["}
]
Ici, le modèle comprend qu’il est en train d’écrire du JSON et complétera le tableau commencé, sans préambule ni phrase d’introduction. Là où une instruction textuelle « répondez en JSON » peut être ignorée, un début de réponse déjà écrit ne laisse guère de choix.
Le rôle tool : résultats de fonctions
Le rôle tool intervient dans le cadre du function calling. Lorsque le modèle décide d’appeler une fonction externe — une recherche web, une requête API, un calcul —, le résultat de cette fonction lui est renvoyé sous forme de message tool, qu’il intègre ensuite dans sa réponse. Ce rôle est plus avancé et sera abordé dans des formations dédiées ; retenez simplement qu’il existe et qu’il complète le trio principal.
Construire une conversation complète
Assemblons maintenant tous ces éléments dans un échange réaliste, où le system prompt cadre l’assistant, où l’historique maintient le fil, et où la dernière question s’appuie naturellement sur ce qui précède :
response = client.chat.complete(
model="mistral-large-latest",
messages=[
{
"role": "system",
"content": "Vous êtes un assistant culinaire français. Répondez de manière concise."
},
{
"role": "user",
"content": "Comment faire une vinaigrette classique ?"
},
{
"role": "assistant",
"content": "Pour une vinaigrette classique, mélangez 1 cuillère de moutarde, 3 cuillères d'huile d'olive et 1 cuillère de vinaigre."
},
{
"role": "user",
"content": "Et pour une version allégée ?"
}
]
)
Observez l’architecture : le system en premier, puis une alternance user/assistant qui reproduit le déroulé de la conversation. Cet ordre n’est pas décoratif — c’est lui qui permet au modèle d’interpréter correctement « une version allégée » comme une variante de la vinaigrette dont il vient de parler.
Points clés à retenir
- Le rôle system cadre le comportement global du modèle — c’est votre levier le plus puissant
- Le rôle user porte la requête concrète de l’utilisateur
- Le rôle assistant sert à la fois d’historique et de guide pour le format de réponse
- Le rôle tool gère les retours de function calling
- L’ordre des messages est crucial : system en premier, puis alternance user/assistant