Blog › Construire avec l'IA

Construire avec l'IA

Ollama : installer, régler le contexte et brancher vos agents

Ollama est un logiciel open source qui fait tourner des modèles d’IA ouverts sur votre ordinateur, et les rend accessibles par une API compatible OpenAI, sur le port 11434. Chez un client, c’est la prise où vous branchez ses agents, n8n ou votre code, sans que ses données passent par OpenAI ou Anthropic. Mais réglé par défaut, il coupe sans prévenir les consignes d’un agent : voici l’installation, les commandes et le réglage qui évite ce piège, testés sur un Mac mini de 16 Go.

Ollama, c’est quoi

Ollama est un emballage autour d’un moteur d’inférence, comme LM Studio : il télécharge les modèles, les charge en mémoire, et répond par une API. Il est sous licence MIT, créé en 2023 par Jeffrey Morgan et Michael Chiang. Une fois lancé, il tourne en tâche de fond ; sur Mac, une icône dans la barre des menus. Son application a une fenêtre de chat basique, mais l’essentiel se passe dans le terminal.

Pourquoi lui, et pas seulement LM Studio ? LM Studio est l’atelier où l’on découvre et teste les modèles avec des boutons (l’article sur LM Studio). Ollama est la prise standard : la plupart des outils d’agents ont un réglage « Ollama » prêt à l’emploi, et il se règle par des fichiers, donc on refait la même installation chez chaque client.

Il fait aussi tourner des modèles dans son cloud, ceux dont le nom finit par cloud. Ceux-là ne sont pas locaux : votre message part sur les serveurs d’Ollama. On verra comment les bloquer.

Installer Ollama sur Mac, Windows et Linux

Ollama se télécharge sur ollama.com.

  • Sur Mac, ouvrez ollama.dmg et glissez l’application dans Applications. Il faut macOS 14 Sonoma ou plus récent ; sur un Mac à puce M, le GPU est utilisé, sur un Mac Intel, seulement le processeur. Au premier lancement, Ollama propose d’installer la commande ollama dans le terminal.
  • Sur Windows, lancez OllamaSetup.exe, sans droits administrateur. Il faut Windows 10 22H2 ou plus récent, et pour une carte Nvidia, des pilotes 551.61 ou plus récents. Prévoyez 4 Go pour l’installation, sans compter les modèles.
  • Sur Linux, une seule commande suffit.
bash
curl -fsSL https://ollama.com/install.sh | sh

Puis tapez ollama seul dans le terminal : il propose de lancer un modèle ou de connecter un outil.

Les commandes Ollama à connaître

Au quotidien, cinq commandes suffisent, plus deux pour faire le ménage.

bash
ollama pull ministral-3:8b    # télécharger un modèle
ollama run ministral-3:8b     # discuter avec lui dans le terminal (/bye pour sortir)
ollama ls                     # lister les modèles sur le disque
ollama ps                     # voir les modèles chargés en mémoire
ollama stop ministral-3:8b    # le décharger de la mémoire
ollama rm ministral-3:8b      # le supprimer du disque
ollama show ministral-3:8b    # sa fiche : taille, contexte maximal, quantification, licence

Le nom du modèle se copie sur ollama.com, rubrique Models. Sa page donne la taille de chaque version et ses étiquettes : tools (il sait appeler des outils, indispensable pour un agent), vision, thinking. Ministral 3, le petit modèle de Mistral, sous licence Apache 2.0, existe en 3B (3,0 Go), 8B (6,0 Go) et 14B (9,1 Go), compressé en 4 bits par défaut.

Pourquoi le 8B sur un Mac de 16 Go, et pas le 14B ? Pour un agent, la RAM d’un Mac doit faire au moins deux fois la taille du fichier. 2 × 9,1 Go, c’est 18 : trop. 2 × 6 Go, c’est 12 : ça passe.

Attention aussi : les modèles de LM Studio et ceux d’Ollama ne sont pas partagés. Chacun a son dossier (~/.ollama/models sur Mac pour Ollama), donc deux copies du même modèle sur le disque.

ollama ps est la commande que vous taperez le plus. Trois colonnes comptent :

  • PROCESSOR : « 100% GPU » veut dire que le modèle tient entièrement dans le GPU ; un partage entre CPU et GPU, qu’il déborde et ralentit.
  • CONTEXT : le nombre de tokens de contexte réservés pour ce modèle.
  • SIZE : ce que le modèle occupe en mémoire, contexte compris.

