RAG locale con LM Studio: dialogare con i tuoi documenti
LM Studio include dalla versione 0.3 una funzione «Chat with Documents» che esegue un RAG completo in locale: indicizzazione, embeddings, retrieval e generazione, senza che un solo byte esca dalla tua macchina. È probabilmente la strada più rapida per passare da una chat simile a ChatGPT a un assistente che risponde basandosi sui tuoi PDF, contratti o appunti. Questa guida mostra come attivarla, cosa sa fare, quali sono i suoi limiti e quando occorre passare ad AnythingLLM o a uno stack Python.
#Perché LM Studio per il RAG
Fare RAG in locale significa in genere combinare quattro componenti: un parser di file, un modello di embedding, un database vettoriale e un LLM per la generazione. La maggior parte dei tutorial usa Python + LlamaIndex + ChromaDB + Ollama. È una soluzione potente, ma comporta anche quattro dipendenze, un ambiente da gestire e uno script da mantenere.
LM Studio nasconde tutto questo dietro l'icona di una graffetta. Carichi un modello di generazione (Qwen 3.5 9B, Granite 4.2 8B, Gemma 4 12B…), carichi un modello di embedding, trascini un PDF nella conversazione e poni la tua domanda. L'interfaccia si occupa del chunking, dell'indicizzazione in memoria e dell'inserimento dei passaggi pertinenti nel prompt.
- Nessuna riga di codice
- Tutto passa attraverso l'interfaccia grafica. È il percorso più breve tra «ho una cartella di PDF» e «ci converso».
- 100 % offline
- Embedding, retrieval, generazione: tutto viene eseguito sulla tua GPU o CPU. Nessuna telemetria sul contenuto dei documenti.
- Compatibile con OpenAI
- Il server locale sulla porta 1234 rimane accessibile. Puoi utilizzare il RAG dalla GUI e collegare in parallelo uno script allo stesso modello.
#Prerequisiti
LM Studio interroga i tuoi documenti. Per passare da una prova a uno strumento affidabile, il kit RAG Local affronta ciò che fa la differenza: la suddivisione dei documenti (cap. 7), la scelta di un modello di embedding valido per il francese (cap. 8) e la valutazione delle risposte (cap. 14).
- Spazio online a vita
- PDF + file
- Aggiornamenti a vita
- LM Studio 0.3 o successivo
- La funzione Chat with Documents è stata introdotta nella versione 0.3 e successivamente migliorata. Controlla la tua versione in Settings → About. Su un LM Studio più vecchio, aggiorna prima di procedere.
- Un LLM di generazione caricato
- Qwen 3.5 9B Q4_K_M (6,6 GB, contesto 256k), Granite 4.2 8B Q4_K_M (5,3 GB, 128k) o Gemma 4 12B Q4_K_M (7,6 GB, multimodale) sono buone scelte predefinite, tutti con licenza Apache 2.0. Questi modelli recenti hanno ampie finestre di contesto, ma imposta comunque il parametro Context Length in LM Studio (vedi più avanti) — altrimenti sarai limitato nel numero di passaggi che LM Studio può inserire.
- Un modello di embeddings
- Necessario e distinto dal LLM. nomic-embed-text-v1.5 (137M, ~80 MB in Q4) è la scelta predefinita raccomandata da LM Studio. mxbai-embed-large (335M) se hai margine disponibile. Per contenuti esclusivamente in francese, multilingual-e5-large è più pertinente.
- VRAM o RAM
- Calcola la dimensione del LLM + circa 200 MB per il modello di embedding + 1-2 GB per l'indice in memoria di una cartella di medie dimensioni. Su una GPU con 12 GB di VRAM, un modello 7B Q4 + nomic-embed lascia circa 5 GB per l'indice e il contesto.
- Finestra di contesto ≥ 8192
- Imposta il parametro Context Length del LLM ad almeno 8192, idealmente a 16384, dal pannello a destra della chat. Al di sotto di questi valori, LM Studio tronca i passaggi recuperati e la qualità della risposta peggiora.
#1. Attivare Chat with Documents
Non c'è nulla da attivare in senso stretto — è una funzionalità nativa della chat. Basta fornire un documento a una conversazione perché LM Studio avvii la pipeline RAG in background.
- 01Apri una nuova chatScheda Chat nella barra laterale, poi pulsante + in alto per creare una conversazione. Verifica che un LLM sia effettivamente caricato nel menu a discesa in alto. Se non è caricato alcun modello, seleziona il tuo modello di generazione e attendi che la VRAM si riempia.
- 02Trascina il tuo file nella zona di inserimentoTrascina e rilascia un PDF, DOCX, TXT o MD direttamente nel campo messaggio in basso. Si visualizza una miniatura sopra il campo con il nome e la dimensione del file. Puoi aggiungere più file di seguito.
- 03Poni la tua domandaInserisci normalmente la tua domanda, come in una chat classica. LM Studio rileva la presenza del documento, lo suddivide in blocchi, lo codifica, cerca i passaggi pertinenti e li inserisce nel prompt — tutto in 1-5 secondi a seconda delle dimensioni.
- 04Leggi la risposta e le fontiIl modello risponde basandosi sui passaggi trovati. A seconda del LLM utilizzato, citerà o meno gli estratti. Per forzare la citazione, aggiungi «Cita i passaggi esatti del documento» nella tua domanda.
#2. Il modello di embedding
Il modello di embedding è ciò che trasforma un pezzo di testo in un vettore di numeri. La qualità del retrieval — quindi la qualità finale del RAG — dipende direttamente da questo modello. Molto più che dal LLM di generazione, contrariamente a quanto si immagina all'inizio.
- 01Scarica un modello di embeddingsNella scheda Discover, filtra per «Text Embedding» nella colonna di sinistra. nomic-embed-text-v1.5 è proposto in posizione ben visibile — è una buona scelta predefinita. Scarica la variante Q4_K_M (~80 MB) oppure Q8_0 (~140 MB) se vuoi la massima qualità.
- 02Verifica che venga rilevatoSettings → My Models → scheda Embeddings. Il modello deve apparire qui. Se LM Studio non lo vede in questa scheda anche se è stato scaricato, significa che non è stato riconosciuto come modello di embedding — controlla i tag Hugging Face o scaricalo di nuovo tramite Discover.
- 03Selezionalo nella chatQuando un documento è allegato a una chat, LM Studio mostra in fondo alla conversazione il nome del modello di embedding utilizzato. Cliccaci sopra per cambiarlo. La scelta viene salvata per ogni chat — utile per confrontare nomic e multilingual-e5 sullo stesso documento.
- nomic-embed-text-v1.5
- 137M parametri, 768 dimensioni, contesto di 8192 token. Ottima scelta predefinita per l'inglese, discreto in francese. Consigliato da LM Studio.
- mxbai-embed-large-v1
- 335M, 1024 dimensioni. Miglior posizionamento su MTEB in inglese, ma 3× più lento e 3× più pesante. Utile se la qualità del retrieval è il fattore limitante.
- multilingual-e5-large
- 560M, 1024 dimensioni. La scelta migliore se i tuoi documenti sono in francese o multilingui. Richiede di anteporre « query: » alle query e « passage: » ai brani, un'operazione che LM Studio gestisce automaticamente.
- bge-large-en-v1.5
- 335M, 1024 dimensioni. Eccellente in inglese puro, da evitare per il francese.
#3. Formati e dimensioni dei file supportati
LM Studio gestisce un sottoinsieme pratico dei formati comuni. Nessun OCR sui PDF scansionati, nessun parsing di tabelle complesse, nessuna importazione diretta da un URL: bisogna conoscere questi limiti prima di aspettarsi troppo.
- PDF (testo nativo)
- Supportato. I PDF generati da Word, Google Docs o LaTeX funzionano bene. Dai PDF scansionati senza un livello OCR non è possibile estrarre il testo: elaborali prima con ocrmypdf o Tesseract.
- DOCX
- Supportato. La formattazione viene ignorata e il testo viene estratto senza struttura. Tabelle e immagini vengono perse.
- TXT e MD
- Supportato nativamente, è il formato ideale. Il Markdown mantiene la sua struttura (titoli, elenchi) che aiuta nel chunking.
- Codice sorgente (.py, .js, .ts…)
- Trattato come testo. Funziona, ma per discutere con un repository intero, preferisci Continue.dev o uno strumento pensato per il codice.
- CSV, XLSX, JSON, HTML, EPUB
- Nessun supporto ufficiale attualmente. Converti in TXT o MD con pandoc, csvkit o un script prima dell'import.
- Dimensione massima per file
- Non è stato annunciato alcun limite rigido. In pratica, considera un massimo di 50-100 MB per PDF nell'interfaccia grafica: oltre questa soglia, il chunking diventa lento e il consumo di RAM aumenta rapidamente.
#4. Testare con un documento reale
Il miglior test è un documento che conosci. Prendi un PDF di una ventina di pagine — un manuale utente, un rapporto, un contratto — e poni prima domande di cui conosci la risposta per calibrare la fiducia nel sistema.
- Temperatura bassa
- Per il RAG, abbassa la temperatura a 0.1-0.3 nel pannello di destra. L'obiettivo è attenersi ai passaggi, non creare.
- Prompt esplicito di sistema
- « Rispondi solo a partire dagli estratti forniti. Se l'informazione non è presente, dillo chiaramente. Cita i passaggi esatti tra virgolette. » Questa semplice aggiunta riduce le allucinazioni a un terzo.
- Domanda strutturata
- «Qual è il periodo di preavviso? Cita la clausola esatta.» è più utile di «parlami del preavviso». La citazione costringe il modello a restare ancorato al testo.
#Limiti rispetto a AnythingLLM
LM Studio usa un RAG «usa e getta»: per singola conversazione, senza persistenza tra chat e senza regolazioni avanzate. È una scelta voluta: la funzione è pensata per una consultazione occasionale, non per una base di conoscenze. Appena vuoi di più, subentra AnythingLLM (gratuito, open source, con lo stesso approccio basato su un'interfaccia grafica).
- Spazi di lavoro persistenti
- AnythingLLM conserva i tuoi documenti in spazi di lavoro riutilizzabili. Indicizzi 200 PDF una sola volta e tutte le tue chat nello spazio di lavoro vi hanno accesso. LM Studio reindicizza a ogni nuova chat.
- Citazioni cliccabili
- AnythingLLM mostra le fonti con un link al passaggio esatto. LM Studio si limita a inserire il passaggio nel prompt — il modello può citare o no, a suo piacimento.
- Impostazioni RAG accessibili
- Top K, dimensione del chunk, soglia di similarità, modello di embedding: tutto è configurabile in AnythingLLM. LM Studio gestisce tutto come una scatola nera, con valori predefiniti ragionevoli.
- Database vettoriali esterni
- AnythingLLM si connette a ChromaDB, Qdrant, Pinecone, Weaviate. LM Studio mantiene tutto in memoria nel processo, il che lo limita a corpus modesti.
- Multi-utilisateurs
- AnythingLLM prevede utenti e condivisione dei workspace. LM Studio è progettato per un singolo utente.
- Connettori per le fonti
- AnythingLLM può acquisire contenuti da URL, Confluence, GitHub e trascrizioni di YouTube. LM Studio si limita al trascinamento dei file.
#Quando passare a uno stack Python
Arriva un momento in cui la GUI raggiunge i suoi limiti e scrivere codice diventa più semplice che aggirarli. Ecco i segnali che dovrebbero spingerti a passare a Python + LlamaIndex (o Haystack):
- Chunking che tiene conto della struttura
- I tuoi documenti hanno una struttura ben definita (sezioni giuridiche, codice, articoli scientifici) che il chunking ingenuo compromette. Uno splitter che riconosce la struttura Markdown o un parser docling fa la differenza.
- Ricerca ibrida
- Vuoi combinare la ricerca vettoriale (semantica) e BM25 (lessicale) per non perdere i termini esatti (numeri di clausola, nomi di variabili, identificatori). Nessuna interfaccia grafica lo fa nativamente oggi.
- Reranking
- Aggiungi un cross-encoder (BAAI/bge-reranker-v2-m3) per riordinare i primi 20 risultati. +15% di rilevanza, ma richiede di scrivere codice.
- Metadati e filtraggio
- « Cerca solo nei contratti firmati nel 2024 ». Richiede metadati per chunk e un filtro durante la richiesta.
- Pipeline di ingestione automatizzata
- Una cartella monitorata, un cron, un webhook che riindicizza all'arrivo di ogni nuovo file. A quel punto si abbandona definitivamente l'interfaccia grafica.
- Valutazione
- Misurare la qualità del retrieval su 50 domande di riferimento. Senza Python, procedi alla cieca.
Buona notizia: LM Studio può rimanere come interfaccia mentre Python esegue la pipeline. Il server compatibile con OpenAI su localhost:1234 può essere utilizzato da LlamaIndex in due righe — mantieni LM Studio per la chat esplorativa e programmi la pipeline dietro l’interfaccia.
#Per approfondire
Chat with Documents copre l'80% delle esigenze per un uso personale o in un piccolo team. I passi successivi più logici dopo questo primo RAG:
- Capire i meccanismi
- La guida « RAG locale: introduzione » illustra in dettaglio chunking, embedding, retrieval e le insidie che nessuna interfaccia grafica mostra. Una lettura utile prima di modificare le impostazioni.
- Scegliere un modello di embedding migliore per il francese
- La guida I migliori modelli di embedding FR confronta Solon, multilingual-e5 e BGE su contenuti in lingua francese. La differenza è misurabile.
- Passare alla modalità server API
- La guida Trasformare LM Studio in un server API mostra come esporre l'endpoint compatibile con OpenAI per collegare LlamaIndex, Continue.dev o uno script personalizzato senza perdere la tua configurazione attuale.
Un feedback, un errore, una precisazione? Facci sapere, così la guida migliora per tutti.