Intermédiaire 12 minOllama

Personnaliser un modèle avec Ollama Modelfile

Ollama ne se limite pas à télécharger des modèles existants : avec un fichier texte de quelques lignes, vous fabriquez vos propres variantes. Un Modelfile, c'est l'équivalent d'un Dockerfile pour LLM — il fige un system prompt, des paramètres de sampling, un template de conversation. Ce guide montre comment personnaliser Ollama avec un Modelfile à travers trois cas concrets : un assistant en français strict, un coder Python, un traducteur sans bavardage.

Par Mohamed Meguedmi·Màj 2026-05-13·Testé sur Windows, macOS, Linux

#Pourquoi un Modelfile ?

Quand vous tapez ollama run mistral, vous obtenez un modèle générique. Il répond parfois en anglais à une question en français, il commente ses réponses code avec des introductions interminables, il négocie quand vous demandez une traduction littérale. Au lieu de répéter le même system prompt à chaque session, vous le figez une fois dans un Modelfile et vous obtenez une variante réutilisable.

Concrètement, un Modelfile permet trois choses : (1) attacher un system prompt persistant au modèle, (2) régler les paramètres de génération (température, contexte, stop tokens), (3) optionnellement remplacer le template de chat. La variante créée s'utilise comme n'importe quel modèle Ollama : ollama run mon-assistant.

i
Ce n'est pas du fine-tuning
Un Modelfile ne modifie pas les poids du modèle. Il configure son comportement par-dessus. Pour vraiment apprendre un style ou un domaine au modèle, il faut un fine-tune (LoRA, QLoRA) — ce qui dépasse le cadre d'Ollama seul.

#Prérequis

Ollama installé
Version 0.3+ recommandée. Vérifiez avec ollama --version. Le daemon doit tourner sur http://localhost:11434.
Un modèle de base déjà tiré
Par exemple ollama pull mistral ou ollama pull qwen2.5-coder:7b. Le Modelfile hérite de ce modèle.
Un éditeur de texte
VSCode, Notepad++, vim — n'importe lequel. Le fichier n'a pas d'extension obligatoire, on l'appelle généralement Modelfile par convention.
Environ 5 minutes
Le temps de créer le fichier et de lancer ollama create. Aucun téléchargement supplémentaire : on réutilise un modèle déjà présent.

#1. Syntaxe du Modelfile

Un Modelfile est un fichier texte avec des instructions en majuscules, une par bloc. L'ordre n'a pas d'importance, mais la convention place FROM en premier.

Squelette minimal
FROM mistral

SYSTEM """
Tu es un assistant utile et concis.
"""

PARAMETER temperature 0.7
PARAMETER num_ctx 4096

Les instructions principales :

FROM
Modèle de base. Obligatoire. Accepte un nom Ollama (mistral, qwen2.5:14b) ou un chemin local vers un GGUF.
SYSTEM
Le system prompt qui sera injecté à chaque conversation. Utilisez les guillemets triples pour les textes multilignes.
PARAMETER
Réglages de sampling et de contexte. Une instruction par paramètre. Les plus utiles : temperature, top_p, top_k, num_ctx, repeat_penalty, num_predict, stop.
TEMPLATE
Format de prompt complet (rare). À ne toucher que si vous savez ce que vous faites — chaque famille de modèle a son template.
MESSAGE
Exemples few-shot. Préfixés par MESSAGE user ou MESSAGE assistant. Utile pour ancrer un style.
ADAPTER
Chemin vers un LoRA GGUF à appliquer par-dessus FROM. Pour les utilisateurs avancés.
LICENSE
Texte libre, pour la traçabilité. N'affecte pas l'exécution.
Les paramètres qui comptent vraiment
Pour 90% des cas, vous n'aurez besoin que de SYSTEM + temperature + num_ctx. Inutile de tout configurer : Ollama applique des valeurs par défaut sensées (temperature 0.8, num_ctx 2048, repeat_penalty 1.1).

#2. Créer son premier modèle

Le workflow est toujours le même : on écrit un Modelfile, on lance ollama create, on teste avec ollama run.

  1. 01
    Créer le fichier
    Dans un dossier de travail, créez un fichier nommé Modelfile (sans extension). Mettez-y la définition de votre variante.
  2. 02
    Lancer la création
    Depuis le même dossier : ollama create mon-modele -f ./Modelfile. Ollama valide la syntaxe, hérite des poids du modèle FROM et enregistre une nouvelle entrée. C'est instantané, il ne re-télécharge rien.
  3. 03
    Vérifier
    ollama list montre votre nouveau modèle aux côtés des autres. La taille affichée est identique à celle du modèle de base — c'est une référence, pas une copie.
  4. 04
    Tester
    ollama run mon-modele. Le system prompt et les paramètres sont déjà appliqués. Vous pouvez aussi pointer une interface (Open WebUI, LM Studio) sur cette variante via l'API.
