Ollama : Exécuter des LLMs localement
Vous utilisez ChatGPT, Claude ou Gemini via leurs APIs cloud. Mais que se passe-t-il quand :
- Vous travaillez sur des données confidentielles (santé, finance, legal)
- Vous êtes hors ligne (avion, zone sans réseau)
- Vous voulez contrôler les coûts (pas de frais par token)
- Vous avez besoin de latence minimale (pas de requête réseau)
- Vous développez et testez en continu (des milliers de requêtes)
La réponse : exécuter des LLMs en local avec Ollama.
Pourquoi Ollama ?
Avantages vs alternatives (llama.cpp, vLLM, etc.) :
- Simplicité extrême : Installation et utilisation en 2 commandes
- Multi-plateformes : Mac (Apple Silicon natif), Linux, Windows
- Bibliothèque riche : 100+ modèles pré-configurés (Llama, Mistral, Gemma, Qwen, etc.)
- Quantization automatique : Télécharge la version adaptée à votre hardware
- API REST : Compatible OpenAI SDK (drop-in replacement)
- GPU auto-détection : CUDA, ROCm, Metal (Apple) supportés
- Modelfile : Personnalisation facile (system prompts, température, etc.)
Cas d’usage typiques :
- Développement d’applications : Tester sans coûts API
- Prototypage : Itérer rapidement sur prompts
- Confidentialité : Données sensibles restent locales
- Production on-premise : Serveurs internes d’entreprise
- Éducation : Apprendre sans limites de quota
- Offline : Assistants fonctionnels sans internet
Popularité :
- 50K+ étoiles GitHub
- 10M+ téléchargements
- Supporté par Hugging Face, LangChain, LlamaIndex

