Ollama expose une API sur http://localhost:11434/api et maintient une bibliothèque Python officielle. Vérifiez d’abord qu’Ollama fonctionne et que le modèle choisi est installé.
ollama pull gemma3
python -m venv .venv
source .venv/bin/activate
pip install ollamaEnvoyer un message
from ollama import chat
response = chat(
model="gemma3",
messages=[
{"role": "system", "content": "Réponds en français et reste concis."},
{"role": "user", "content": "Explique ce qu’est une API REST."},
],
)
print(response["message"]["content"])Le nom du modèle doit correspondre à ollama list. Ne supposez pas qu’un modèle est présent : documentez la commande de téléchargement dans votre projet.
Diffuser progressivement la réponse
Le streaming réduit le délai perçu pour une réponse longue :
from ollama import chat
stream = chat(
model="gemma3",
messages=[{"role": "user", "content": "Donne trois conseils de revue de code."}],
stream=True,
)
for chunk in stream:
print(chunk["message"]["content"], end="", flush=True)Utiliser un client configuré
Pour cibler une autre instance autorisée, créez un client explicite. Conservez l’adresse dans une variable d’environnement et imposez un délai côté application.
import os
from ollama import Client
client = Client(host=os.getenv("OLLAMA_HOST", "http://localhost:11434"))
response = client.chat(
model="gemma3",
messages=[{"role": "user", "content": "Réponds par oui ou non : 2 est pair."}],
)
print(response.message.content)Gérer les erreurs
Traitez séparément l’indisponibilité du serveur, l’absence du modèle et les délais. N’effectuez pas des reprises infinies : limitez le nombre de tentatives et journalisez un identifiant de requête plutôt que les données sensibles.
Tester sans dépendre d’une réponse exacte
Une sortie de modèle peut varier. Testez la présence des champs attendus, le respect d’un schéma structuré et les erreurs de transport ; évitez d’asserter une phrase exacte. Pour une application critique, ajoutez un jeu d’évaluation plutôt qu’un seul prompt de démonstration.
Vous pouvez maintenant encapsuler cet appel derrière une fonction métier, ou utiliser l’intégration LangChain si votre application a besoin de chaînes, d’outils ou de retrievers.