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.
#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.
#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.
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.
#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.
- 01Créer le fichierDans un dossier de travail, créez un fichier nommé Modelfile (sans extension). Mettez-y la définition de votre variante.
- 02Lancer la créationDepuis 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.
- 03Vérifierollama 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.
- 04Testerollama 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.
#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.
Création et test :
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.
#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.
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.
#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.
L'ajout de MESSAGE pour ancrer le format par few-shot rend le comportement encore plus prévisible :
Usage en pipeline :
#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 :
#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.
Un retour, une erreur, une précision ? Faites-nous signe, ça améliore le guide pour tout le monde.