Intermédiaire 11 minRAG

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.

Par Mohamed Meguedmi·Màj 2026-05-31·Testé sur Windows, macOS, Linux

#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.
i
Ce n'est pas un remplaçant d'AnythingLLM
LM Studio fait du RAG « par conversation » — vous glissez des documents dans un chat donné, et l'index vit avec ce chat. Il n'y a pas de notion de workspace persistant, de collection partagée, ni de réindexation incrémentale. Pour une base de connaissances stable que vous interrogez tous les jours, AnythingLLM ou une stack Python restent plus adaptés. Voir la section comparaison plus bas.

#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.

  1. 01
    Ouvrez un nouveau chat
    Onglet 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.
  2. 02
    Glissez votre fichier dans la zone de saisie
    Drag-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.
  3. 03
    Posez votre question
    Tapez 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.
  4. 04
    Lisez la réponse et les sources
    Le 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.
Document court vs document long
Si le document tient dans la fenêtre de contexte (typiquement moins de 20 pages texte), LM Studio l'injecte intégralement sans passer par le RAG — pas de chunking, pas d'embeddings, juste un long prompt. Au-delà, il bascule automatiquement en mode RAG. Vous n'avez aucun réglage à faire, mais c'est utile à comprendre pour interpréter les résultats.

#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.

  1. 01
    Téléchargez un modèle d'embeddings
    Onglet 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.
  2. 02
    Vé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.
  3. 03
    Sélectionnez-le dans le chat
    Quand 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.
!
Le piège du modèle d'embeddings anglais sur du français
Un nomic-embed ou un bge sur du contenu français divise la pertinence du retrieval par 1.5 à 2. Vous obtiendrez des passages vaguement liés au sujet plutôt que les passages exactement pertinents. Si vos documents sont français, prenez multilingual-e5-large dès le départ — la lenteur supplémentaire est négligeable comparée au gain de qualité.

#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.
Préparer des fichiers non supportés
# PDF scanné -> PDF avec couche OCR
ocrmypdf scan.pdf scan_ocr.pdf

# HTML -> Markdown propre
pandoc page.html -o page.md

# XLSX -> CSV puis -> TXT lisible
libreoffice --headless --convert-to csv data.xlsx
column -s, -t < data.csv > data.txt

# EPUB -> TXT
pandoc livre.epub -t plain -o livre.txt
Plusieurs fichiers d'un coup
Vous pouvez attacher jusqu'à 5 fichiers à un même chat (cette limite a évolué selon les versions, vérifiez sur votre build). Au-delà, regroupez-les en un seul gros TXT via un cat. LM Studio chunkera l'ensemble comme un seul corpus, ce qui marche bien pour des notes Markdown ou des chapitres d'un même document.

#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.

Workflow type de validation
# Préparer un document test
# - Un PDF de 20-50 pages avec une structure claire
# - Notez 5 faits précis présents dans le document
# - Notez 2 faits absents du document

# Dans LM Studio :
# 1. Chat -> nouvelle conversation
# 2. Charger Mistral 7B Q4_K_M (ou équivalent)
# 3. Context Length -> 16384 (panneau droit)
# 4. Drag-and-drop du PDF
# 5. Vérifier que nomic-embed (ou e5) est sélectionné
# 6. Poser les 5 questions à réponse connue
# 7. Poser les 2 questions à réponse absente

# Verdict :
# - 5/5 corrects + 2/2 "je ne trouve pas" -> RAG fiable sur ce corpus
# - Hallucinations sur les 2 absents -> baisser la température à 0.1
# - Réponses approximatives -> changer d'embeddings ou monter Top K
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.
i
Le bon choix selon l'usage
LM Studio Chat with Documents : tester un PDF, résumer un rapport reçu, poser quelques questions sur un contrat, faire de la veille ponctuelle. AnythingLLM : base de connaissances d'équipe, support client, documentation produit interrogée tous les jours. Si vous hésitez, commencez par LM Studio — la bascule vers AnythingLLM se fait en 30 minutes le jour où la limite vous gêne.

#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.

Brancher LlamaIndex sur LM Studio
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, Settings
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.llms.openai_like import OpenAILike

# LM Studio sert le LLM via son endpoint OpenAI-compatible
Settings.llm = OpenAILike(
    model="local-model",
    api_base="http://localhost:1234/v1",
    api_key="lm-studio",
    is_chat_model=True,
    context_window=16384,
)

# Embeddings côté Python (LM Studio peut aussi les exposer)
Settings.embed_model = HuggingFaceEmbedding("intfloat/multilingual-e5-large")

docs = SimpleDirectoryReader("./mes_documents").load_data()
index = VectorStoreIndex.from_documents(docs)
index.storage_context.persist("./storage")

qe = index.as_query_engine(similarity_top_k=5)
print(qe.query("Quelles sont les obligations du prestataire ?"))
Embeddings via LM Studio aussi
Depuis la 0.3, LM Studio expose les embeddings sur /v1/embeddings (endpoint OpenAI-compatible). Vous pouvez donc faire tourner et le LLM et les embeddings depuis LM Studio, et n'utiliser Python que pour le pipeline. Pratique pour réutiliser la VRAM déjà allouée.

#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.
Ce guide vous a aidé ?

Un retour, une erreur, une précision ? Faites-nous signe, ça améliore le guide pour tout le monde.