Cycle complet
# Dans le dossier qui contient le Modelfile
ollama create assistant-fr -f ./Modelfile
ollama list
ollama run assistant-fr
!
Le nom du modèle est définitif
Pour modifier un Modelfile, éditez le fichier puis relancez ollama create avec le MÊME nom — la variante est remplacée. Si vous changez de nom, vous accumulez des références. ollama rm <nom> nettoie une variante devenue inutile.

#3. Exemple : assistant français concis

Objectif : un assistant qui répond systématiquement en français, sans préambule du type "Bien sûr, voici…", sans formules d'excuse, avec une longueur calibrée.

Modelfile-assistant-fr
FROM mistral

SYSTEM """
Tu es un assistant francophone précis et concis.

Règles strictes :
- Réponds toujours en français, jamais en anglais, même si l'utilisateur écrit en anglais.
- Pas de préambule ("Bien sûr", "Voici", "Absolument"). Va directement au fait.
- Pas d'excuses ni de disclaimers sauf si l'information est réellement incertaine.
- Réponses courtes par défaut (3-5 phrases). Détaille uniquement si on te le demande explicitement.
- Si tu ne sais pas, dis-le en une phrase. N'invente pas.
"""

PARAMETER temperature 0.6
PARAMETER top_p 0.9
PARAMETER num_ctx 8192
PARAMETER repeat_penalty 1.15

Création et test :

Terminal
ollama create assistant-fr -f ./Modelfile-assistant-fr
ollama run assistant-fr "Quels sont les avantages d'un LLM local ?"

Le repeat_penalty à 1.15 (au lieu du 1.1 par défaut) coupe court aux modèles qui radotent. Le num_ctx à 8192 permet de coller des documents un peu longs sans casser le contexte par défaut de 2048.

Tester l'effet du system prompt
Comparez côte à côte ollama run mistral et ollama run assistant-fr sur la même question. Sans Modelfile, Mistral commence souvent par "Bien sûr,". Avec votre variante, il enchaîne directement sur la réponse. C'est la différence concrète.

#4. Exemple : coder Python silencieux

Objectif : un compagnon de code qui renvoie du Python prêt à coller, avec un minimum de prose autour. Idéal pour les workflows où on veut piper la sortie dans un éditeur ou un script.

Modelfile-coder-py
FROM qwen2.5-coder:7b

SYSTEM """
Tu es un assistant de code Python expert. Tu suis ces règles :

1. Réponds uniquement avec du code Python valide, dans un bloc fenced ```python.
2. Pas d'explication avant ou après le code, sauf si l'utilisateur demande explicitement une explication.
3. Le code doit être complet, exécutable, avec les imports nécessaires en haut.
4. Privilégie la stdlib quand c'est possible. Si une dépendance externe est nécessaire, mets un commentaire en tête : # pip install <package>.
5. Type hints quand c'est raisonnable (Python 3.10+).
6. Si la demande est ambiguë, choisis l'interprétation la plus probable et code-la, sans poser de questions.
"""

PARAMETER temperature 0.2
PARAMETER top_p 0.95
PARAMETER num_ctx 16384
PARAMETER stop "```\n\n"

Quelques choix techniques notables :

FROM qwen2.5-coder:7b
Modèle spécialisé code. Sur RTX 4070 12 Go ou un Mac M2 Pro, il tourne à 30-50 tokens/s en Q4. Remplacez par qwen2.5-coder:14b si vous avez 16 Go de VRAM.
temperature 0.2
Basse pour le code. À 0.7 (défaut), le modèle improvise des noms de variables et invente parfois des API. Pour du code, on veut du déterminisme.
num_ctx 16384
Fenêtre étendue pour analyser des fichiers entiers. Attention : multiplie la VRAM consommée par le contexte.
stop
Le modèle s'arrête après le premier bloc de code. Évite les explications post-code qui polluent la sortie.
Exemple d'usage
ollama create coder-py -f ./Modelfile-coder-py
ollama run coder-py "Lire un CSV avec pandas et retourner la moyenne de la colonne 'prix'"
i
Ajuster pour vos besoins
Si vous voulez aussi des tests pytest générés systématiquement, ajoutez une règle dans le SYSTEM : "7. Produis également un bloc de tests pytest minimal après le code principal." Le modèle suivra l'instruction tant qu'elle est claire et non contradictoire.

#5. Exemple : traducteur strict EN→FR

Objectif : un traducteur qui renvoie UNIQUEMENT la traduction, sans guillemets, sans "Traduction :", sans variation stylistique. Le cas d'usage typique : intégration dans un pipeline n8n ou un script bash où la sortie sera consommée brute.

