Article original : https://acceleratingutopia.com/how-to-local-llm-private-docs/
La plupart des outils d'IA vous obligent à envoyer vos prompts et vos fichiers à des serveurs tiers. C'est inacceptable si vos données incluent des journaux intimes, des notes de recherche ou des documents professionnels sensibles (contrats, présentations de conseil d'administration, fichiers RH, données financières). La bonne nouvelle : vous pouvez exécuter des LLM performants localement (sur un ordinateur portable ou votre propre serveur) et interroger vos documents sans envoyer un seul octet dans le cloud.
Dans ce tutoriel, vous apprendrez à exécuter un LLM de manière locale et privée, afin de pouvoir rechercher et discuter avec des journaux et des documents professionnels sensibles sur votre propre machine. Nous installerons Ollama et OpenWebUI, choisirons un modèle adapté à votre matériel, activerons la recherche de documents privés avec nomic-embed-text, et créerons une base de connaissances locale pour que tout reste sur le disque.
Table des matières
Prérequis
Vous aurez besoin d'un terminal (tous les systèmes — Windows, Mac, Linux — en incluent un, et vous pouvez trouver le vôtre avec une recherche rapide), et soit de Python et pip, soit de Docker, selon votre méthode d'installation préférée pour OpenWebUI.
Installation
Vous aurez besoin d' Ollama et d' OpenWebUI. Ollama exécute les modèles, tandis qu'OpenWebUI vous offre une interface de navigation pour interagir avec votre LLM local, comme vous le feriez avec ChatGPT.
Étape 1 : Installer Ollama
Téléchargez et installez Ollama depuis son site officiel. Des installateurs sont disponibles pour macOS, Linux et Windows. Une fois installé, vérifiez qu'il fonctionne en ouvrant un terminal et en exécutant :
ollama list
Si Ollama est en cours d'exécution, cela renverra une liste de modèles actifs (ou une liste vide).
Étape 2 : Installer OpenWebUI
Vous pouvez installer OpenWebUI soit avec Python (pip), soit avec Docker. Ici, nous allons montrer comment le faire avec pip, mais vous pouvez trouver les instructions pour Docker sur la documentation officielle d'openwebui.
Installez OpenWebUI avec la commande suivante :
pip install open-webui
Cela fonctionne sur macOS, Linux et Windows, tant que vous avez Python ≥ 3.9 installé.
Ensuite, démarrez le serveur :
open-webui serve
Puis ouvrez votre navigateur et allez sur :
http://localhost:8080
Étape 3 : Installer un modèle
Choisissez un modèle dans la liste des modèles Ollama et téléchargez-le localement en copiant la commande fournie.

Par exemple :
ollama pull gemma3:4b
Si vous n'êtes pas sûr du modèle que votre machine peut supporter, demandez à une IA d'en recommander un en fonction de votre matériel. Les modèles plus petits (1B–4B) sont plus sûrs sur les ordinateurs portables.
Je recommanderais Gemma3 comme point de départ (vous pouvez télécharger plusieurs modèles et basculer facilement de l'un à l'autre). Choisissez le nombre de paramètres à la fin (":4b", ":1b", etc.) en vous basant sur ce guide :
Niveau 1 (petits ordinateurs portables ou ordinateurs peu puissants) : RAM ≤ 8 Go ou pas de GPU → 1B–2B.
Niveau 2 : RAM 16 Go, GPU faible → 2B–4B.
Niveau 3 : RAM ≥ 16 Go, 6–8 Go de VRAM → 4B–9B.
Niveau 4 : RAM ≥ 32 Go, 12 Go+ de VRAM → 12B+.
Une fois que vous avez installé Ollama et le modèle souhaité, confirmez qu'ils sont actifs en exécutant ollama list dans le terminal :

Lancez WebOpenUI pour démarrer l'interface du navigateur avec :
open-webui serve
Puis rendez-vous sur http://localhost:8080/. Vous êtes maintenant prêt à commencer à utiliser votre LLM localement !
Note : il vous demandera des identifiants de connexion, mais ceux-ci n'ont pas vraiment d'importance si vous avez l'intention de l'utiliser uniquement localement.

Paramètres pour les documents
Nous allons maintenant configurer tout ce dont nous avons besoin pour interagir avec nos documents locaux. Tout d'abord, nous devons installer le modèle « nomic-embed-text » pour traiter nos documents. Installez-le avec :
ollama pull nomic-embed-text
Note : Si vous vous demandez pourquoi nous avons besoin d'un autre modèle (nomic-embed-text) en plus de notre modèle principal :
Le modèle d'incorporation (
nomic-embed-text) transforme chaque segment de texte de vos documents en un vecteur numérique afin qu'OpenWebUI puisse trouver rapidement des segments sémantiquement similaires lorsque vous posez une question.Le modèle de chat (par exemple
gemma3:1b) reçoit votre question ainsi que ces segments récupérés comme contexte et génère la réponse en langage naturel.
Ensuite, vous devriez activer la fonction « mémoire » si vous voulez que le LLM se souvienne du contexte de vos conversations passées dans les futures.
Téléchargez la fonction de mémoire adaptative ici. Les fonctions sont comme des plug-ins.

Nous allons maintenant mettre à jour nos paramètres pour activer ces fonctionnalités. Cliquez sur votre nom dans le coin inférieur gauche, puis sur « Paramètres ».

Cliquez sur le premier, puis allez dans « Personnalisation » et activez « Mémoire ».

Nous allons maintenant accéder à l'autre panneau de paramètres (« Panneau d'administration »). Cliquez à nouveau sur votre nom dans le coin inférieur gauche et allez dans Panneau d'administration → Paramètres → Documents.

