Débutant 11 minConcepts

RAG local : introduction

Réponse directe

Un RAG local (retrieval-augmented generation) permet d'interroger vos propres documents avec un modèle qui tourne sur votre machine : vos fichiers sont découpés, transformés en vecteurs par un modèle d'embedding, puis, à chaque question, seuls les passages les plus proches sont ajoutés au prompt du modèle. Rien n'a besoin de sortir de l'ordinateur, ni pour l'indexation, ni pour la réponse.

Cette introduction explique le fonctionnement d'un RAG local, la pile minimale pour le construire sur Ollama, les options sans code, un exemple en Python avec LlamaIndex, et surtout les points où la plupart des premiers essais échouent : découpage, langue, recherche, PDF. Elle indique aussi quand un RAG n'est pas la bonne solution.

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

#RAG local : la définition et ce que vous en attendez

RAG signifie retrieval-augmented generation : on récupère d'abord des passages pertinents dans une base de documents, puis on demande au modèle de rédiger une réponse à partir d'eux. Le mot local précise que chaque étape (lecture des documents, calcul des embeddings, stockage, génération) s'exécute sur votre matériel. C'est l'usage le plus utile d'un modèle privé : questions sur des contrats, des notes, une base de connaissances interne, avec des réponses qui citent leurs sources.

Ce que fait chaque composant d'un RAG local
ComposantRôleExemples
Lecteur de documentsExtraire le texte propre des PDF, Word, Markdown, HTMLLecteurs de LlamaIndex, Docling
Découpeur (chunker)Couper le texte en passages de taille utileDécoupage par tokens ou par structure
Modèle d'embeddingTransformer chaque passage en vecteurembeddinggemma, qwen3-embedding, all-minilm (recommandés par Ollama)
Base vectorielleStocker les vecteurs et chercher les plus prochesChromaDB, Qdrant, FAISS, pgvector
Modèle de générationRédiger la réponse à partir des passagesModèle servi par Ollama ou LM Studio

#Pourquoi un RAG plutôt que tout envoyer au modèle

Le kit RAG Local

Tes documents, ton IA : un RAG local fiable sur tes PDF, notes et mails — sans rien envoyer dans le cloud.

  • Espace en ligne à vie
  • PDF + fichiers
  • Mises à jour à vie

Première idée : copier tous ses documents dans le prompt. Deux limites s'opposent. La fenêtre de contexte est bornée : 300 PDF représentent des millions de tokens, bien au-delà de ce qu'un modèle local accepte. Et même quand un document tient, la qualité baisse : une étude de référence (Liu et al., Stanford) montre que la performance peut chuter nettement lorsque l'information utile se trouve au milieu d'un long contexte, même pour des modèles conçus pour de longs contextes. Ce phénomène s'appelle lost in the middle.

Le RAG contourne ces deux problèmes en ne transmettant au modèle que quelques passages choisis pour la question. Le modèle lit quelques centaines de tokens bien ciblés au lieu de dizaines de milliers de tokens peu utiles, avec un coût de calcul et une latence moindres. Tout l'art consiste à bien récupérer.

Un ordre de grandeur, en calcul illustratif : 300 PDF de 20 pages à environ 600 tokens la page représentent 3,6 millions de tokens, soit des centaines de fois la fenêtre de 8 000 tokens que l'on règle souvent sur un modèle local. Découpés en passages de 400 tokens, ils donnent environ 9 000 passages. Une question en retient cinq, soit 2 000 tokens : le modèle lit 0,06 % du corpus, mais les bons 0,06 % si la recherche est réussie.

i
Un RAG n'est pas toujours nécessaire
LM Studio, dans sa documentation, illustre bien le choix : si le document est assez court pour tenir dans le contexte du modèle, il l'ajoute en entier à la conversation. Il ne bascule vers le RAG que si le document est très long. Cette logique est la bonne règle de départ.

#Le concept en deux minutes : embeddings et distance

Un embedding est une liste de nombres qui représente le sens d'un texte. Deux textes qui parlent de la même chose ont des vecteurs proches, même s'ils n'emploient pas les mêmes mots. La documentation d'Ollama décrit les embeddings comme des vecteurs numériques que l'on peut stocker dans une base vectorielle, chercher par similarité cosinus ou utiliser dans un RAG, avec une longueur qui dépend du modèle, typiquement entre 384 et 1024 dimensions.

Une question est transformée en vecteur par le même modèle, puis comparée à tous les passages indexés : les plus proches sont renvoyés. Le point qui piège les débutants : le modèle d'embedding utilisé pour l'index et celui utilisé pour les questions doivent être identiques. La documentation de LlamaIndex le rappelle dans son exemple de rechargement d'index : il est important d'utiliser le même embed_model que celui qui a servi à le construire.

#Anatomie d'un RAG : deux phases

