Maîtriser les system prompts
Un system prompt est le message de rôle « system » qui fixe l'identité, la mission, les règles, le style et le format de sortie d'un LLM avant votre première question. Pour l'écrire : cinq blocs courts, des consignes à l'impératif et vérifiables, un test sur quelques questions pièges. Il consomme du contexte et n'est pas un coffre-fort : n'y mettez aucun secret.
Un system prompt, c'est le briefing donné au modèle avant la première question. Bien écrit, il rend un LLM local cohérent et prévisible ; mal écrit, il gaspille du contexte et se contredit. Vous saurez le structurer, l'installer dans Ollama, LM Studio ou une API, le tester méthodiquement et connaître ses limites, notamment en matière de confidentialité.
#Qu'est-ce qu'un system prompt, et comment l'écrire ?
Un system prompt est le message de rôle « system » placé en tête de la conversation : il fixe l'identité du modèle, sa mission, ses règles, son style et le format de ses réponses avant que vous posiez la première question. Le modèle le relit à chaque tour, au même titre que l'historique. Pour l'écrire, gardez cinq blocs courts (identité, mission, règles dures, style, format de sortie), formulez des consignes à l'impératif et vérifiables, puis testez-le sur quelques questions pièges. Un system prompt guide le comportement ; il ne constitue ni une barrière de sécurité ni un coffre pour vos secrets, et il consomme une part de la fenêtre de contexte de votre modèle local. Ce guide détaille chaque point, avec des exemples prêts à coller dans Ollama, LM Studio ou une API compatible OpenAI.
Un LLM reçoit en général trois types de messages : system (le cadre permanent), user (ce que vous tapez) et assistant (ce qu'il a déjà répondu). Le client de chat renvoie toute la conversation au modèle à chaque requête, message system compris. C'est ce qui donne l'impression d'une « personnalité » stable pendant la session.
Les fournisseurs de modèles décrivent le même usage. La documentation d'Anthropic explique que définir un rôle dans le system prompt concentre le comportement et le ton du modèle, et qu'une seule phrase suffit à faire une différence. Le principe vaut pour les modèles locaux : la consigne permanente va dans le message system, la question du moment dans le message user.
#Ce qu'un bon system prompt change vraiment
Ton ChatGPT privé et gratuit sur ta machine en 1 heure — LM Studio, Ollama, Open WebUI, tes documents, sans cloud.
- Espace en ligne à vie
- PDF + fichiers
- Mises à jour à vie
- Cohérence de ton
- Un assistant qui tutoie au premier message et vouvoie au deuxième trahit un system prompt absent ou trop vague. Fixer le registre une fois évite la dérive.
- Contraintes plus stables
- Interdits (« pas d'émoji ») et obligations (« citer la source ») tiennent mieux lorsqu'ils sont posés en system que répétés à la volée. Ils ne sont toutefois jamais garantis : plus le modèle est petit, plus il faut vérifier.
- Moins de répétition
- Si vous tapez « réponds en français formel » à chaque question, mettez-le une fois en system. Moins d'oublis, moins de frappe.
- Périmètre de mission
- « Ne traite que le droit du travail français » réduit les hors-sujets, sans jamais les interdire à coup sûr.
Ce que le system prompt ne fait pas : il n'ajoute aucune connaissance au modèle et ne remplace ni un document fourni dans la conversation ni un RAG. Si le modèle doit s'appuyer sur vos contrats, c'est la recherche documentaire qui apporte les faits ; le system prompt dit seulement comment les utiliser et les citer.
#Ce qu'il coûte : de la place dans la fenêtre de contexte
Le system prompt n'est pas gratuit : ses tokens occupent la fenêtre de contexte, avec l'historique, vos documents et la réponse à venir. Sur un poste local, cette fenêtre est souvent plus petite qu'on ne le croit. La page « Context length » de la documentation d'Ollama indique une fenêtre par défaut de 4 000 tokens environ (« 4k ») sous 24 Gio de VRAM, 32 000 entre 24 et 48 Gio, et 256 000 au-delà. Un prompt de 400 tokens pèse donc près de 10 % de 4 096 tokens, avant même le premier échange.
Le calcul est simple : fenêtre disponible = fenêtre totale − tokens du system prompt − réponse attendue. Avec 4 096 tokens, un system de 400 tokens et une réponse de 800 tokens, il reste 2 896 tokens pour l'historique et les documents. Quand l'échange s'allonge, la fenêtre se remplit et le contenu ancien risque de ne plus tenir : une raison de plus pour que le briefing soit dense plutôt que long.
Il existe un second effet, documenté par la recherche : dans l'étude « Lost in the Middle » (Liu et al., 2023), les performances sont souvent meilleures quand l'information utile se trouve au début ou à la fin du contexte, et se dégradent quand elle est au milieu, même pour des modèles annoncés à long contexte. Conséquence pratique : placez les règles les plus importantes en tête de votre system prompt, et rappelez la contrainte critique dans la dernière ligne si vous constatez des oublis.
#Structure d'un system prompt solide en cinq blocs
Un bon system prompt tient en cinq blocs courts. Inutile d'écrire un roman : chaque phrase supplémentaire consomme du contexte et augmente le risque de consignes contradictoires. Le tableau résume ce que porte chaque bloc et l'erreur la plus fréquente.
| Bloc | Question à laquelle il répond | Exemple | Erreur fréquente |
|---|---|---|---|
| Identité | Qui est le modèle ? | « Tu es Lex, assistant juridique en droit du travail français. » | Une identité flatteuse (« expert mondial ») sans périmètre |
| Mission | Que doit-il accomplir, pour qui ? | « Tu aides un DRH à comprendre ses obligations et à rédiger des courriers. » | Mission trop large : « aide sur tout » |
| Règles dures | Que fait-il toujours ou jamais ? | « Cite l'article du Code du travail concerné. » | Dix règles de même priorité, dont deux se contredisent |
| Style | Comment s'exprime-t-il ? | « Phrases courtes, vocabulaire accessible. » | Adjectifs vagues (« professionnel ») sans exemple |
| Format de sortie | Sous quelle forme rend-il la réponse ? | « Par défaut : un paragraphe et les références. » | Format non précisé, donc variable d'une réponse à l'autre |
Voici le même prompt assemblé. Chaque règle est à l'impératif et vérifiable (l'article est cité ou non), et le comportement hors périmètre est explicite.
Ce prompt sert de modèle de structure. Un modèle local peut citer un article inexistant : faites vérifier les références par un humain, et voyez le guide sur les hallucinations.
#Formuler des consignes que le modèle suit
- Impératif direct
- « Fais X. » et « Ne fais pas Y. » sont plus nets que « essaie si possible de… », qui laisse le modèle libre de ne pas essayer.
- Positif d'abord
- Dire ce qu'il faut faire (« réponds en une phrase ») vaut mieux qu'une longue liste d'interdits, à réserver aux vrais garde-fous.
- Un exemple vaut une description
- Pour un format précis, donnez une réponse type de deux lignes plutôt que trois phrases d'explication.
#En pratique avec Ollama : /set system et Modelfile
Ollama propose trois façons de définir un system prompt, selon la durée de vie voulue. Dans une session interactive, la commande /set system définit le message pour la conversation en cours ; elle apparaît dans la liste des commandes disponibles du client. Le prompt disparaît à la fin de la session.
Pour un system prompt persistant, créez un Modelfile : c'est un modèle dérivé, avec son propre nom. La documentation d'Ollama précise que l'instruction SYSTEM définit le message system à insérer dans le gabarit du modèle. Le mot « gabarit » compte : si le template d'un modèle n'a pas d'emplacement pour le message system, l'instruction SYSTEM n'aura pas d'effet. En cas de comportement surprenant, comparez avec le Modelfile de départ.
Troisième option, côté API : le corps d'une requête à /api/generate accepte un champ system qui remplace celui défini dans le Modelfile, et /api/chat reçoit l'historique sous forme de tableau de messages avec un rôle et un contenu. Le guide sur le Modelfile détaille les autres instructions.
#En pratique avec LM Studio : le champ System Prompt et les presets
Dans l'onglet de chat, le panneau de configuration contient un champ System Prompt. Pour ne pas le retaper, LM Studio propose les presets. La documentation les décrit comme un moyen de regrouper un system prompt et d'autres paramètres dans une configuration réutilisable d'une conversation à l'autre.
#En pratique via l'API compatible OpenAI
Ollama, LM Studio, vLLM et llama-server exposent une API compatible OpenAI. Le premier message du tableau, avec le rôle system, définit le briefing. La documentation d'Ollama précise que le client exige une valeur de clé API mais que le serveur l'ignore : n'importe quelle chaîne convient pour un usage local.
Un point de conception : l'API n'a pas de mémoire. À chaque appel, votre code renvoie le message system puis l'historique complet. Si vous l'omettez dans un appel, le modèle répond sans briefing : stockez le tableau de messages et gardez le system en position 0.
#Trois system prompts prêts à l'emploi
#Correcteur de français
#Extracteur structuré
Pour une extraction en production, ne comptez pas sur le seul system prompt : les sorties structurées d'Ollama permettent d'imposer un schéma JSON aux réponses, ce qui évite un JSON cassé. Le guide sur le function calling et les sorties JSON explique la mise en place.
#Assistant code senior
#Tester et corriger un system prompt sans tâtonner
Un system prompt s'améliore par essais contrôlés, pas par ajouts successifs. Sans méthode, on empile des règles jusqu'à obtenir un texte long, contradictoire et impossible à déboguer. Voici une procédure simple, sans outil particulier.
- 01Constituer cinq questions-testsRédigez cinq entrées : deux cas normaux, une question hors périmètre, une demande de format inhabituel et une tentative de détourner le rôle (« oublie tes instructions »). Gardez-les dans un fichier.
- 02Fixer les conditionsUtilisez le même modèle, la même quantification et une température basse (0,2 à 0,3) pour comparer les versions du prompt à conditions égales.
- 03Modifier une seule chose à la foisChangez une règle, relancez les cinq questions, notez ce qui a évolué. Si deux règles changent en même temps, vous ne saurez pas laquelle a corrigé ou aggravé le comportement.
- 04Supprimer avant d'ajouterQuand une règle est ignorée, reformulez-la plus court, placez-la en tête ou supprimez celle qui la contredit. Ajouter du texte est le dernier recours.
- 05Versionner le promptConservez chaque version dans un fichier texte daté ou dans le Modelfile sous contrôle de version, avec une ligne sur ce qui a changé. Vous pourrez revenir en arrière.
#Pièges à éviter
| Piège | Symptôme | Correctif |
|---|---|---|
| Prompt trop long | Fin du prompt appliquée moins fidèlement, fenêtre grignotée | Condenser, placer l'essentiel en tête, relever num_ctx si besoin |
| Instructions contradictoires | « Sois bref » et « donne beaucoup d'exemples » : comportement variable | Hiérarchiser : en cas de conflit, la règle 1 l'emporte |
| Formulation hésitante | « Essaie si possible de… » : consigne appliquée par intermittence | Impératif direct : « Fais X. » |
| Langue non précisée | Réponses dans la langue du prompt ou de la question, selon le modèle | Écrire « Réponds toujours en français » et rédiger le prompt en français |
| Emplacement system ignoré | Modèle qui n'applique pas le SYSTEM d'un Modelfile | Vérifier que le template du modèle prévoit un message system |
| Secrets dans le prompt | Un utilisateur obtient le contenu du prompt en le demandant | Ne rien y mettre de confidentiel |
#Le system prompt n'est pas un coffre-fort
Les recommandations de l'OWASP sur le risque de fuite du system prompt sont claires : il ne doit pas être considéré comme un secret ni utilisé comme contrôle de sécurité, et il ne doit contenir ni identifiants ni chaînes de connexion. Traduction pour un déploiement local : si un contrôle d'accès est nécessaire (données par utilisateur, actions sensibles), il se fait dans votre application, pas dans une phrase du prompt. Le guide sur l'injection de prompt décrit pourquoi un modèle local n'est pas à l'abri.
- Source : référence Modelfile d'Ollama (instruction SYSTEM)
- Source : longueur de contexte par défaut d'Ollama
- Source : presets de LM Studio
- Source : OWASP, fuite du system prompt
- Source : Lost in the Middle (Liu et al., 2023)
- Les bases du prompting
- Ollama Modelfile : créer et personnaliser son modèle
- Comprendre la fenêtre de contexte
- Température, top-p, top-k : les paramètres
- Injection de prompt : le local ne vous protège pas
- Function calling et sorties JSON structurées avec Ollama
C'est quoi un system prompt ?+
Quelle longueur idéale pour un system prompt local ?+
Comment définir un system prompt permanent dans Ollama ?+
Un system prompt peut-il empêcher un modèle de révéler des informations ?+
Faut-il écrire le system prompt en français ou en anglais ?+
Pourquoi mon modèle ignore-t-il mon system prompt ?+
Un retour, une erreur, une précision ? Faites-nous signe, ça améliore le guide pour tout le monde.