Et pour mesurer une machine, ollama run ministral-3:8b --verbose affiche sous chaque réponse la vitesse d’écriture (eval rate), la vitesse de lecture (prompt eval rate) et le temps de chargement (load duration).

Le piège : 4 096 tokens de contexte, coupés sans prévenir

Dans ollama ps, la colonne CONTEXT affichait 4 096. Ollama choisit le contexte selon la mémoire du GPU : 4 096 tokens sous 24 Gio, 32 768 de 24 à 48 Gio, 256 000 au-delà. 4 096 tokens, c’est à peine 2 700 mots. Pour discuter, ça va. Pour un agent, non : la documentation d’Ollama conseille au moins 64 000 tokens pour les agents et les outils de code, et OpenClaw refuse de démarrer sous 16 000.

Le plus grave arrive quand le texte dépasse : Ollama ne prévient pas. Il coupe, et ce qui disparaît, c’est le début, là où sont les consignes.

Le test en direct, dans l’application Ollama, avec Ministral 3 8B :

  1. Premier message, une consigne : pour toute la conversation, commencer chaque réponse par un mot donné. Il confirme.
  2. Deuxième message : le PDF d’une centaine de notes clients du trimestre, et la demande d’un mémo.

La réponse arrive sans le mot imposé. La demande est ignorée aussi : pas le bon titre, pas de cause, cinq actions au lieu d’une. Et les chiffres sont faux : 6 clients avec des livrables en retard, quand les notes en comptent 18.

L’application ne dit rien, mais le journal d’Ollama l’a noté (sur Mac, dans ~/.ollama/logs/server.log) :

bash
grep "truncating" ~/.ollama/logs/server.log | tail -1

prompt=10972, new=2051 : la conversation faisait près de 11 000 tokens, Ollama en a gardé 2 051, moins d’un cinquième. Il a gardé la fin et jeté la consigne, la demande et les quatre cinquièmes des notes. Il n’a lu que celles de fin août et de septembre, d’où ses 6 clients au lieu de 18, présentés comme la synthèse du trimestre.

Dans un agent, ça donne des consignes oubliées, un mail envoyé alors qu’on le lui avait interdit, des outils perdus en route. Et vous croyez que votre agent est cassé.

3 façons d’augmenter le contexte, et la meilleure pour un agent

1. L’application

Dans les réglages (Settings), le curseur « Context length » : 8K, 16K, 32K… Il vaut pour tous les modèles.

2. La variable d’environnement

OLLAMA_CONTEXT_LENGTH sert sur une machine sans écran ou un serveur. Sur Mac :

bash
launchctl setenv OLLAMA_CONTEXT_LENGTH 32768

puis relancez l’application Ollama. Sur un serveur Linux, la documentation donne OLLAMA_CONTEXT_LENGTH=64000 ollama serve.

3. Le Modelfile, ma façon préférée

Pourquoi lui ? Parce que la plupart des agents parlent à Ollama au format d’OpenAI, et ce format n’a aucun réglage de contexte : la documentation d’Ollama le dit et renvoie au Modelfile. Le réglage doit voyager avec le modèle. Et un réglage global donne 32 000 tokens à tous vos modèles, même à ceux qui n’en ont pas besoin, alors que chaque token coûte de la mémoire.

Un Modelfile, c’est un fichier texte de trois lignes :

bash
cat > Modelfile <<EOF
FROM ministral-3:8b
PARAMETER num_ctx 32768
PARAMETER temperature 0.05
EOF

ollama create ministral-agent -f Modelfile
ollama ls

FROM donne le modèle de départ. num_ctx fixe le contexte. Et temperature applique la recommandation de Mistral pour Ministral 3, une température sous 0,1 (la valeur par défaut d’un Modelfile est 0,8). ollama create crée un nouveau modèle, ministral-agent, qui apparaît dans ollama ls et dans l’application, sans dupliquer les 6 Go du fichier.

Même test, mêmes deux messages, avec ministral-agent : la consigne est respectée, et la demande aussi. Le bon titre, trois plaintes, trois verbatims, une cause, une action, et des sources qui vont de début juillet à septembre : il a tout lu. Mais il a fallu attendre. Le journal donne les chiffres :