Dans cette section (Panneau d'administration → Paramètres → Documents), trouvez la section « Embedding », allez dans « Embedding Model Engine » et choisissez Ollama (trouvez le menu déroulant à droite). Laissez la clé API vide.
Maintenant, sous « Embedding Model », écrivez nomic-embed-text. Allez ensuite dans « Retrieval » → activez « Full Context Mode ».
Paramètres de découpage (chunking)
Vous devez également définir la taille des segments (chunk size) et le chevauchement (overlap). OpenWebUI divise les documents en segments plus petits avant de les indexer, car les modèles ne peuvent pas incorporer ou récupérer des textes très longs d'un seul tenant.
Une bonne valeur par défaut est de 128 à 512 tokens par segment, avec un chevauchement de 10 à 20 %. Les segments plus grands préservent davantage de contexte mais sont plus lents et plus gourmands en mémoire, tandis que les segments plus petits sont plus rapides mais peuvent perdre le sens global. Le chevauchement aide à éviter que le contexte important ne soit coupé lors de la division du texte.
Voici un tableau indicatif, mais je recommande d'obtenir les valeurs recommandées pour votre cas d'utilisation et votre configuration spécifiques en les partageant (y compris le modèle de GPU ou d'ordinateur portable, le stockage, la RAM, etc.) avec un LLM comme ChatGPT ou Claude, car changer les valeurs de découpage/chevauchement plus tard nécessite de retélécharger les documents.
Segments/chevauchement suggérés par niveau
| Niveau / scénario | Matériel typique | Taille du segment (tokens) | Chevauchement (%) | Notes |
| Niveau 1 – contraint | ≤8 Go RAM, pas de GPU ou GPU faible | 128–256 | 10–15 | Priorise la vitesse et la faible utilisation de la mémoire. |
| Niveau 2 – moyen | 16 Go RAM, GPU modeste ou CPU puissant | 256–384 | 15–20 | Équilibre entre contexte et performance. |
| Niveau 3 – confortable | ≥16 Go RAM, 6–8 Go VRAM | 384–512 | 15–20 | Plus de sémantique par segment, reste pratique. |
| PDF techniques denses / docs juridiques | Tous, mais surtout Niveaux 2–3 | 384–512 | 15–20 | Garde les paragraphes et les arguments intacts. |
| Notes courtes, tickets, e-mails | Tous | 128–256 | 10–15 | Les éléments sont petits, les grands segments ne sont pas nécessaires. |
| Requêtes très longues, besoin de nombreux segments récupérés | Tous avec une fenêtre de contexte plus large | 256–384 | 10–15 | Les segments plus petits permettent d'insérer plus de morceaux dans le contexte. |
Comment télécharger vos documents
Maintenant, l'étape finale : le téléchargement de vos documents ! Allez dans « Espace de travail » dans le panneau latéral, puis « Connaissance », et créez une nouvelle collection (base de données). Vous pouvez commencer à télécharger des fichiers ici.

Ensuite, dans « Espace de travail », passez à l'onglet « Modèles » et créez un nouveau modèle personnalisé. Créer un modèle personnalisé et y attacher votre base de connaissances indique à OpenWebUI de rechercher automatiquement dans votre collection de documents et d'inclure les segments les plus pertinents comme contexte chaque fois que vous posez une question.

Ici, assurez-vous de sélectionner votre modèle (dans mon cas « gemma3:1b ») et d'attacher votre base de connaissances.


(Optionnel) Ajouter une instruction système
Lors de la création de votre modèle personnalisé dans Espace de travail → Modèles, vous pouvez définir une instruction système (system prompt) que le modèle utilisera pour le contexte tout au long de vos conversations.
Voici quelques exemples d'informations que vous pourriez vouloir ajouter :
contexte sur vous-même ("Je suis un étudiant de 20 ans en bio-ingénierie intéressé par...")
votre style de communication préféré ("sans fioritures", "sois direct", "sois analytique"...)
contexte sur la structure de vos données
Exemple d'instruction système :
Tu es un assistant réfléchi et analytique qui m'aide à explorer des schémas et des idées dans mes journaux personnels. Sois direct, évite les spéculations et distingue clairement les faits issus des documents de l'interprétation.
Cette instruction s'appliquera automatiquement à chaque discussion utilisant ce modèle personnalisé, aidant à garder des réponses cohérentes et alignées avec vos objectifs.
Comment exécuter votre LLM localement
Ouvrez maintenant une nouvelle discussion et assurez-vous de sélectionner votre modèle personnalisé :

Vous êtes maintenant prêt à discuter avec vos propres documents dans un environnement local privé !
Conclusion
Vous disposez maintenant d'une pile LLM privée (Ollama pour les modèles, OpenWebUI pour l'interface utilisateur et nomic-embed-text pour les incorporations) reliée à votre base de connaissances sur disque. Vos journaux et documents professionnels restent locaux ; rien n'est envoyé à des tiers. Les réglages principaux sont simples : choisissez un modèle adapté à votre matériel, activez la mémoire et la récupération du contexte complet, utilisez un découpage/chevauchement raisonnable, et vérifiez la console lorsque les exécutions stagnent.
Si vous avez besoin de plus de puissance, déployez la même configuration sur votre propre serveur tout en conservant les garanties de confidentialité. À partir de là, itérez sur le choix du modèle, le découpage et les instructions, et ajoutez les fonctions optionnelles si vous avez besoin d'une visibilité plus profonde lors de travaux longs.