Ce que vous saurez faire à la fin
- Installer Ollama sur Windows, macOS ou Linux et télécharger 3 modèles (Llama 3.3, Mistral, Qwen 2.5)
- Choisir le bon modèle selon votre RAM/GPU disponible et votre cas d’usage PME
- Appeler Ollama via son API REST locale depuis Python (compatible OpenAI)
- Comparer Ollama et Claude sur 5 critères : coût, qualité, latence, confidentialité, autonomie
- Déployer Ollama en mode serveur pour une PME sénégalaise sans connexion stable (offline)
Durée : 2h30. Pré-requis : Machine avec 16 Go RAM minimum (32 Go recommandé), 50 Go disque, optionnel GPU NVIDIA 8 Go VRAM, Python 3.10+, terminal.
Étape 1 — Pourquoi un modèle local en complément de Claude ?
Claude est excellent en qualité mais facture chaque token et nécessite une connexion internet stable. Pour une PME sénégalaise à Kaolack ou Ziguinchor, où la fibre optique reste rare et l’électricité capricieuse, un modèle local Ollama offre trois avantages décisifs : coût marginal nul après installation, fonctionnement 100 % offline, confidentialité totale (aucune donnée client ne quitte le serveur). On l’utilise en complément de Claude pour les tâches simples (résumé, classification, extraction) en gardant Claude pour les tâches complexes (stratégie, code, raisonnement long).
Étape 2 — Installer Ollama
# macOS et Linux
curl -fsSL https://ollama.com/install.sh | sh
# Windows : télécharger l'installeur
# https://ollama.com/download/windows
# Puis double-cliquer sur OllamaSetup.exe
# Vérification
ollama --version
ollama serve # démarre le service en arrière-plan
Sur Windows, Ollama démarre automatiquement et s’écoute sur http://localhost:11434. Sur Linux, ajoutez-le à systemd : sudo systemctl enable –now ollama.
Étape 3 — Télécharger les modèles recommandés 2026
# Llama 3.3 - Meta - 70B paramètres (très puissant, 40 Go RAM)
ollama pull llama3.3:70b
# Llama 3.3 - version 8B (plus accessible, 8 Go RAM)
ollama pull llama3.3:8b
# Mistral - français excellent (4 Go RAM)
ollama pull mistral:7b
# Qwen 2.5 - Alibaba - très rapide (4 Go RAM)
ollama pull qwen2.5:7b
# DeepSeek Coder - spécialisé code (4 Go RAM)
ollama pull deepseek-coder-v2:16b
# Lister les modèles installés
ollama list
# Supprimer un modèle si besoin de place
ollama rm llama3.3:70b
Étape 4 — Tableau de choix : quel modèle pour quel matériel ?
Modèle | RAM min | GPU recommandé | Tokens/sec | Qualité FR
--------------------|-----------|------------------|------------|-----------
qwen2.5:0.5b | 2 Go | Non requis | 80 | Faible
mistral:7b | 8 Go | Non requis | 25 | Excellente
llama3.3:8b | 8 Go | Non requis | 22 | Bonne
qwen2.5:14b | 16 Go | RTX 3060 12 Go | 18 | Très bonne
deepseek-coder:16b | 16 Go | RTX 4070 12 Go | 15 | Code expert
llama3.3:70b | 40 Go | RTX A6000 48 Go | 8 | Excellente
Sans GPU, comptez x4 sur le temps de réponse.
Pour PME standard à Dakar : mistral:7b ou llama3.3:8b sur PC 16 Go.
Étape 5 — Premier test en ligne de commande
ollama run mistral:7b
# Une fois le prompt actif :
>>> Rédige une lettre de relance pour facture impayée de 2 500 000 FCFA, 30 jours de retard, client BTP Plus SARL à Dakar.
# Pour quitter
>>> /bye
# Mode non-interactif
ollama run mistral:7b "Résume en 3 lignes : la TVA au Sénégal est de 18%..."
Étape 6 — Appeler l’API Ollama depuis Python
import requests
import json
OLLAMA_URL = "http://localhost:11434/api/generate"
def appeler_ollama(prompt, modele="mistral:7b"):
payload = {
"model": modele,
"prompt": prompt,
"stream": False,
"options": {
"temperature": 0.3,
"num_predict": 1024,
"top_p": 0.9
}
}
response = requests.post(OLLAMA_URL, json=payload)
return response.json()["response"]
# Test
reponse = appeler_ollama(
"Tu es comptable sénégalais. Calcule la TVA sur 8 500 000 FCFA HT."
)
print(reponse)
Étape 7 — Mode streaming pour interface utilisateur réactive
import requests
import json
def streamer_ollama(prompt, modele="mistral:7b"):
payload = {"model": modele, "prompt": prompt, "stream": True}
response = requests.post(OLLAMA_URL, json=payload, stream=True)
for ligne in response.iter_lines():
if ligne:
chunk = json.loads(ligne)
if not chunk.get("done"):
print(chunk["response"], end="", flush=True)
print()
streamer_ollama("Liste 5 conseils pour réduire les retards de paiement clients au Sénégal.")
Étape 8 — API compatible OpenAI (réutiliser code existant)
Ollama expose une couche compatible OpenAI à localhost:11434/v1. Vous pouvez réutiliser tout code OpenAI sans modification, juste en changeant l’URL.
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:11434/v1",
api_key="ollama" # valeur factice mais requise
)
response = client.chat.completions.create(
model="mistral:7b",
messages=[
{"role": "system", "content": "Tu es expert OHADA, réponds en FCFA."},
{"role": "user", "content": "Quelles obligations comptables pour une SARL au capital de 5 millions FCFA ?"}
],
temperature=0.2,
max_tokens=1024
)
print(response.choices[0].message.content)
Étape 9 — Wrapper unifié Claude/Ollama (basculer en un paramètre)
from anthropic import Anthropic
from openai import OpenAI
class LLMHybride:
def __init__(self):
self.claude = Anthropic()
self.ollama = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama")
def repondre(self, prompt, mode="auto", systeme=""):
"""mode : 'cloud' (Claude), 'local' (Ollama), 'auto' (selon connexion)"""
if mode == "auto":
mode = "cloud" if self._connexion_ok() else "local"
if mode == "cloud":
r = self.claude.messages.create(
model="claude-sonnet-4-5",
max_tokens=1024,
system=systeme,
messages=[{"role": "user", "content": prompt}]
)
return r.content[0].text, "claude-sonnet-4-5"
else:
r = self.ollama.chat.completions.create(
model="mistral:7b",
messages=[
{"role": "system", "content": systeme},
{"role": "user", "content": prompt}
]
)
return r.choices[0].message.content, "mistral:7b-local"
def _connexion_ok(self):
try:
requests.get("https://api.anthropic.com", timeout=3)
return True
except:
return False
llm = LLMHybride()
texte, modele = llm.repondre("Synthèse des actes uniformes OHADA", mode="auto")
print(f"[{modele}] {texte}")
Étape 10 — Comparatif Ollama vs Claude (PME sénégalaise)
Critère | Claude API | Ollama Local
---------------------|----------------------|----------------------
Coût/1M tokens IN | 1 800 FCFA (Sonnet) | 0 FCFA (élec seule)
Coût matériel initial| 0 FCFA | 600 000 FCFA (PC GPU)
Qualité raisonnement | Excellente | Bonne (Mistral 7B)
Qualité code Python | Excellente | Très bonne (DeepSeek)
Vitesse (tokens/sec) | 50 (réseau dépendant)| 25 (CPU) à 80 (GPU)
Connexion requise | Oui | Non (offline)
Confidentialité | Politique Anthropic | 100% local
Contexte max | 200 000 tokens | 32 000 à 128 000
Multimodal (image) | Oui | Llava uniquement
Mise à jour modèle | Automatique | Manuelle (ollama pull)
Étape 11 — Cas d’usage : assistant comptable offline à Tambacounda
SYSTEME_COMPTA = """Tu es un assistant comptable pour PME au Sénégal.
- Plan SYSCOHADA révisé
- TVA 18%
- Format FCFA français : 1 234 567 FCFA
- Réponses concises (max 200 mots)
- Si tu ne sais pas, dis-le"""
def assistant_compta_offline(question):
return llm.repondre(question, mode="local", systeme=SYSTEME_COMPTA)
# Utilisable même quand Tamba perd internet
texte, _ = assistant_compta_offline(
"Comptabiliser un achat de marchandises 4 500 000 FCFA TTC, paiement comptant."
)
print(texte)
Étape 12 — Créer un modèle personnalisé avec Modelfile
Ollama permet de créer des variantes de modèles avec un prompt système intégré, des paramètres figés, des templates personnalisés. Idéal pour standardiser les réponses.
# Créer un fichier nommé Modelfile (sans extension)
cat > Modelfile <<'EOF'
FROM mistral:7b
SYSTEM """Tu es l'assistant ITSkillsCenter pour PME sénégalaises.
Réponds toujours en français professionnel.
Toutes valeurs en FCFA, format français.
Référence OHADA si applicable.
Style : concis, structuré, actionnable."""
PARAMETER temperature 0.3
PARAMETER top_p 0.9
PARAMETER num_ctx 8192
EOF
# Créer le modèle personnalisé
ollama create itsc-pme -f Modelfile
# Utilisation
ollama run itsc-pme "Comment optimiser ma trésorerie ?"
Étape 13 — Déploiement serveur réseau local (PME 20 postes)
# Sur le serveur (Ubuntu Server 24.04)
sudo systemctl edit ollama
# Ajouter dans le fichier qui s'ouvre :
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_KEEP_ALIVE=24h"
Environment="OLLAMA_NUM_PARALLEL=4"
# Redémarrer
sudo systemctl daemon-reload
sudo systemctl restart ollama
# Tester depuis un poste client
curl http://192.168.1.100:11434/api/tags
Sur les postes clients, on configure le code Python avec base_url= »http://192.168.1.100:11434/v1″. Un seul serveur GPU sert 20 utilisateurs PME simultanément.
Étape 14 — Stratégie hybride recommandée pour PME africaine
Tâche | Modèle recommandé | Raison
-------------------------------|----------------------|------------------
Résumé de PV de réunion | Ollama Mistral 7B | Coût nul
Classification email entrant | Ollama Qwen 2.5 7B | Très rapide
Génération devis simple | Ollama Mistral 7B | Standardisé
Lettre commerciale soignée | Claude Haiku | Qualité ton
Analyse SWOT marché | Claude Sonnet | Raisonnement
Plan stratégique 3 ans | Claude Opus | Profondeur
Code Python production | Claude Sonnet | Fiabilité
Code Python prototypes | DeepSeek Coder local | Itération rapide
Traduction wolof-français | Claude Sonnet | Nuance culturelle
Extraction données OCR factures| Ollama Llava 7B | Local + rapide
Économie typique : 70 % du budget Anthropic en confiant 60 % des tâches à Ollama, sans dégradation perçue par les utilisateurs.
Erreurs classiques à éviter
- Erreur : installer llama3.3:70b sur un PC 8 Go. Le modèle ne charge pas, le serveur Ollama plante. Vérifiez la RAM avant.
- Erreur : croire que Ollama 7B égale Claude. Mistral 7B est très bon mais pas pour stratégie ou code complexe. Utilisez chacun selon ses forces.
- Erreur : exposer Ollama sur 0.0.0.0 sur internet public. Tout le monde peut utiliser votre GPU. Restreignez au LAN avec firewall.
- Erreur : oublier OLLAMA_KEEP_ALIVE. Le modèle se décharge de la VRAM après 5 min, première requête lente. Mettez 24h en serveur dédié.
- Erreur : embarquer Ollama dans un laptop sans ventilation. Surchauffe, throttling, usure prématurée. Utilisez un PC fixe ou un serveur.
- Erreur : ne pas tester en français avant production. Certains modèles (Qwen) sont plus faibles en français nuancé que Mistral.
Checklist déploiement Ollama PME
✓ Machine cible : 16 Go RAM minimum
✓ Disque libre : 50 Go pour 3 modèles
✓ Ollama installé et service actif
✓ Modèles téléchargés et testés en CLI
✓ Test API curl localhost:11434 OK
✓ Wrapper Python compatible OpenAI fonctionnel
✓ Modelfile personnalisé pour ton métier
✓ Prompt système OHADA/FCFA validé
✓ Mode hybride Claude/Ollama configuré
✓ Backup régulier de /usr/share/ollama
✓ Monitoring CPU/GPU/RAM (htop, nvidia-smi)
✓ OLLAMA_KEEP_ALIVE=24h en serveur
✓ Firewall LAN restrictif (port 11434)
✓ Documentation utilisateurs en français
✓ Plan de bascule Claude si Ollama indispo