bash
grep "eval time" ~/.ollama/logs/server.log | tail -2

La lecture (prompt eval time) : 10 455 tokens en 81 secondes, soit 129 tokens par seconde. C’est le prefill, presque tout le temps avant le premier mot : 1 minute 20. L’écriture (eval time) : 12 tokens par seconde.

Puis ollama ps : CONTEXT à 32 768, SIZE à 9,8 Go pour un fichier de 6 Go. Près de 4 Go pour le contexte et le moteur, réservés dès le chargement, avant même le premier message. PROCESSOR à 100 % GPU : la machine suffit. Et le Modelfile a le dernier mot : quel que soit le curseur de l’application ou la variable, ministral-agent garde ses 32 768 tokens.

Ce fichier, vous le copiez chez chaque client, et vous retrouvez le même réglage partout.

Les autres réglages : mémoire, cache et modèles chargés

Vous n’avez pas à tous les appliquer aujourd’hui. Ce sont des variables d’environnement, et chaque système les règle à sa façon.

bash
# Mac : puis relancer l’application Ollama (effacé au redémarrage du Mac)
launchctl setenv OLLAMA_KEEP_ALIVE -1

# Linux : ajouter la ligne sous [Service], puis recharger
sudo systemctl edit ollama.service
#   [Service]
#   Environment="OLLAMA_KEEP_ALIVE=-1"
sudo systemctl daemon-reload && sudo systemctl restart ollama

# Windows : quitter Ollama, ajouter la variable dans les variables
# d’environnement de votre compte, puis relancer Ollama
  • OLLAMA_KEEP_ALIVE : c’est la dernière colonne de ollama ps, UNTIL, « 4 minutes from now ». Par défaut, Ollama décharge un modèle 5 minutes après la dernière requête. À -1, il reste chargé en permanence ; à 0, il est déchargé tout de suite. Pour un agent, gardez-le chargé : à chaque rechargement, il doit relire toutes ses consignes.
  • OLLAMA_KV_CACHE_TYPE : la compression de la mémoire du contexte (et non celle du modèle). f16 par défaut, sans compression ; q8_0 la divise par deux ; q4_0 par quatre. Comme pour un modèle compressé, c’est arrondir : un agent peut suivre ses consignes moins fidèlement. En q8_0, la perte est faible ; en q4_0, elle se voit. Il faut que Flash Attention soit activé. Je reste presque toujours en f16, à la limite en q8_0 : testez sur votre usage avant de le déployer chez un client.
  • OLLAMA_MAX_LOADED_MODELS : combien de modèles peuvent être chargés en même temps. Mettez-le à 1 si vous n’en utilisez qu’un, sauf si la machine tient vraiment deux ou trois modèles.

L’API compatible OpenAI : appeler Ollama depuis une autre machine

Ollama expose une API sur le port 11434, compatible avec le format d’OpenAI et celui d’Anthropic. La plupart des applications qui savent parler à OpenAI peuvent parler à votre Ollama à la place : il suffit de changer l’adresse du serveur.

Par défaut, Ollama n’écoute que la machine sur laquelle il tourne (127.0.0.1). Pour l’appeler depuis un autre poste du réseau, activez « Expose Ollama to the network » dans les réglages de l’application, ou OLLAMA_HOST=0.0.0.0:11434 sur un serveur.

Depuis le MacBook, vers le Mac mini du réseau local :

bash
curl http://192.168.1.20:11434/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "ministral-agent",
    "messages": [{"role": "user", "content": "Salut"}]
  }'

Remplacez l’adresse par celle de votre machine. La réponse arrive au format standard d’OpenAI, celui que comprennent n8n, OpenClaw, Hermes ou votre code. Si l’outil exige une clé API, mettez n’importe quelle valeur, ollama par exemple : Ollama l’ignore.

Et vous voyez pourquoi on a créé ministral-agent : dans cette requête, rien ne permet de choisir le contexte. Appelez ministral-3:8b, il aura 4 096 tokens. Appelez ministral-agent, il en aura 32 768, avec la bonne température.

Ollama n’a aucune authentification : ouvert au réseau, il répond à tout le monde, sans mot de passe. N’ouvrez jamais son port sur internet. Chez un client, il passe derrière un portier avec une clé, et l’accès à distance par un réseau privé : c’est détaillé dans la masterclass IA locale.

