Vous voulez un assistant privé qui lit vos PDF sans envoyer le contenu dans le cloud. Ce tutoriel construit la chaîne complète : Ollama pour le modèle, Open WebUI pour l’interface, un embedding multilingue et une base de connaissances. L’exemple fil rouge s’appuie sur des documents publics régionaux (délibérations, guides d’aides) tels qu’une collectivité lilloise ou une association amiénoise pourrait les traiter en interne. Les noms de tags et les libellés de menus changent : on vous montre le geste, puis vous copiez le tag exact du jour.
Ce que l’on va construire
L’architecture tient en quatre briques. Ollama héberge le grand modèle de langage et, selon votre configuration, peut aussi servir un modèle d’embedding. Open WebUI fournit le chat, les comptes, l’upload de documents et le pipeline RAG. Vos fichiers (PDF, textes, notes) restent dans un volume Docker ou un dossier local. Enfin, un modèle personnalisé dans Open WebUI fixe le système prompt, la base Knowledge et les réglages de récupération. Comprendre ce découpage évite de tout mélanger dans un seul conteneur « magique ».
Dans une TPE de Roubaix ou une mairie de Cambrai, le besoin typique est le même : répondre à partir d’un règlement intérieur, d’un guide d’aides ou d’un recueil de délibérations, sans coller ces textes dans un service distant. Le RAG (Retrieval-Augmented Generation) découpe les documents, les indexe, retrouve les passages utiles, puis demande au LLM de rédiger une réponse ancrée dans ces passages. Si la récupération est mauvaise, le modèle invente : d’où l’importance des réglages traités aussi dans optimiser le RAG d’Open WebUI.
- LLM
- Le modèle qui rédige (ici Qwen 3.8 27B via Ollama). Il ne « lit » pas le PDF directement : il reçoit des extraits choisis par le RAG.
- Embedding
- Modèle qui transforme un texte en vecteur pour comparer similarités. Pour le français, privilégiez un embedding multilingue (ex. famille bge-m3) et vérifiez le tag du jour.
- Knowledge
- Dans Open WebUI, collection de documents indexés que vous attachez à un chat ou à un modèle personnalisé.
- Quantification
- Compression des poids (Q4, Q3…) qui réduit la VRAM au prix d’une petite perte de qualité. Ordre de grandeur, pas mesure de labo IAHDF.
Matériel et ordres de grandeur
Pour un dense 27B, comptez plutôt une carte avec de l’ordre de 24 Go de VRAM en quantification moyenne (souvent présentée autour de Q4). Avec 16 Go, une quantification plus agressive (souvent Q3) peut tenir, au prix de plus d’hallucinations et d’un contexte plus serré. Sur Mac Apple Silicon, la mémoire unifiée change la donne : un Mac avec 32 Go ou plus est un ordre de grandeur réaliste pour expérimenter confortablement ; en dessous, ciblez un modèle plus petit ou une quantification plus serrée. Prévoyez aussi de l’ordre de 50 Go de disque pour le modèle, l’embedding, les images Docker et les index.
Ces chiffres sont des ordres de grandeur à ajuster selon la quantification exacte, le contexte demandé et les autres logiciels ouverts. Ils ne remplacent pas un essai sur votre machine. Si votre PC de bureau à Valenciennes n’a que 8 Go de VRAM, ce tutoriel reste utile pour comprendre la chaîne, mais vous choisirez un modèle plus léger (voir quel modèle local selon la machine) avant de monter un RAG sérieux.
Prérequis : Docker et terminal
Vous devez pouvoir ouvrir un terminal, installer Docker Desktop (Windows/Mac) ou le moteur Docker (Linux), et lancer des commandes `docker compose`. Ollama s’installe à part : ce n’est pas un conteneur obligatoire, même si certaines équipes le containerisent aussi. Vérifiez que `docker version` et, après installation, `ollama --version` répondent sans erreur. Sur un portable de mission à Arras, testez d’abord sur le Wi-Fi de confiance : les gros téléchargements saturent vite une connexion partagée.
Si Docker n’est pas encore en place, suivez d’abord installer Open WebUI avec Docker pour valider l’interface seule, puis revenez ici pour le modèle 27B et le RAG. L’ordre inverse (modèle d’abord, interface ensuite) fonctionne aussi : Ollama peut servir en ligne de commande avant que le chat web n’existe.
Pas à pas : de Ollama au RAG opérationnel
Installer Ollama et vérifier le service
Téléchargez Ollama depuis le site officiel, installez-le, puis ouvrez un terminal. Tapez une commande de version pour confirmer que le binaire répond. Sur Windows, laissez le service démarrer avec la session ; sur Linux, vérifiez que le démon écoute bien en local. Ne tirez pas encore le gros modèle : validez d’abord qu’un petit modèle de test se lance, pour isoler les problèmes de proxy, d’antivirus ou de droits disque fréquents en entreprise à Lille ou Douai. Si quelque chose échoue, arrêtez-vous et notez le message exact avant de retenter. Une capture d’écran des logs vaut mieux qu’une reformulation de mémoire, surtout quand un collègue de Douai ou Arras reprendra le dossier le lendemain.
Télécharger Qwen 3.8 27B avec le tag exact
Ouvrez ollama.com/library (ou la fiche Hugging Face du modèle si vous passez par un autre runtime) et copiez le tag publié le jour J pour Qwen 3.8 27B. Les suffixes de quantification et de variante évoluent : ne inventez pas le nom. Lancez ensuite `ollama pull` suivi de ce tag exact. Surveillez l’espace disque pendant le téléchargement. Quand le pull est terminé, un `ollama run` avec le même tag doit ouvrir un prompt interactif : posez une question courte en français pour confirmer que l’inférence démarre.
Déployer Open WebUI avec Docker
Créez un dossier de projet (par exemple open-webui) avec un fichier compose. L’image communautaire connue est ghcr.io/open-webui/open-webui : la version d’image bouge, notez celle que vous épinglez. Montez un volume nommé pour persister chats et bases. Sur la machine hôte où Ollama tourne déjà, configurez l’URL d’API Ollama selon la doc du jour (souvent l’hôte Docker vers le service local). Lancez `docker compose up -d`, puis ouvrez l’interface dans le navigateur sur le port publié.
Créer le compte admin et brancher Ollama
Le premier compte créé devient en général administrateur : choisissez un mot de passe robuste et une adresse que vous contrôlez. Dans les réglages de connexion aux modèles, indiquez l’endpoint Ollama accessible depuis le conteneur. Listez les modèles : Qwen doit apparaître. Définissez-le comme modèle par défaut pour les essais. Si la liste est vide, le conteneur n’atteint pas Ollama (réseau Docker, pare-feu, mauvaise URL) : corrigez avant toute indexation de documents. Gardez un bloc-notes ouvert : commande tapée, résultat attendu, résultat obtenu. Cette trace courte accélère le dépannage et évite de croire qu’« on a déjà essayé » sans preuve.
Choisir l’embedding multilingue
Dans l’administration des documents (libellés variables selon la version), sélectionnez ou tirez un embedding adapté au français. La famille bge-m3 est souvent citée comme candidate multilingue : vérifiez le tag exact disponible via Ollama ou le mécanisme d’embedding d’Open WebUI le jour J. Évitez un embedding purement anglophone sur un corpus de délibérations hauts-de-france. Notez le nom retenu dans un fichier README interne : changer d’embedding plus tard impose souvent de ré-indexer. Vérifiez aussi l’environnement : VPN, proxy, antivirus, espace disque. Beaucoup d’échecs attribués au modèle viennent d’un réseau d’entreprise à Lille ou d’un disque plein après plusieurs pulls.
Créer la Knowledge et importer le corpus
Préparez un corpus propre : PDF textuels plutôt que scans illisibles, noms de fichiers parlants, pas de doublons. Exemple HdF : un guide d’aides publiques, un règlement de salle, trois délibérations anonymisées. Dans Workspace > Knowledge (ou équivalent), créez une base, importez les fichiers, laissez l’indexation finir. Vérifiez qu’aucun document n’est resté en erreur. Pour un atelier à Amiens, commencez avec cinq à dix fichiers : un corpus trop gros masque les défauts de chunking. Quand l’étape réussit, marquez-la explicitement dans votre checklist. Les bascules trop rapides vers l’étape suivante masquent des configs demi-installées qui cassent plus tard en démo publique.
Lier un modèle personnalisé et régler le RAG
Créez un modèle personnalisé qui pointe vers Qwen, attachez la Knowledge, et rédigez un système prompt du type : répondre uniquement à partir des extraits fournis, citer le nom du fichier, dire « je ne sais pas » si l’info manque. Ajustez ensuite taille de chunk, chevauchement, top-k, recherche hybride et reranker si proposés. Les détails fins sont dans réglages RAG Open WebUI ; ici, retenez qu’un chunk trop grand noie le signal, un trop petit casse les phrases juridiques.
Tester, documenter, ouvrir à l’équipe
Préparez une liste d’une vingtaine de questions : factuelles (montant, date, article), comparatives, et pièges (question hors corpus). Notez pour chaque question si la réponse s’appuie sur le bon extrait. Quand le taux d’échec baisse, créez des comptes utilisateurs sans droits admin, expliquez quoi ne pas indexer, et sauvegardez le volume Docker. Sur un NAS d’association à Dunkerque, planifiez une sauvegarde hors machine avant le premier usage réel. Si vous travaillez à deux, faites reformuler le geste par la personne la moins technique. Ce qui n’est pas dit clairement maintenant reviendra en ticket flou après l’atelier.
Installer Ollama et tirer Qwen 3.8 27B
Ollama centralise le téléchargement, la quantification proposée par la fiche modèle, et l’API locale. Après installation, le réflexe est de consulter la bibliothèque officielle plutôt que de recopier un tag vu dans un vieux tutoriel. Pour Qwen 3.8 27B, cherchez la fiche, lisez la quantification proposée et l’espace disque annoncé, puis lancez le pull. Un échec fréquent en entreprise est le proxy HTTPS : configurez les variables d’environnement proxy avant le pull, sinon le téléchargement se coupe à 99 %.
# 1. Vérifier Ollama ollama --version # 2. Copier le tag EXACT depuis https://ollama.com/library (exemple de forme) ollama pull TAG_EXACT_QWEN_3_8_27B # 3. Essai conversationnel ollama run TAG_EXACT_QWEN_3_8_27B # 4. Lister / retirer si besoin ollama list # ollama rm TAG_EXACT_QWEN_3_8_27B
Si le modèle charge puis le ventilateur sature sans réponse, réduisez le contexte dans les options Ollama ou Open WebUI, fermez les applications gourmandes, ou passez à une quantification plus légère. Sur une machine de démonstration à Lens, gardez un second tag plus petit pour les ateliers publics : le 27B reste pour les postes techniques.
Installer Open WebUI (Docker)
Open WebUI apporte comptes, historique, outils et pipeline documents. L’installation recommandée pour ce tutoriel est Docker Compose avec volume persistant. Épinglez une version d’image plutôt que `latest` en production artisanale : vous saurez quoi rollback. La documentation du dépôt évolue : en cas de doute sur une variable d’environnement, lisez le README de la version que vous avez choisie, pas un article daté.
# Exemple de forme — vérifiez l’image et les variables sur le dépôt Open WebUI du jour
services:
open-webui:
image: ghcr.io/open-webui/open-webui:MAIN_OU_TAG_EPINGLE
ports:
- "3000:8080"
volumes:
- open-webui-data:/app/backend/data
environment:
# Indiquez l’URL Ollama joignable DEPUIS le conteneur
# (souvent host.docker.internal sur Docker Desktop)
- OLLAMA_BASE_URL=http://host.docker.internal:11434
restart: unless-stopped
volumes:
open-webui-data:Démarrez avec `docker compose up -d`, consultez les logs si la page ne répond pas, puis créez le compte admin. Tant que la liste des modèles Ollama est vide, ne touchez pas aux documents : vous perdriez du temps à indexer pour un chat muet. Le tutoriel Open WebUI Docker détaille comptes, mises à jour et sauvegarde du volume.
Choisir l’embedding pour le français
Le LLM peut être excellent et le RAG médiocre si l’embedding comprend mal le français administratif. Orientations prudentes : un modèle multilingue explicitement documenté pour le retrieval ; cohérence entre la langue du corpus et celle des questions ; éviter de changer d’embedding au milieu d’un projet sans ré-indexation. Le comparatif qualitatif embeddings pour RAG français vous aide à trancher entre familles (bge-m3, e5 multilingue, nomic-embed, etc.) sans chiffres inventés.
Dans Open WebUI, le menu Admin dédié aux documents (le libellé exact varie) est l’endroit où se règle l’engine d’embedding. Si l’interface propose de télécharger via Ollama, utilisez encore une fois le tag affiché le jour J. Testez avec une phrase typique de votre corpus (« critère d’éligibilité », « délibération du conseil ») et vérifiez que des voisins sémantiques remontent.
Créer la base de connaissances
Nettoyez avant d’uploader. Retirez les pages scannées sans OCR, les fichiers protégés par mot de passe, les brouillons obsolètes. Pour une démo régionale : prenez des documents déjà publics (guide d’aides, FAQ d’une collectivité, compte rendu publié). Anonymisez tout ce qui ne l’est pas. Nommez les fichiers `2024-guide-aides-habitat.pdf` plutôt que `scan2.pdf` : les citations dans la réponse seront lisibles pour un collègue de Beauvais qui ne connaît pas votre disque.
Importez par lots. Après chaque lot, posez deux questions dont vous connaissez la réponse exacte. Si le modèle répond juste sur le premier lot et se trompe après le second, vous avez probablement un problème de chunking ou de top-k, pas de « mauvais LLM ». Gardez une feuille de calcul simple : question, fichier attendu, OK/KO, remarque.
Régler le RAG (chunks, top-k, hybride, reranker)
La taille des morceaux (chunk size) et le chevauchement (overlap) déterminent si un article de règlement reste intact ou est coupé au milieu d’une condition. Le top-k contrôle combien d’extraits le LLM voit. La recherche hybride mélange similarité vectorielle et mots-clés (utile pour les acronymes locaux). Un reranker, s’il est disponible, réordonne les candidats : coûteux en calcul, souvent utile quand le premier jet est bruyant.
Ne changez qu’un paramètre à la fois, avec votre batterie de vingt questions. L’article réglages RAG Open WebUI développe chaque curseur. Ici, la règle d’or : si les bons passages n’apparaissent pas dans les sources affichées, inutile de « mieux prompter » le 27B — réparez la récupération d’abord.
Tester avant d’ouvrir à l’équipe
Invitez une personne métier (secrétaire de mairie à Abbeville, responsable RH d’une PME de Saint-Quentin) à poser ses vraies questions sans regarder vos notes. Observez où elle reformule. Les échecs métier révèlent souvent un vocabulaire absent de l’index (synonymes, noms de dispositifs locaux). Enrichissez le corpus ou ajoutez un petit glossaire interne indexé avec le reste.
Mesurez aussi le confort : temps de réponse, bruit ventilateur, stabilité après une heure. Un outil trop lent ne sera pas adopté, même s’il est privé. Si le 27B est trop lourd pour le poste partagé, gardez-le pour la rédaction finale et utilisez un modèle plus petit pour le brouillon, ou réduisez le contexte.
Ouvrir à l’équipe sans se tirer une balle
Créez des comptes non admin. Documentez en une page : URL interne, qui contacter, quels dossiers sont autorisés à l’indexation, rappel données sensibles. Désactivez l’exposition Internet : accès VPN ou réseau local uniquement. Planifiez la mise à jour d’image Open WebUI et le re-pull éventuel du modèle. Une association de Boulogne qui perd son volume Docker perd chats et index : la sauvegarde fait partie du déploiement, pas de la « phase 2 ».
- Volume Docker sauvegardé (et test de restauration une fois).
- Liste des tags Ollama et version d’image Open WebUI écrits dans un README.
- Compte admin distinct des comptes métiers.
- Corpus versionné (dossier daté) pour savoir quoi ré-indexer.
- Procédure de retrait d’un document sensible publié par erreur.
Dépannage concret
Modèles invisibles dans Open WebUI : le conteneur n’atteint pas Ollama. Testez depuis le conteneur (ou ajustez host.docker.internal / IP de l’hôte). Réponses hors sujet avec sources vides : embedding ou Knowledge non liés au chat. Réponses hors sujet avec sources présentes mais mauvaises : chunking ou top-k. Port déjà utilisé : changez le mapping de ports. Disque plein au pull : nettoyez les anciens tags avec `ollama rm`. Sous Windows, un redémarrage de Docker Desktop résout encore trop souvent des états réseau bizarres après veille.
| Symptôme | Vérifier d’abord |
|---|---|
| Liste modèles vide | URL Ollama vue du conteneur, service Ollama actif |
| Upload OK, réponses génériques | Knowledge attachée au modèle / chat |
| Bonne source, mauvaise réponse | Prompt système + température ; puis modèle |
| Lenteur extrême | Quantification, contexte, autres process GPU |
| Indexation qui échoue | PDF scanné, fichier verrouillé, droits volume |
Questions fréquentes
Puis-je faire la même chose sans GPU NVIDIA ?
Oui, avec des limites de confort. Un Mac Apple Silicon avec assez de mémoire unifiée, un GPU AMD sous ROCm ou Vulkan, ou un gros CPU peuvent servir, surtout avec une quantification plus légère ou un modèle plus petit. Le geste RAG reste identique. Consultez Mac Apple Silicon ou GPU AMD selon votre matériel, et gardez un protocole de questions pour juger si la latence reste acceptable pour vos collègues. Pour trancher chez vous, reproduisez le scénario sur la machine réelle avec un protocole court écrit à l’avance. Une conclusion d’atelier à Roubaix ne se transfère pas telle quelle sur un portable différent.
Qwen 3.8 27B est-il obligatoire pour un RAG utile ?
Non. Le 27B est un bon candidat dense quand vous avez la mémoire, mais un modèle plus petit bien alimenté par de bons extraits bat souvent un gros modèle mal récupéré. Commencez par valider la chaîne RAG avec un modèle léger si votre machine souffre, puis montez en taille. La qualité du corpus et de l’embedding pèsent autant que le nombre de paramètres marketing. Gardez une fiche datée : question, hypothèse, test, résultat. Cette hygiène évite les débats sans fin et construit une mémoire utile pour la prochaine personne référente.
Dois-je indexer des documents confidentiels ?
Seulement si la machine, les comptes, les sauvegardes et le réseau sont à la hauteur du secret. Un RAG local sur un laptop familial partagé n’est pas une salle serveur. Pour des données RH ou santé, demandez un avis interne et isolez l’instance. En cas de doute, travaillez d’abord sur des documents déjà publics, comme des guides d’aides publiés par une collectivité des Hauts-de-France. Si deux camps s’opposent dans l’équipe, imposez un A/B sur la même batterie de prompts plutôt qu’un vote d’opinion. Le terrain tranche plus vite que les digressions de salon.
Pourquoi le modèle « invente » encore avec le RAG ?
Souvent parce que les extraits fournis sont hors sujet, trop courts, ou absents, et que le prompt système n’interdit pas de combler les trous. Affichez les sources, exigez « je ne sais pas », baissez la créativité, et réparez chunks / top-k / embedding. Si les sources sont bonnes et la réponse fausse, changez de modèle ou resserrez le prompt. L’outil réglages RAG détaille ces curseurs un par un. Méfiez-vous des captures hors contexte trouvées en ligne. Sans connaître quantification, contexte et charge machine, un chiffre spectaculaire ne dit rien de votre poste à Beauvais.
Comment mettre à jour sans tout casser ?
Épinglez versions d’image et tags. Sauvegardez le volume. Montez la mise à jour sur une machine clone ou un second compose. Rejouez vos vingt questions. Seulement ensuite, basculez l’équipe. Documentez le tag Ollama et la version Open WebUI dans le même README : dans six mois, vous saurez ce qui « marchait à Lens en septembre 2026 ». Quand le problème semble intermittent, journalisez l’heure, la température perçue et les autres apps ouvertes. Les coïncidences thermiques et mémoire sont fréquentes sur machines partagées.