Modelfile-translator
FROM mistral

SYSTEM """
Tu es un traducteur professionnel anglais → français.

Règles ABSOLUES :
- Tu reçois un texte en anglais. Tu retournes UNIQUEMENT la traduction française.
- Pas de préfixe ("Traduction :", "Voici :"), pas de guillemets autour de ta réponse, pas de commentaire.
- Conserve la mise en forme exacte du texte source (sauts de ligne, listes, ponctuation).
- Conserve les noms propres, marques, URLs et identifiants techniques tels quels.
- Si le texte est déjà en français, renvoie-le inchangé.
- Si le texte est dans une autre langue que l'anglais, renvoie : ERREUR_LANGUE_NON_SUPPORTÉE
"""

PARAMETER temperature 0.3
PARAMETER num_ctx 4096
PARAMETER num_predict 2048

L'ajout de MESSAGE pour ancrer le format par few-shot rend le comportement encore plus prévisible :

Version renforcée avec few-shot
FROM mistral

SYSTEM """
Tu traduis de l'anglais vers le français. Tu renvoies UNIQUEMENT la traduction, sans préfixe ni guillemets.
"""

MESSAGE user "The meeting starts at 3 PM."
MESSAGE assistant "La réunion commence à 15 heures."

MESSAGE user "Please check the attached document."
MESSAGE assistant "Merci de consulter le document ci-joint."

PARAMETER temperature 0.3

Usage en pipeline :

Pipe shell
echo "The deployment is scheduled for tomorrow morning." | ollama run translator-en-fr
Appel direct via l'API
Pour intégrer dans un script, l'API HTTP est plus pratique : curl http://localhost:11434/api/generate -d '{"model":"translator-en-fr","prompt":"Your text here","stream":false}'. La réponse JSON contient la traduction dans le champ response.

#6. Gérer ses modèles personnalisés

Au fil du temps, vous allez accumuler plusieurs variantes. Quelques commandes utiles pour garder le contrôle :

Inventaire et nettoyage
# Lister tous les modèles (originaux + variantes)
ollama list

# Voir le Modelfile d'une variante (utile pour récupérer un Modelfile perdu)
ollama show --modelfile assistant-fr

# Voir les paramètres effectifs
ollama show --parameters assistant-fr

# Voir le system prompt seul
ollama show --system assistant-fr

# Supprimer une variante (libère uniquement l'entrée, pas les poids du modèle de base)
ollama rm assistant-fr
i
Versionner ses Modelfiles dans Git
Les Modelfiles sont du texte. Mettez-les dans un repo Git à part. Vous gardez l'historique des prompts qui marchent, et n'importe quelle machine avec Ollama et le bon modèle de base peut recréer toutes vos variantes en quelques secondes.

#Dépannage

Le modèle ignore le system prompt
Vérifiez que vous lancez bien votre variante (ollama run mon-modele) et pas le modèle de base. Confirmez avec ollama show --system mon-modele.
Réponses tronquées
Augmentez num_predict (défaut 128 dans certaines configs) à 2048 ou plus. Ou ajoutez PARAMETER num_predict -1 pour désactiver la limite.
Le modèle ne respecte pas une règle stricte
Reformulez la règle en majuscules, ajoutez "ABSOLUMENT" ou "JAMAIS", et ajoutez un exemple via MESSAGE. Les modèles 7B ont du mal avec les négations isolées.
Erreur "Error: invalid model reference"
Le modèle FROM n'est pas installé localement. Lancez ollama pull <modele> avant le ollama create.
VRAM saturée après création
Le num_ctx élevé multiplie la consommation. Si vous passez de 2048 à 16384, comptez +1 à +3 Go de VRAM selon la taille du modèle. Repassez à 8192 si ça serre.

#Pour aller plus loin

Le Modelfile est la brique de base pour spécialiser Ollama sans toucher aux poids. Trois directions naturelles à creuser ensuite :

Maîtriser les system prompts plus en profondeur
Le guide sur les system prompts détaille comment structurer rôles, contraintes et exemples pour des comportements vraiment fiables — utile dès que vous dépassez les 5 lignes de SYSTEM.
Régler température, top-p et top-k
Avant de toucher au modèle, savoir précisément ce que change chaque paramètre de sampling évite beaucoup d'allers-retours. Le guide dédié couvre tous les réglages utiles.
Exposer vos variantes via Open WebUI
Une fois vos modèles personnalisés créés, Open WebUI les liste automatiquement. Vous pouvez basculer entre assistant-fr, coder-py et translator-en-fr d'un clic depuis l'interface.
Ce guide vous a aidé ?

Un retour, une erreur, une précision ? Faites-nous signe, ça améliore le guide pour tout le monde.