Installation
macOS
# Installation via brew (recommandé)
brew install ollama
# Ou via script officiel
curl -fsSL https://ollama.com/install.sh | sh
# Démarrer le service
ollama serve
# Le serveur démarre sur http://localhost:11434
Apple Silicon (M1/M2/M3) : Ollama utilise Metal pour accélération GPU native. Performances excellentes !
Linux
# Installation automatique
curl -fsSL https://ollama.com/install.sh | sh
# Démarrer comme service systemd
sudo systemctl start ollama
sudo systemctl enable ollama # Démarrage automatique au boot
# Vérifier status
sudo systemctl status ollama
GPU NVIDIA : Ollama détecte automatiquement CUDA (version 11.8+ requise).
# Vérifier détection GPU
nvidia-smi
# Ollama utilisera automatiquement le GPU
GPU AMD : Support via ROCm (expérimental).
Windows
Option 1 : Binaire officiel (recommandé)
- Télécharger OllamaSetup.exe
- Exécuter l’installateur
- Ollama démarre automatiquement comme service Windows
Option 2 : WSL2 (pour développeurs Linux habitués)
# Dans WSL2 Ubuntu
curl -fsSL https://ollama.com/install.sh | sh
ollama serve
GPU Windows : Support CUDA si drivers NVIDIA installés.
Vérification installation
# Tester que Ollama fonctionne
ollama --version
# Sortie : ollama version 0.1.x
# Lister modèles installés (vide pour l'instant)
ollama list
# Tester avec un petit modèle
ollama run phi
# Télécharge phi (~2.7B paramètres) et lance un chat
Télécharger et exécuter des modèles
Bibliothèque de modèles
Ollama héberge 100+ modèles optimisés sur ollama.com/library.
Modèles populaires :
| Modèle | Paramètres | VRAM requise | Use case | Commande |
|---|---|---|---|---|
| Llama 3.1 | 8B | 6 GB | Général, code | ollama run llama3.1 |
| Llama 3.1 | 70B | 48 GB | Qualité maximale | ollama run llama3.1:70b |
| Mistral | 7B | 5 GB | Français excellent | ollama run mistral |
| Gemma 2 | 9B | 7 GB | Google, multilingue | ollama run gemma2 |
| Qwen 2.5 | 7B | 5 GB | Chinois, code | ollama run qwen2.5 |
| Phi-3 | 3.8B | 3 GB | Compact, rapide | ollama run phi3 |
| CodeLlama | 7B | 5 GB | Spécialisé code | ollama run codellama |
| Llama 3.2 Vision | 11B | 8 GB | Multimodal (texte+image) | ollama run llama3.2-vision |
Commande ollama run
Syntaxe :
ollama run <model_name>:<tag>
Tags : Variantes de quantization (taille vs qualité).
# Télécharger et lancer Llama 3.1 8B (quantization par défaut : Q4)
ollama run llama3.1
# Spécifier variante de quantization
ollama run llama3.1:70b-instruct-q4_K_M # 70B paramètres, Q4_K_M
ollama run llama3.1:8b-instruct-q8_0 # 8B paramètres, Q8 (meilleure qualité, plus lourd)
# Mistral en français
ollama run mistral
# Gemma 2
ollama run gemma2:27b
Première exécution : Télécharge le modèle (peut prendre quelques minutes selon taille et connexion).
$ ollama run llama3.1
pulling manifest
pulling 8eeb52dfb3bb... 100% ▕████████████████▏ 4.7 GB
pulling 948af2743fc7... 100% ▕████████████████▏ 1.5 KB
pulling 0ba8f0e314b4... 100% ▕████████████████▏ 12 KB
pulling 56bb8bd477a5... 100% ▕████████████████▏ 96 B
pulling 1a4c3c319823... 100% ▕████████████████▏ 485 B
verifying sha256 digest
writing manifest
removing any unused layers
success
>>> Send a message (/? for help)
Chat interactif
Une fois le modèle lancé, vous êtes en mode chat interactif.
>>> Explique-moi ce qu'est un LLM en termes simples
Un LLM (Large Language Model) est un modèle d'intelligence artificielle
entraîné sur d'énormes quantités de texte pour comprendre et générer du
langage naturel. Imagine un assistant qui a "lu" l'équivalent de millions
de livres et peut répondre à des questions, écrire des textes, traduire,
coder, etc. Les LLMs comme GPT, Claude ou Llama fonctionnent en prédisant
le mot suivant le plus probable dans une séquence, token par token.
>>> Donne-moi un exemple de code Python pour lire un fichier CSV
Voici un exemple simple avec la bibliothèque pandas :
```python
import pandas as pd
# Lire le fichier CSV
df = pd.read_csv('data.csv')
# Afficher les premières lignes
print(df.head())
# Afficher informations sur les colonnes
print(df.info())
Si tu n’as pas pandas, installe-le avec pip install pandas.
**Commandes spéciales en mode chat** :
- `/bye` : Quitter
- `/clear` : Effacer l'historique de conversation
- `/show` : Afficher paramètres du modèle
- `/load <model>` : Charger un autre modèle
- `/?` : Aide
```bash
>>> /show info
Model
architecture llama
parameters 8.0B
context length 8192
embedding length 4096
quantization Q4_K_M
Gestion des modèles
# Lister modèles installés
ollama list
# Sortie exemple :
# NAME ID SIZE MODIFIED
# llama3.1:latest 42182419e950 4.7 GB 2 hours ago
# mistral:latest 61e88e884507 4.1 GB 1 day ago
# codellama:latest 8fdf8f752f6e 3.8 GB 3 days ago
# Supprimer un modèle
ollama rm llama3.1
# Mettre à jour un modèle
ollama pull llama3.1
# Pull sans lancer
ollama pull gemma2
# Voir détails d'un modèle
ollama show llama3.1
# Copier un modèle avec nouveau nom
ollama cp llama3.1 my-custom-llama
Mode non-interactif
Exécuter une commande unique :
# Réponse directe (non-interactif)
ollama run llama3.1 "Quelle est la capitale de la France ?"
# Sortie :
# La capitale de la France est Paris.
# Rediriger sortie
ollama run codellama "Écris une fonction Python pour calculer la factorielle" > factorial.py
Utilisation en scripts bash :
#!/bin/bash
MODEL="llama3.1"
PROMPT="Analyse ce log d'erreur : $(cat error.log)"
RESPONSE=$(ollama run $MODEL "$PROMPT")
echo "Diagnostic IA :"
echo "$RESPONSE"
# Envoyer par email, logger, etc.
API REST
Ollama expose une API REST sur http://localhost:11434 compatible avec le format OpenAI.
Endpoints principaux
1. Générer une completion :
# POST /api/generate
curl http://localhost:11434/api/generate -d '{
"model": "llama3.1",
"prompt": "Why is the sky blue?",
"stream": false
}'
Réponse :
{
"model": "llama3.1",
"created_at": "2025-01-15T10:30:00Z",
"response": "The sky appears blue due to Rayleigh scattering...",
"done": true,
"context": [128, 564, ...],
"total_duration": 3247892000,
"load_duration": 48203000,
"prompt_eval_duration": 527841000,
"eval_duration": 2671848000
}
2. Chat completion (format OpenAI) :
# POST /api/chat
curl http://localhost:11434/api/chat -d '{
"model": "llama3.1",
"messages": [
{"role": "system", "content": "Tu es un assistant serviable."},
{"role": "user", "content": "Quelle est la capitale du Japon ?"}
],
"stream": false
}'
3. Streaming :
# Streaming de tokens (Server-Sent Events)
curl http://localhost:11434/api/generate -d '{
"model": "llama3.1",
"prompt": "Écris une courte histoire",
"stream": true
}'
# Sortie progressive :
# {"response": "Il", "done": false}
# {"response": " était", "done": false}
# {"response": " une", "done": false}
# {"response": " fois", "done": false}
# ...
# {"done": true}
Python SDK
import requests
import json
class OllamaClient:
def __init__(self, base_url="http://localhost:11434"):
self.base_url = base_url
def generate(self, model, prompt, stream=False, **kwargs):
"""Générer texte depuis prompt"""
url = f"{self.base_url}/api/generate"
data = {
"model": model,
"prompt": prompt,
"stream": stream,
**kwargs
}
response = requests.post(url, json=data, stream=stream)
if stream:
# Streaming mode
for line in response.iter_lines():
if line:
yield json.loads(line)
else:
return response.json()
def chat(self, model, messages, stream=False, **kwargs):
"""Chat avec historique"""
url = f"{self.base_url}/api/chat"
data = {
"model": model,
"messages": messages,
"stream": stream,
**kwargs
}
response = requests.post(url, json=data, stream=stream)
if stream:
for line in response.iter_lines():
if line:
yield json.loads(line)
else:
return response.json()
# Utilisation
client = OllamaClient()
# Génération simple
result = client.generate(
model="llama3.1",
prompt="Explique la relativité en une phrase",
temperature=0.7
)
print(result["response"])
# Chat avec mémoire
messages = [
{"role": "system", "content": "Tu es un expert Python."},
{"role": "user", "content": "Comment lire un fichier JSON ?"}
]
response = client.chat(model="codellama", messages=messages)
print(response["message"]["content"])
# Streaming
print("Génération progressive :")
for chunk in client.generate(model="mistral", prompt="Écris un poème", stream=True):
if not chunk.get("done"):
print(chunk["response"], end="", flush=True)
Compatible OpenAI SDK
Ollama est compatible avec OpenAI Python SDK !
from openai import OpenAI
# Pointer vers Ollama au lieu d'OpenAI
client = OpenAI(
base_url="http://localhost:11434/v1",
api_key="ollama" # Requis mais non utilisé
)
# Utiliser exactement comme OpenAI
response = client.chat.completions.create(
model="llama3.1",
messages=[
{"role": "system", "content": "Tu es un assistant serviable."},
{"role": "user", "content": "Quelle est la hauteur de l'Everest ?"}
],
temperature=0.7,
max_tokens=150
)
print(response.choices[0].message.content)
# Streaming
stream = client.chat.completions.create(
model="mistral",
messages=[{"role": "user", "content": "Conte une blague"}],
stream=True
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
Avantage majeur : Basculer entre OpenAI (cloud) et Ollama (local) en changeant juste base_url !
import os
# Configuration dynamique
USE_LOCAL = os.getenv("USE_LOCAL_LLM", "false").lower() == "true"
if USE_LOCAL:
client = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama")
model = "llama3.1"
else:
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
model = "gpt-4o"
# Le reste du code est identique !
response = client.chat.completions.create(
model=model,
messages=[...]
)
Modelfile : Personnalisation
Un Modelfile permet de personnaliser un modèle : system prompt, température, top_p, etc.
Syntaxe Modelfile
# Modelfile
FROM llama3.1
# System prompt personnalisé
SYSTEM """
Tu es un expert en cybersécurité, spécialisé dans l'analyse de vulnérabilités.
Tu réponds de manière concise et technique.
Tu fournis toujours des exemples de code quand pertinent.
"""
# Paramètres de génération
PARAMETER temperature 0.7
PARAMETER top_p 0.9
PARAMETER top_k 40
PARAMETER num_ctx 4096 # Taille du contexte
# Message d'accueil
TEMPLATE """{{ if .System }}System: {{ .System }}{{ end }}
User: {{ .Prompt }}
Assistant: """
Créer un modèle custom
# Créer Modelfile
cat > Modelfile <<EOF
FROM mistral
SYSTEM "Tu es un poète romantique du 19e siècle. Tu t'exprimes avec élégance et lyrisme."
PARAMETER temperature 0.9
PARAMETER top_p 0.95
EOF
# Créer le modèle custom
ollama create romantic-poet -f Modelfile
# Utiliser le modèle
ollama run romantic-poet
>>> Décris la lune
Ô douce clarté lunaire, astre argenté qui règne sur la voûte céleste nocturne !
Telle une perle suspendue dans l'éther, tu verses ta lumière d'albâtre...
Exemples de Modelfiles
1. Assistant de code strict :
FROM codellama:13b
SYSTEM """
Tu es un senior software engineer expert en clean code.
Règles strictes :
- Code commenté et documenté
- Gestion d'erreurs explicite
- Respect PEP 8 (Python) ou conventions du langage
- Tests unitaires si demandé
- Pas de solutions "quick and dirty"
Format de réponse :
1. Explication de l'approche
2. Code complet
3. Exemples d'utilisation
4. Tests (si applicable)
"""
PARAMETER temperature 0.3 # Bas = plus déterministe pour code
PARAMETER top_p 0.9
ollama create clean-coder -f Modelfile
ollama run clean-coder "Écris une fonction pour valider une adresse email"
2. Tuteur pédagogue :
FROM llama3.1:8b
SYSTEM """
Tu es un tuteur patient et pédagogue pour étudiants débutants.
Méthode d'enseignement :
1. Commence par expliquer le concept simplement (analogie si possible)
2. Donne un exemple concret
3. Pose une question pour vérifier la compréhension
4. Encourage et félicite les efforts
Ton : Amical, encourageant, jamais condescendant
Ne donne jamais directement la réponse complète, guide plutôt
"""
PARAMETER temperature 0.8
3. Extracteur JSON strict :
FROM llama3.1:8b
SYSTEM """
Tu es un extracteur de données. Tu réponds UNIQUEMENT en JSON valide, rien d'autre.
Format JSON strict sans commentaires ni texte additionnel.
"""
PARAMETER temperature 0.1 # Très bas pour consistance
PARAMETER top_k 10
ollama create json-extractor -f Modelfile
echo "Extrais les infos : Jean Dupont, né le 15/03/1985 à Paris, ingénieur" | \
ollama run json-extractor
# {
# "nom": "Dupont",
# "prenom": "Jean",
# "date_naissance": "1985-03-15",
# "lieu_naissance": "Paris",
# "profession": "ingénieur"
# }
Importer modèles Hugging Face
Vous pouvez convertir n’importe quel modèle GGUF depuis Hugging Face.
# Modelfile
FROM https://huggingface.co/TheBloke/Llama-2-13B-chat-GGUF/resolve/main/llama-2-13b-chat.Q4_K_M.gguf
SYSTEM "Tu es un assistant serviable."
PARAMETER temperature 0.7
ollama create llama2-13b-custom -f Modelfile
Modèles GGUF populaires : TheBloke sur Hugging Face propose des centaines de modèles quantizés.
Intégration avec applications
LangChain
from langchain_community.llms import Ollama
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
# Initialiser Ollama
llm = Ollama(
model="llama3.1",
base_url="http://localhost:11434",
temperature=0.7
)
# Utiliser avec LangChain
prompt = PromptTemplate(
input_variables=["product"],
template="Rédige une description marketing pour {product}"
)
chain = LLMChain(llm=llm, prompt=prompt)
result = chain.run(product="un smartphone pliable")
print(result)
# RAG avec Ollama
from langchain_community.embeddings import OllamaEmbeddings
from langchain_community.vectorstores import Chroma
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.chains import RetrievalQA
# [Embeddings](/ia/embedding/) locaux
embeddings = OllamaEmbeddings(model="nomic-embed-text")
# Charger documents
from langchain_community.document_loaders import TextLoader
loader = TextLoader("documentation.txt")
documents = loader.load()
# Chunking
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = text_splitter.split_documents(documents)
# Base vectorielle locale
vectorstore = Chroma.from_documents(
documents=chunks,
embedding=embeddings,
persist_directory="./chroma_db"
)
# RAG Chain
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=vectorstore.as_retriever(search_kwargs={"k": 3})
)
# Question
response = qa_chain.run("Comment installer Python ?")
print(response)
LlamaIndex
from llama_index.llms.ollama import Ollama
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
from llama_index.embeddings.ollama import OllamaEmbedding
# LLM local
llm = Ollama(model="llama3.1", request_timeout=120.0)
# Embeddings locaux
embed_model = OllamaEmbedding(model_name="nomic-embed-text")
# Charger documents
documents = SimpleDirectoryReader("./data").load_data()
# Créer index
index = VectorStoreIndex.from_documents(
documents,
llm=llm,
embed_model=embed_model
)
# Query engine
query_engine = index.as_query_engine()
response = query_engine.query("Résume les points clés du document")
print(response)
Gradio UI
Créer une interface web pour discuter avec Ollama :
import gradio as gr
from openai import OpenAI
client = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama")
def chat_with_ollama(message, history, model):
"""Chat function pour Gradio"""
# Convertir historique Gradio en format OpenAI
messages = []
for human, ai in history:
messages.append({"role": "user", "content": human})
messages.append({"role": "assistant", "content": ai})
messages.append({"role": "user", "content": message})
# Appeler Ollama
response = client.chat.completions.create(
model=model,
messages=messages,
stream=False
)
return response.choices[0].message.content
# Interface Gradio
with gr.Blocks() as demo:
gr.Markdown("# Chat avec Ollama")
model_dropdown = gr.Dropdown(
choices=["llama3.1", "mistral", "codellama", "gemma2"],
value="llama3.1",
label="Choisir modèle"
)
chatbot = gr.Chatbot()
msg = gr.Textbox(placeholder="Votre message...")
msg.submit(
chat_with_ollama,
inputs=[msg, chatbot, model_dropdown],
outputs=chatbot
)
demo.launch()
API REST depuis JavaScript
// Frontend web app
async function askOllama(prompt, model = "llama3.1") {
const response = await fetch("http://localhost:11434/api/generate", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
model: model,
prompt: prompt,
stream: false,
}),
});
const data = await response.json();
return data.response;
}
// Utilisation
const answer = await askOllama("Quelle est la capitale de l'Italie ?");
console.log(answer); // Rome
// Streaming
async function streamOllama(prompt, onToken) {
const response = await fetch("http://localhost:11434/api/generate", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
model: "llama3.1",
prompt: prompt,
stream: true,
}),
});
const reader = response.body.getReader();
const decoder = new TextDecoder();
while (true) {
const { done, value } = await reader.read();
if (done) break;
const chunk = decoder.decode(value);
const lines = chunk.split("\n").filter((line) => line.trim());
for (const line of lines) {
const data = JSON.parse(line);
if (!data.done) {
onToken(data.response);
}
}
}
}
// Usage
streamOllama("Écris une histoire courte", (token) => {
process.stdout.write(token); // Affichage progressif
});
Quantization automatique
Ollama gère la quantization automatiquement pour optimiser taille/qualité selon votre hardware.
Niveaux de quantization
Les modèles Ollama utilisent le format GGUF avec différents niveaux :
| Quantization | Bits/weight | Taille relative | Qualité | Use case |
|---|---|---|---|---|
| Q2_K | ~2.6 bits | 0.3x | ⭐⭐ | RAM/VRAM très limité |
| Q3_K_M | ~3.5 bits | 0.4x | ⭐⭐⭐ | Bon compromis léger |
| Q4_K_M | ~4.5 bits | 0.5x | ⭐⭐⭐⭐ | Recommandé général |
| Q5_K_M | ~5.5 bits | 0.65x | ⭐⭐⭐⭐ | Qualité élevée |
| Q6_K | ~6.5 bits | 0.75x | ⭐⭐⭐⭐⭐ | Presque FP16 |
| Q8_0 | 8 bits | 0.85x | ⭐⭐⭐⭐⭐ | Qualité maximale |
| FP16 | 16 bits | 1.0x | ⭐⭐⭐⭐⭐ | Reference (lourd) |
Sélection automatique par Ollama :
# Par défaut : Q4_K_M (optimal)
ollama run llama3.1
# Spécifier explicitement
ollama run llama3.1:8b-instruct-q8_0 # Qualité max
ollama run llama3.1:8b-instruct-q4_K_M # Défaut
ollama run llama3.1:8b-instruct-q2_K # Ultra-compact
Impact sur les performances
Llama 3.1 8B :
| Quant | Taille | VRAM | Vitesse | Qualité |
|---|---|---|---|---|
| Q2_K | 3.0 GB | 4 GB | 100% | 85% |
| Q4_K_M | 4.7 GB | 6 GB | 95% | 95% |
| Q8_0 | 8.5 GB | 10 GB | 85% | 99% |
| FP16 | 16 GB | 18 GB | 70% | 100% |
Recommandation : Q4_K_M offre le meilleur compromis (95% qualité, 50% taille).
GPU vs CPU
Performances GPU
NVIDIA (CUDA) :
- RTX 3060 12GB : Llama 8B @ ~25 tokens/sec
- RTX 4090 24GB : Llama 70B Q4 @ ~15 tokens/sec
- A100 80GB : Llama 70B FP16 @ ~50 tokens/sec
Apple Silicon (Metal) :
- M1 Max 64GB : Llama 13B @ ~20 tokens/sec
- M2 Ultra 192GB : Llama 70B Q4 @ ~25 tokens/sec
- M3 Max 128GB : Llama 34B @ ~30 tokens/sec
AMD (ROCm) :
- RX 7900 XTX 24GB : Llama 13B @ ~18 tokens/sec
Apple Silicon : Unified memory architecture = excellent pour LLMs ! Un M3 Max 128GB peut charger des modèles impossibles sur GPU NVIDIA de même prix.
Mode CPU uniquement
Si pas de GPU compatible, Ollama fonctionne sur CPU (plus lent mais viable).
# Forcer CPU
OLLAMA_NUM_GPU=0 ollama run llama3.1
# Performance CPU typique (Intel i9-13900K, 32GB RAM)
# Llama 8B Q4 : ~5-8 tokens/sec (utilisable)
# Llama 70B Q4 : ~1-2 tokens/sec (lent mais fonctionne)
Optimisations CPU :
# Threads CPU (par défaut : auto)
OLLAMA_NUM_THREAD=16 ollama run llama3.1
# Contexte réduit pour économiser RAM
ollama run llama3.1 --num-ctx 2048 # Défaut : 4096
Monitoring ressources
# Voir utilisation GPU en temps réel (NVIDIA)
watch -n 1 nvidia-smi
# Mac : Activity Monitor > GPU History
# Linux : htop pour CPU/RAM
htop
Cas d’usage pratiques
1. Chatbot customer support local
import ollama
from flask import Flask, request, jsonify
app = Flask(__name__)
KNOWLEDGE_BASE = """
Politique de retour : 30 jours
Frais de livraison : Gratuit au-dessus de 50€
Support : [email protected]
Horaires : Lundi-Vendredi 9h-18h
"""
@app.route("/chat", methods=["POST"])
def chat():
user_message = request.json.get("message")
# Prompt avec knowledge base
prompt = f"""Contexte : Tu es un assistant customer support.
Base de connaissance :
{KNOWLEDGE_BASE}
Règles :
- Réponds uniquement basé sur la base de connaissance
- Si tu ne sais pas, redirige vers [email protected]
- Sois poli et professionnel
Client : {user_message}
Assistant :"""
response = ollama.generate(
model="mistral",
prompt=prompt
)
return jsonify({"response": response["response"]})
if __name__ == "__main__":
app.run(port=5000)
2. Génération de tests unitaires
def generate_tests(source_code_path):
"""Générer tests unitaires avec Ollama"""
with open(source_code_path) as f:
code = f.read()
prompt = f"""Génère des tests unitaires pytest pour ce code Python :
```python
{code}
Requirements :
- Tests complets (cas normaux + edge cases)
- Docstrings claires
- Fixtures si nécessaire
- Code pytest standard
Réponds uniquement avec le code des tests, rien d’autre."""
response = ollama.generate(
model="codellama:13b",
prompt=prompt,
options={"temperature": 0.2} # Bas pour code consistant
)
# Sauvegarder tests
test_file = source_code_path.replace(".py", "_test.py")
with open(test_file, "w") as f:
f.write(response["response"])
print(f"Tests générés : {test_file}")
Usage
generate_tests(“src/calculator.py”)
Crée src/calculator_test.py
### 3. Résumé automatique de documents
```python
import ollama
from pathlib import Path
def summarize_document(file_path, max_length="medium"):
"""Résumer un document texte"""
content = Path(file_path).read_text()
length_prompts = {
"short": "en 3 phrases",
"medium": "en un paragraphe",
"long": "en plusieurs paragraphes"
}
prompt = f"""Résume ce document {length_prompts[max_length]} :
{content}
Résumé :"""
response = ollama.generate(
model="llama3.1",
prompt=prompt
)
return response["response"]
# Usage
summary = summarize_document("rapport_annuel.txt", max_length="medium")
print(summary)
Conclusion
Ollama démocratise l’accès aux LLMs locaux avec une simplicité remarquable. En quelques commandes, vous exécutez des modèles state-of-the-art sur votre machine.
Points clés :
- Installation facile : Une commande sur Mac/Linux/Windows
- 100+ modèles : Llama, Mistral, Gemma, Qwen, et plus
- API REST : Compatible OpenAI SDK (drop-in replacement)
- Modelfile : Personnalisation system prompts et paramètres
- Quantization auto : Optimisation taille/qualité transparente
- Performance : Excellent sur GPU NVIDIA, Apple Silicon
- Intégrations : LangChain, LlamaIndex, Gradio
Quand utiliser Ollama :
- ✅ Développement et prototypage (coût zéro)
- ✅ Données confidentielles (santé, finance, légal)
- ✅ Applications offline
- ✅ Contrôle total sur l’infrastructure
- ✅ Tests et expérimentation illimités
Quand préférer APIs cloud :
- ❌ Modèles très larges inaccessibles localement (GPT-4, Claude Opus)
- ❌ Infrastructure limitée (pas de GPU, RAM faible)
- ❌ Maintenance et mises à jour automatiques critiques
- ❌ Scaling horizontal massif
L’avenir de l’IA est hybride : APIs cloud pour qualité maximale, modèles locaux pour confidentialité et coûts. Ollama rend cette approche accessible à tous !
Ressources
Articles liés :
Liens officiels :
Communautés :
Modèles GGUF :