L’appel d’outil : ce qui fait d’un modèle un agent

Dernier test, comme le ferait un agent : je donne au modèle un outil fictif, envoyer_mail, avec une consigne système (« exécute directement les actions demandées avec les outils disponibles, sans demander de confirmation »), et je lui demande de décaler une réunion.

bash
curl http://192.168.1.20:11434/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "ministral-agent",
    "messages": [
      {"role": "system", "content": "Tu es un assistant qui exécute directement les actions demandées avec les outils disponibles, sans demander de confirmation."},
      {"role": "user", "content": "Écris à julie@cabinet.fr pour décaler notre réunion à jeudi 10 h"}
    ],
    "tools": [{
      "type": "function",
      "function": {
        "name": "envoyer_mail",
        "description": "Envoie un email",
        "parameters": {
          "type": "object",
          "properties": {
            "destinataire": {"type": "string"},
            "objet": {"type": "string"},
            "texte": {"type": "string"}
          },
          "required": ["destinataire", "objet", "texte"]
        }
      }
    }]
  }'

La réponse n’a pas de texte : elle contient un bloc tool_calls, avec le nom de l’outil et ses paramètres, le destinataire, l’objet et le message (« Bonjour Julie, je te contacte pour te proposer de décaler notre réunion… »).

Le modèle ne fait rien lui-même. Il répond par une demande structurée : « appelle cet outil, avec ces paramètres ». C’est le harness, le programme autour du modèle, qui agit. Dans n8n, vous branchez des outils sur le nœud AI Agent, Gmail par exemple : c’est n8n qui reçoit ce bloc et envoie le mail, puis renvoie le résultat au modèle, qui vous répond « c’est fait ». Le fonctionnement complet d’un agent est dans l’article sur les agents IA, et le nœud dans la masterclass n8n.

Un modèle de 8 milliards appelle correctement un outil bien cadré. Dès qu’il faut enchaîner plusieurs étapes, il faut un modèle plus gros, autour de 27 milliards, et la machine qui va avec.

Brancher un agent et verrouiller le local

Pour une vingtaine d’outils, Ollama écrit lui-même la configuration, en une commande :

bash
ollama launch openclaw --config   # configurer OpenClaw sans le lancer
ollama launch claude              # Claude Code
ollama launch codex               # Codex
ollama launch opencode            # OpenCode

Dans la liste qu’il propose, choisissez un modèle local (votre ministral-agent), pas un modèle cloud. Le détail pour OpenClaw est dans l’article sur OpenClaw.

Enfin, chez un client, coupez les modèles cloud d’Ollama, pour que rien ne parte par erreur :

bash
# Mac (avec l’application) : dans ~/.ollama/server.json
{ "disable_ollama_cloud": true }

# Linux ou serveur : la variable
OLLAMA_NO_CLOUD=1

Relancez Ollama : le journal affiche Ollama cloud disabled: true.

Livrer

Ce que vous pouvez vendre avec ça

À qui : un cabinet d’expertise comptable ou une PME de 10 à 30 salariés, qui a déjà des workflows n8n ou un projet d’agent, mais dont les données ne peuvent pas partir chez OpenAI ou Anthropic.

Ce que vous livrez : Ollama installé sur une machine dédiée du bureau, le modèle choisi après un essai sur la vraie tâche, un Modelfile à son nom (contexte et température), des variables rendues permanentes, l’API accessible seulement par le portier, et l’agent n8n branché dessus. Vous remettez aussi une fiche des trois chiffres mesurés sur sa machine : la vitesse de lecture, la vitesse d’écriture, et le temps avant le premier mot sur l’un de ses documents. Comptez quelques jours, test du modèle compris.

Comment le présenter : « Votre agent tourne sur la machine du bureau : coupez internet, il répond encore. » Puis montrez ollama ps à 100 % GPU, et le mémo qui sort sur un dossier réel. Dites aussi sa limite : le modèle local prépare, et un humain relit avant tout envoi.

L'Accélérateur IA

Signez vos 3 premiers clients IA en 180 jours

Les inscriptions sont fermées. Rejoignez la liste d'attente : vous serez prévenu dès la prochaine ouverture.

Rejoindre la liste d'attente