#Phase 1 : l'indexation, faite une fois par document

  1. 01
    Ingestion
    Lire les fichiers (PDF, Word, Markdown, HTML) et en extraire le texte propre. C'est l'étape la plus sous-estimée.
  2. 02
    Découpage
    Couper en passages assez petits pour être précis, assez grands pour garder du sens. Des passages de 200 à 500 tokens sont un point de départ courant.
  3. 03
    Embedding
    Passer chaque passage dans le modèle d'embedding, par exemple avec la commande ollama run embeddinggemma ou l'API /api/embed.
  4. 04
    Stockage
    Enregistrer les vecteurs avec le texte d'origine et des métadonnées (nom du fichier, page, date).

#Phase 2 : la requête, à chaque question

  1. 01
    Embedding de la question
    Avec le même modèle que pour l'indexation.
  2. 02
    Recherche
    Trouver les N passages dont le vecteur est le plus proche, mesure par similarité cosinus.
  3. 03
    Assemblage du prompt
    Construire un message qui contient les extraits et la consigne de répondre en citant les sources et de dire quand la réponse n'y figure pas.
  4. 04
    Génération
    Envoyer ce prompt au modèle local, qui rédige la réponse.

#La pile minimale, et les options sans code

Pour un RAG local qui fonctionne, quatre briques suffisent : un modèle de génération servi par Ollama, un modèle d'embedding, une base vectorielle, et une couche qui les relie. Pour le français, choisissez un modèle d'embedding multilingue ; la page d'Ollama en recommande trois (embeddinggemma, qwen3-embedding, all-minilm), et les tailles de vecteur restent modestes, ce qui permet de les exécuter sur un ordinateur portable.

Choisir son niveau d'effort
VoieEffortContrôleConvient à
LM Studio, Chat with DocumentsGlisser .pdf, .docx ou .txt dans une conversationFaible : bascule automatique entre document entier et RAGEssai rapide sur quelques fichiers
AnythingLLMApplication avec choix de l'embedder et de la base vectorielleMoyenPetite équipe sans développeur
Open WebUIInterface web branchée sur Ollama, bases de connaissancesMoyenUsage quotidien d'une base de notes
LlamaIndex ou Haystack en PythonCode à écrireÉlevé : découpage, recherche, évaluationProjet sur mesure ou à déployer

Pour ne pas coder, le guide sur le RAG dans LM Studio et celui sur AnythingLLM détaillent chaque voie ; le guide sur NotebookLM et les alternatives locales couvre la requête « notebook lm rag ».

#Le pipeline en Python, étape par étape

L'exemple ci-dessous suit le schéma officiel du tutoriel LlamaIndex avec modèles locaux : un lecteur de répertoire, un modèle d'embedding, un modèle servi par Ollama, puis un moteur de requête. Installez d'abord les paquets llama-index-llms-ollama et llama-index-embeddings-huggingface. Adaptez les noms de modèles à ce que vous avez téléchargé.

RAG minimal avec LlamaIndex et Ollama
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, Settings
from llama_index.llms.ollama import Ollama
from llama_index.embeddings.huggingface import HuggingFaceEmbedding

Settings.embed_model = HuggingFaceEmbedding(model_name="intfloat/multilingual-e5-large")
Settings.llm = Ollama(model="qwen3.5:9b", request_timeout=360.0, context_window=8000)

documents = SimpleDirectoryReader("mes_documents").load_data()
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine(similarity_top_k=5)

response = query_engine.query("Quelles sont les échéances du contrat Dupont ?")
print(response)
print(response.source_nodes)

La première exécution calcule tous les embeddings, ce qui prend plus ou moins de temps selon le volume et la machine. Pour éviter de tout recalculer, sauvegardez l'index avec index.storage_context.persist, puis rechargez-le avec load_index_from_storage en réutilisant le même modèle d'embedding. Le paramètre context_window limite la mémoire consommée, comme le précise le tutoriel.

→
Toujours afficher les sources
Affichez les passages retenus (response.source_nodes) à chaque test. Si les extraits sont hors sujet, le problème est dans la recherche, pas dans le modèle : inutile de changer de modèle de génération.

#Les pièges qui font échouer les premiers essais

Le découpage naïf casse les structures
Une coupure au milieu d'un tableau donne des passages illisibles. Utilisez un découpeur qui respecte titres et tableaux, ou convertissez d'abord les documents avec Docling.
La langue de l'embedding compte
Un modèle d'embedding entraîné surtout sur l'anglais retrouve moins bien des passages français. Prenez un modèle multilingue et testez-le sur 10 questions réelles avant d'indexer tout le corpus.
Un top-k unique convient rarement
Trop peu de passages appauvrit la réponse ; trop en noie le modèle. Ajustez selon la nature des documents et vérifiez sur des questions dont vous connaissez la réponse.
Une mauvaise recherche produit une réponse assurée et fausse
Un modèle à qui l'on donne des extraits non pertinents peut inventer une réponse qui semble sûre. Mesurez d'abord la pertinence des extraits.
Les PDF sont piégeux
Double colonne, pieds de page, tableaux, scans : une part importante du travail est de nettoyer l'ingestion. Un PDF scanné demande de l'OCR avant tout autre traitement.
Mélanger les modèles d'embedding
Indexer avec un modèle et interroger avec un autre donne des résultats absurdes, sans message d'erreur.

