RAG local avec LM Studio : discuter avec vos documents
LM Studio embarque depuis la version 0.3 une fonction « Chat with Documents » qui fait tourner un RAG complet en local : indexation, embeddings, retrieval et génération, sans qu'un seul octet ne sorte de votre machine. C'est probablement la voie la plus rapide pour passer d'un chat ChatGPT-like à un assistant qui répond à partir de vos PDF, contrats ou notes. Ce guide montre comment l'activer, ce qu'elle sait faire, là où elle plafonne, et quand il faut basculer vers AnythingLLM ou une stack Python.
#Pourquoi LM Studio pour le RAG
Faire du RAG local revient classiquement à empiler quatre briques : un parseur de fichiers, un modèle d'embeddings, une base vectorielle, et un LLM de génération. La majorité des tutoriels passent par Python + LlamaIndex + ChromaDB + Ollama. C'est puissant mais c'est aussi quatre dépendances, un environnement à gérer, et un script à maintenir.
LM Studio cache tout ça derrière un trombone. Vous chargez un modèle de génération (Mistral 7B, Llama 3.1 8B, Qwen 2.5…), vous chargez un modèle d'embeddings, vous glissez un PDF dans la conversation, et vous posez votre question. L'interface se charge du chunking, de l'indexation en mémoire et de l'injection des passages pertinents dans le prompt.
- Aucune ligne de code
- Tout passe par la GUI. C'est le chemin le plus court entre « j'ai un dossier de PDF » et « je discute avec ».
- 100 % offline
- Embeddings, retrieval, génération : tout tourne sur votre GPU ou CPU. Aucune télémétrie sur le contenu des documents.
- Compatible OpenAI
- Le serveur local sur le port 1234 reste accessible. Vous pouvez utiliser le RAG côté GUI et brancher en parallèle un script sur le même modèle.
#Prérequis
- LM Studio 0.3 ou plus récent
- La fonction Chat with Documents est apparue en 0.3 et a été enrichie depuis. Vérifiez votre version dans Settings → About. Sur un LM Studio plus ancien, mettez à jour avant d'aller plus loin.
- Un LLM de génération chargé
- Mistral 7B Instruct v0.3 Q4_K_M, Llama 3.1 8B Q4_K_M ou Qwen 2.5 7B Q4_K_M font de bons défauts. Évitez les modèles à fenêtre de contexte courte (2k-4k) — vous serez bridé sur le nombre de passages que LM Studio peut injecter.
- Un modèle d'embeddings
- Nécessaire et distinct du LLM. nomic-embed-text-v1.5 (137M, ~80 Mo en Q4) est le défaut recommandé par LM Studio. mxbai-embed-large (335M) si vous avez de la marge. Pour du contenu français exclusif, multilingual-e5-large est plus pertinent.
- VRAM ou RAM
- Comptez la taille du LLM + ~200 Mo pour le modèle d'embeddings + 1-2 Go pour l'index en mémoire d'un dossier moyen. Sur un 12 Go de VRAM, un 7B Q4 + nomic-embed laisse environ 5 Go pour l'index et le contexte.
- Fenêtre de contexte ≥ 8192
- Réglez le Context Length du LLM à 8192 minimum, 16384 idéalement, depuis le panneau droit du chat. En dessous, LM Studio truncate les passages récupérés et la réponse perd en qualité.
#1. Activer Chat with Documents
Il n'y a rien à activer au sens strict — c'est une fonctionnalité native du chat. Il suffit de fournir un document à une conversation pour que LM Studio lance le pipeline RAG en arrière-plan.
- 01Ouvrez un nouveau chatOnglet Chat dans la sidebar, puis bouton + en haut pour créer une conversation. Vérifiez qu'un LLM est bien chargé dans le menu déroulant du haut. Si rien n'est chargé, sélectionnez votre modèle de génération et attendez que la VRAM se remplisse.
- 02Glissez votre fichier dans la zone de saisieDrag-and-drop d'un PDF, DOCX, TXT ou MD directement dans le champ de message en bas. Une vignette apparaît au-dessus du champ avec le nom et la taille du fichier. Vous pouvez en attacher plusieurs d'affilée.
- 03Posez votre questionTapez votre question normalement, comme dans un chat classique. LM Studio détecte la présence du document, le chunke, l'encode, recherche les passages pertinents, et les injecte dans le prompt — tout cela en 1-5 secondes selon la taille.
- 04Lisez la réponse et les sourcesLe modèle répond en s'appuyant sur les passages retrouvés. Selon le LLM utilisé, il citera les extraits ou non. Pour forcer la citation, ajoutez « Cite les passages exacts du document » dans votre question.
#2. Le modèle d'embeddings
Le modèle d'embeddings est ce qui transforme un morceau de texte en vecteur de nombres. La qualité du retrieval — donc la qualité finale du RAG — dépend directement de ce modèle. Beaucoup plus que du LLM de génération, contrairement à ce qu'on imagine au début.
- 01Téléchargez un modèle d'embeddingsOnglet Discover, filtrez par « Text Embedding » dans la colonne de gauche. nomic-embed-text-v1.5 est proposé en bonne place — c'est le défaut sain. Téléchargez la variante Q4_K_M (~80 Mo) ou Q8_0 (~140 Mo) si vous tenez à la qualité maximale.
- 02Vérifiez qu'il est détectéSettings → My Models → onglet Embeddings. Le modèle doit y apparaître. Si LM Studio ne le voit pas dans cet onglet alors qu'il est téléchargé, c'est qu'il n'a pas été reconnu comme un modèle d'embeddings — vérifiez les tags Hugging Face ou re-téléchargez via Discover.
- 03Sélectionnez-le dans le chatQuand un document est attaché à un chat, LM Studio affiche en bas de la conversation le nom du modèle d'embeddings utilisé. Cliquez dessus pour changer. Le choix est persisté par chat — pratique pour comparer nomic et multilingual-e5 sur le même document.
- nomic-embed-text-v1.5
- 137M paramètres, 768 dimensions, contexte 8192 tokens. Excellent défaut anglais, correct en français. Recommandé par LM Studio.
- mxbai-embed-large-v1
- 335M, 1024 dimensions. Meilleur classement sur MTEB anglais, mais 3× plus lent et 3× plus lourd. Pertinent si la qualité du retrieval est limitante.
- multilingual-e5-large
- 560M, 1024 dimensions. Le meilleur choix si vos documents sont en français ou multilingues. Demande de préfixer les requêtes par « query: » et les passages par « passage: », ce que LM Studio gère automatiquement.
- bge-large-en-v1.5
- 335M, 1024 dimensions. Excellent en anglais pur, à fuir pour du français.
#3. Formats et taille de fichiers supportés
LM Studio gère un sous-ensemble pragmatique des formats courants. Pas d'OCR sur les PDF scannés, pas de parsing de tableaux complexes, pas d'import direct depuis une URL — il faut connaître ces limites avant d'attendre trop.
- PDF (texte natif)
- Pris en charge. Les PDF générés depuis Word, Google Docs ou LaTeX passent bien. Les PDF scannés sans couche OCR ne sont pas extractibles — passez-les par ocrmypdf ou Tesseract en amont.
- DOCX
- Pris en charge. La mise en forme est ignorée, le texte est extrait à plat. Tableaux et images perdus.
- TXT et MD
- Pris en charge nativement, c'est le format idéal. Le Markdown garde sa structure (titres, listes) qui aide au chunking.
- Code source (.py, .js, .ts…)
- Traité comme du texte. Fonctionne, mais pour discuter avec un repo entier, préférez Continue.dev ou un outil pensé pour le code.
- CSV, XLSX, JSON, HTML, EPUB
- Pas de support officiel à l'heure actuelle. Convertissez en TXT ou MD via pandoc, csvkit ou un script avant import.
- Taille maximale par fichier
- Pas de limite stricte annoncée. En pratique, comptez 50-100 Mo par PDF maximum côté GUI — au-delà, le chunking devient lent et la RAM monte vite.
#4. Tester avec un document réel
Le meilleur test est un document que vous connaissez. Prenez un PDF d'une vingtaine de pages — un manuel utilisateur, un rapport, un contrat — et posez d'abord des questions dont vous connaissez la réponse pour calibrer la confiance dans le système.
- Température basse
- Pour du RAG, descendez la température à 0.1-0.3 dans le panneau droit. Le but est de coller aux passages, pas de créer.
- System prompt explicite
- « Tu réponds uniquement à partir des extraits fournis. Si l'information n'est pas présente, dis-le clairement. Cite les passages exacts entre guillemets. » Ce simple ajout divise les hallucinations par 3.
- Question structurée
- « Quel est le délai de préavis ? Cite la clause exacte. » est plus utile que « parle-moi du préavis ». La citation force le modèle à rester ancré.
#Limites vs AnythingLLM
LM Studio fait du RAG « jetable » — par conversation, sans persistance entre chats, sans réglages fins. C'est volontaire : la fonction est pensée pour une consultation ponctuelle, pas pour une base de connaissances. Dès que vous voulez plus, AnythingLLM (gratuit, open source, même esprit GUI) prend le relais.
- Workspaces persistants
- AnythingLLM stocke vos documents dans des workspaces réutilisables. Vous indexez une fois 200 PDF, et tous vos chats du workspace y ont accès. LM Studio reindexe à chaque nouveau chat.
- Citations cliquables
- AnythingLLM affiche les sources avec un lien vers le passage exact. LM Studio se contente d'injecter le passage dans le prompt — le modèle peut citer ou non, à sa guise.
- Réglages RAG exposés
- Top K, taille de chunk, seuil de similarité, modèle d'embeddings : tout est paramétrable dans AnythingLLM. LM Studio gère ça en boîte noire avec des défauts raisonnables.
- Bases vectorielles externes
- AnythingLLM se branche sur ChromaDB, Qdrant, Pinecone, Weaviate. LM Studio garde tout en mémoire dans le processus, ce qui le limite à des corpus modestes.
- Multi-utilisateurs
- AnythingLLM a une notion d'utilisateurs et de partage de workspaces. LM Studio est mono-utilisateur par design.
- Connecteurs sources
- AnythingLLM peut ingérer depuis URL, Confluence, GitHub, YouTube transcripts. LM Studio se limite au drag-and-drop de fichiers.
#Quand passer à une stack Python
Il y a un moment où la GUI plafonne et où coder devient plus simple que contourner. Les signaux qui doivent vous faire passer à du Python + LlamaIndex (ou Haystack) :
- Chunking structure-aware
- Vos documents ont une structure forte (sections juridiques, code, articles scientifiques) que le chunking naïf casse. Un splitter Markdown-aware ou un parser docling fait la différence.
- Recherche hybride
- Vous voulez combiner vectoriel (sémantique) et BM25 (lexical) pour ne pas rater les termes exacts (numéros de clause, noms de variables, identifiants). Aucune GUI ne fait ça nativement aujourd'hui.
- Reranking
- Vous ajoutez un cross-encoder (BAAI/bge-reranker-v2-m3) pour réordonner les 20 premiers résultats. +15 % de pertinence, mais ça se code.
- Métadonnées et filtrage
- « Cherche uniquement dans les contrats signés en 2024 ». Nécessite des métadonnées par chunk et un filtre lors de la requête.
- Pipeline d'ingestion automatisé
- Un dossier surveillé, un cron, un webhook qui reindexe à chaque nouveau fichier. Là, on quitte définitivement la GUI.
- Évaluation
- Mesurer la qualité du retrieval sur 50 questions de référence. Sans Python, vous tirez à l'aveugle.
Bonne nouvelle : LM Studio peut rester en façade pendant que Python tourne le pipeline. Le serveur OpenAI-compatible sur localhost:1234 est consommable par LlamaIndex en deux lignes — vous gardez LM Studio pour le chat exploratoire et vous codez le pipeline derrière.
#Pour aller plus loin
Chat with Documents couvre 80 % des besoins d'un usage perso ou équipe restreinte. Les directions logiques après ce premier RAG :
- Comprendre les mécanismes
- Le guide RAG local : introduction détaille chunking, embeddings, retrieval et les pièges qu'aucune GUI ne montre. Lecture utile avant de toucher aux réglages.
- Choisir un meilleur modèle d'embeddings FR
- Le guide Les meilleurs modèles d'embeddings FR compare Solon, multilingual-e5 et BGE sur du contenu francophone. La différence est mesurable.
- Passer en serveur API
- Le guide Transformer LM Studio en serveur API montre comment exposer l'endpoint OpenAI-compatible pour brancher LlamaIndex, Continue.dev ou un script maison sans perdre votre setup actuel.
Un retour, une erreur, une précision ? Faites-nous signe, ça améliore le guide pour tout le monde.