#Quand ne pas faire de RAG

RAG, contexte long ou autre approche
SituationMeilleure approchePourquoi
Moins d'une vingtaine de pagesTout envoyer dans le contextePlus simple, aucune perte de passage ; c'est aussi ce que fait LM Studio quand le document tient
Question factuelle sur des données structurées (chiffre d'affaires 2024)Requête SQL ou script d'extractionUn RAG retrouve du texte, pas un calcul exact
Question de synthèse sur tout le corpusRésumés hiérarchiques puis question sur les résumésLe RAG ne récupère que quelques passages, pas une vue d'ensemble
Documents modifiés en permanenceIndexation incrémentale, ou recherche par mots-clésRéindexer à chaque changement coûte plus qu'interroger
Apprendre un style ou un formatFine-tuningLe RAG apporte des faits, pas une manière d'écrire

Le guide comparant fine-tuning et RAG détaille ce dernier cas.

#Matériel et confidentialité : ce qui reste chez vous

Dans un RAG entièrement local, les documents, les vecteurs et les questions restent sur la machine, à condition que chaque brique le soit : embedding servi par Ollama ou chargé depuis le disque, base vectorielle en fichier ou en service local, modèle de génération local. Vérifiez qu'aucun composant n'appelle un service en ligne : un embedder ou un modèle cloud sélectionné par erreur enverrait vos passages à l'extérieur.

Côté matériel, le poste le plus lourd est le modèle de génération : en Q4, un modèle de 8 à 9 milliards de paramètres tient dans environ 5 Go de mémoire, plus le contexte. Le contexte s'agrandit ici, car il contient les extraits : prévoyez de la marge si vous augmentez le nombre de passages. L'embedding, lui, est léger ; l'indexation initiale d'un gros corpus reste l'opération la plus longue et se fait une fois. Le guide sur les LLM sans GPU indique ce que chaque quantité de RAM permet.

#Et après ? Les améliorations dans l'ordre

Un RAG de base répond souvent bien à des questions simples. Pour aller plus loin, l'ordre le plus rentable est le suivant : d'abord un découpage qui respecte la structure, puis la recherche hybride (vectorielle et par mots-clés BM25, pour ne pas rater un terme exact comme un numéro de contrat), puis un reranker qui réordonne les premiers résultats, enfin une évaluation sur un jeu d'une cinquantaine de questions dont vous connaissez la réponse. Sans mesure, chaque changement reste une impression.

Questions fréquentes sur le RAG local
Qu'est-ce qu'un RAG local ?+
C'est un système qui répond à des questions à partir de vos documents, en exécutant sur votre machine la lecture, l'indexation, la recherche et la génération. Les passages pertinents sont retrouvés par similarité de vecteurs puis donnés à un modèle local. Vos fichiers ne quittent pas votre ordinateur.
Quelle différence entre RAG et fine-tuning ?+
Le RAG donne au modèle, au moment de la question, des extraits de vos documents : il apporte des faits actualisables. Le fine-tuning modifie les poids du modèle : il change son style ou son format de réponse, mais retient mal des faits précis. Pour interroger des documents, commencez par le RAG.
Quel modèle d'embedding choisir pour le français ?+
Prenez un modèle multilingue. Ollama recommande embeddinggemma, qwen3-embedding et all-minilm ; le premier a 300 millions de paramètres. Testez sur dix questions réelles de votre corpus avant de l'adopter : la qualité dépend de vos documents. Gardez ensuite le même modèle pour indexer et pour interroger, sans quoi les résultats deviennent incohérents.
Faut-il un GPU pour un RAG local ?+
Pas forcément. Les modèles d'embedding sont petits et tournent sur processeur ; l'indexation est plus lente sans GPU, mais elle se fait une fois. Le modèle de génération est le poste le plus gourmand : un modèle de 8 à 9 milliards de paramètres en Q4 demande environ 5 Go de mémoire.
Quelle taille de passage pour l'indexation ?+
Un point de départ courant est de 200 à 500 tokens par passage, avec un léger recouvrement. Il n'existe pas de valeur universelle : testez deux ou trois tailles sur des questions dont vous connaissez la réponse. Un découpage qui respecte les titres et les tableaux compte plus que la taille exacte.
Comment savoir si mon RAG répond correctement ?+
Préparez une cinquantaine de questions dont vous connaissez la réponse et le passage source. Vérifiez à chaque changement si le bon passage est bien dans les extraits retournés, puis si la réponse le cite correctement. Les outils comme Ragas automatisent cette mesure, expliquée dans un guide dédié.
Ce guide vous a aidé ?

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