Lokales RAG: introduction
Ein lokales RAG (retrieval-augmented generation) ermöglicht es, Ihre eigenen Dokumente mit einem Modell abzufragen, das auf Ihrem Rechner läuft: Ihre Dateien werden in Abschnitte aufgeteilt und von einem Embedding-Modell in Vektoren umgewandelt. Anschließend werden bei jeder Frage nur die ähnlichsten Passagen zum Prompt des Modells hinzugefügt. Nichts muss den Computer verlassen, weder für die Indexierung noch für die Antwort.
Diese Einführung erklärt, wie ein lokales RAG funktioniert, welcher minimale Technologie-Stack für den Aufbau mit Ollama nötig ist, welche Optionen ohne Programmierung es gibt, und zeigt ein Python-Beispiel mit LlamaIndex. Vor allem behandelt sie die Punkte, an denen die meisten ersten Versuche scheitern: Textaufteilung, Sprache, Suche und PDF. Sie erläutert auch, wann ein RAG nicht die richtige Lösung ist.
#Lokales RAG: die Definition und Ihre Erwartungen daran
RAG bedeutet Retrieval-Augmented Generation: Zunächst werden relevante Passagen aus einer Dokumentensammlung abgerufen. Anschließend wird das Modell gebeten, auf dieser Grundlage eine Antwort zu verfassen. Das Wort „lokal“ bedeutet, dass jeder Schritt (Lesen der Dokumente, Berechnung der Embeddings, Speicherung, Generierung) auf Ihrer Hardware ausgeführt wird. Das ist der nützlichste Einsatz eines privaten Modells: Fragen zu Verträgen, Notizen oder einer internen Wissensdatenbank, mit Antworten, die ihre Quellen angeben.
| Komponente | Rolle | Beispiele |
|---|---|---|
| Dokumentenleser | Extrahieren des reinen Textes aus PDF, Word, Markdown, HTML | Reader von LlamaIndex, Docling |
| Textzerleger (Chunker) | Den Text in Abschnitte geeigneter Größe aufteilen | Aufteilung nach Tokens oder Struktur |
| Embedding-Modell | Jeden Abschnitt in einen Vektor umwandeln | embeddinggemma, qwen3-embedding, all-minilm (empfohlen von Ollama) |
| Vektordatenbank | Vektoren speichern und die nächstgelegenen suchen | ChromaDB, Qdrant, FAISS, pgvector |
| Generierungsmodell | Die Antwort anhand der Textpassagen formulieren | Modell bereitgestellt durch Ollama oder LM Studio |
#Warum RAG anstatt alles direkt an das Modell zu senden?
Ihre Dokumente, Ihre KI: ein zuverlässiges lokales RAG für Ihre PDFs, Notizen und E-Mails – ohne Daten in die Cloud zu senden.
- Lebenslanger Online-Zugang
- PDF + Dateien
- Erstattung binnen 30 Tagen
Erste Idee: alle eigenen Dokumente in den Prompt kopieren. Dem stehen zwei Grenzen entgegen. Das Kontextfenster ist begrenzt: 300 PDFs entsprechen Millionen von Tokens, weit mehr, als ein lokales Modell akzeptiert. Und selbst wenn ein Dokument hineinpasst, sinkt die Qualität: Eine maßgebliche Studie (Liu et al., Stanford) zeigt, dass die Leistung deutlich abfallen kann, wenn die relevanten Informationen in der Mitte eines langen Kontexts stehen – selbst bei Modellen, die für lange Kontexte ausgelegt sind. Dieses Phänomen heißt lost in the middle.
RAG umgeht diese beiden Probleme, indem dem Modell nur einige für die Frage ausgewählte Passagen übermittelt werden. Das Modell liest einige hundert gezielt ausgewählte Tokens statt Zehntausender wenig hilfreicher Tokens, wodurch Rechenaufwand und Latenz sinken. Die Kunst liegt darin, die richtigen Informationen abzurufen.
Zur Größenordnung eine Beispielrechnung: 300 PDFs mit jeweils 20 Seiten und etwa 600 Tokens pro Seite ergeben 3,6 Millionen Tokens, also das Hundertfache eines Kontextfensters von 8.000 Tokens, wie es häufig bei lokalen Modellen eingestellt wird, und mehr. In Abschnitte von 400 Tokens aufgeteilt, ergeben sie etwa 9.000 Abschnitte. Für eine Frage werden fünf davon ausgewählt, also 2.000 Tokens: Das Modell liest 0,06 % des Korpus, aber die richtigen 0,06 %, wenn die Suche erfolgreich ist.
#Das Konzept in zwei Minuten: Embeddings und Abstand
Ein Embedding ist eine Liste von Zahlen, die die Bedeutung eines Textes darstellt. Zwei Texte, die von derselben Sache handeln, haben nahe beieinanderliegende Vektoren, selbst wenn sie nicht dieselben Wörter verwenden. Die Dokumentation von Ollama beschreibt Embeddings als numerische Vektoren, die man in einer Vektordatenbank speichern, anhand der Kosinusähnlichkeit durchsuchen oder in einem RAG verwenden kann. Ihre Länge hängt vom Modell ab und liegt typischerweise zwischen 384 und 1024 Dimensionen.
Eine Frage wird vom selben Modell in einen Vektor umgewandelt und anschließend mit allen indexierten Textpassagen verglichen: Die nächstgelegenen werden zurückgegeben. Ein häufiger Stolperstein für Anfänger: Das für den Index verwendete Embedding-Modell und das für die Fragen verwendete Modell müssen identisch sein. Die Dokumentation von LlamaIndex erinnert in ihrem Beispiel zum erneuten Laden eines Index daran: Es ist wichtig, dasselbe embed_model zu verwenden, mit dem der Index erstellt wurde.
#Anatomie eines RAG: zwei Phasen
#Phase 1: die Indexierung, einmal pro Dokument durchgeführt
- 01ImportDie Dateien (PDF, Word, Markdown, HTML) lesen und daraus bereinigten Text extrahieren. Das ist der am meisten unterschätzte Schritt.
- 02AufteilungIn kleine Abschnitte teilen, die klein genug sind, um präzise zu sein, aber groß genug, um den Sinn zu erhalten. Abschnitte mit 200 bis 500 Tokens sind ein häufiger Ausgangspunkt.
- 03EmbeddingJede Textpassage mit dem Embedding-Modell verarbeiten, beispielsweise mit dem Befehl ollama run embeddinggemma oder der API /api/embed.
- 04SpeicherVektoren mit dem ursprünglichen Text und Metadaten (Dateiname, Seite, Datum) speichern.
#Phase 2: die Anfrage, bei jeder Frage
- 01Frage-EmbeddingMit dem gleichen Modell wie für die Indexierung.
- 02SucheDie N Textpassagen finden, deren Vektoren am nächsten liegen, gemessen anhand der Kosinusähnlichkeit.
- 03Zusammenstellung des PromptsEine Nachricht erstellen, die die Auszüge und die Anweisung enthält, unter Angabe der Quellen zu antworten und darauf hinzuweisen, wenn die Antwort nicht in den Auszügen enthalten ist.
- 04GenerierungDen Prompt an das lokale Modell senden, das die Antwort erstellt.
#Der minimale Stack und die Optionen ohne Code
Für ein funktionierendes lokales RAG-System reichen vier Bausteine aus: ein von Ollama bereitgestelltes Generierungsmodell, ein Embedding-Modell, eine Vektordatenbank und eine Schicht, die sie verbindet. Wählen Sie für Französisch ein mehrsprachiges Embedding-Modell; die Ollama-Seite empfiehlt drei (embeddinggemma, qwen3-embedding, all-minilm). Die Vektorgrößen bleiben überschaubar, sodass sich diese Modelle auf einem Laptop ausführen lassen.
| Weg | Aufwand | Kontrolle | Eignet sich für |
|---|---|---|---|
| LM Studio, Chat with Documents | .pdf-, .docx- oder .txt-Dateien in eine Unterhaltung ziehen | Gering: automatischer Wechsel zwischen dem gesamten Dokument und RAG | Schneller Test mit einigen Dateien |
| AnythingLLM | Anwendung mit Auswahl des Embedders und der Vektordatenbank | Mittel | Kleines Team ohne Entwickler |
| Open WebUI | An Ollama angebundene Weboberfläche, Wissensdatenbanken | Mittel | Tägliche Nutzung einer Notizsammlung |
| LlamaIndex oder Haystack in Python | Zu schreibender Code | Hoch: Aufteilung, Suche, Bewertung | Maßgeschneidertes Projekt oder Projekt zur Bereitstellung |
Wenn Sie ohne Programmieren auskommen möchten, erläutern der Leitfaden zu RAG in LM Studio und der zu AnythingLLM die jeweiligen Möglichkeiten; der Leitfaden zu NotebookLM und lokalen Alternativen behandelt die Suchanfrage „notebook lm rag“.
#Die Python-Pipeline, Schritt für Schritt
Das folgende Beispiel folgt dem offiziellen Aufbau des LlamaIndex-Tutorials mit lokalen Modellen: ein Verzeichnisleser, ein Embedding-Modell, ein über Ollama bereitgestelltes Modell und anschließend eine Abfrage-Engine. Installieren Sie zunächst die Pakete llama-index-llms-ollama und llama-index-embeddings-huggingface. Passen Sie die Modellnamen an die Modelle an, die Sie heruntergeladen haben.
Beim ersten Durchlauf werden alle Embeddings berechnet, was je nach Datenmenge und Rechner unterschiedlich lange dauert. Um nicht alles erneut berechnen zu müssen, speichern Sie den Index mit index.storage_context.persist und laden Sie ihn anschließend mit load_index_from_storage wieder, wobei Sie dasselbe Embedding-Modell verwenden. Der Parameter context_window begrenzt den Speicherverbrauch, wie im Tutorial erläutert.
#Die Fallstricke, an denen die ersten Versuche scheitern
- Naives Aufteilen zerstört die Strukturen
- Eine Aufteilung mitten in einer Tabelle führt zu unleserlichen Textabschnitten. Verwenden Sie ein Werkzeug zur Textaufteilung, das Überschriften und Tabellen berücksichtigt, oder konvertieren Sie die Dokumente zuerst mit Docling.
- Die Sprache des Embeddings zählt
- Ein Embedding-Modell, das überwiegend mit englischen Texten trainiert wurde, findet französische Textpassagen weniger gut. Wählen Sie ein mehrsprachiges Modell und testen Sie es mit 10 echten Fragen, bevor Sie das gesamte Korpus indexieren.
- Ein einheitlicher top-k-Wert eignet sich selten
- Zu wenige Passagen machen die Antwort weniger gehaltvoll; zu viele überfordern das Modell. Passen Sie die Anzahl an die Art der Dokumente an und prüfen Sie die Ergebnisse anhand von Fragen, deren Antwort Sie kennen.
- Eine schlechte Suche führt zu einer selbstsicher formulierten, aber falschen Antwort
- Ein Modell, dem irrelevante Textauszüge gegeben werden, kann eine Antwort erfinden, die überzeugend klingt. Prüfen Sie zuerst die Relevanz der Textauszüge.
- PDF-Dateien sind problematisch
- Zweispaltige Layouts, Fußzeilen, Tabellen, Scans: Ein wesentlicher Teil der Arbeit besteht darin, die Daten bei der Übernahme zu bereinigen. Ein gescanntes PDF benötigt OCR vor jeder weiteren Verarbeitung.
- Embedding-Modelle mischen
- Indexierung mit einem Modell und Abfragen mit einem anderen führen zu absurden Ergebnissen ohne Fehlermeldung.
#Wann Sie auf RAG verzichten sollten
| Situation | Beste Herangehensweise | Warum |
|---|---|---|
| Weniger als zwanzig Seiten | Alles in den Kontext aufnehmen | Einfacher, keine Textpassagen gehen verloren; so geht auch LM Studio vor, wenn das Dokument hineinpasst |
| Faktische Frage zu strukturierten Daten (Umsatz 2024) | SQL-Abfrage oder Extraktionsskript | Ein RAG findet Text, liefert aber keine exakte Berechnung |
| Frage zur Synthese des gesamten Korpus | Hierarchische Zusammenfassungen, dann Frage zu den Zusammenfassungen | RAG ruft nur wenige Textpassagen ab und liefert keinen Gesamtüberblick |
| Dokumente, die ständig geändert werden | Inkrementelle Indexierung oder Suche nach Schlüsselwörtern | Das Neuindexieren bei jeder Änderung kostet mehr als die Abfrage |
| Einen Stil oder ein Format erlernen | Fine-tuning | RAG liefert Fakten, keinen Schreibstil |
Der Leitfaden zum Vergleich von Fine-Tuning und RAG erläutert diesen letzten Fall im Detail.
#Hardware und Datenschutz: Was bei Ihnen bleibt
Bei vollständig lokalem RAG bleiben die Dokumente, Vektoren und Fragen auf dem Rechner, sofern jeder Baustein lokal ist: das Embedding-Modell wird über Ollama bereitgestellt oder vom Datenträger geladen, die Vektordatenbank liegt als Datei vor oder läuft als lokaler Dienst, und das Generierungsmodell läuft lokal. Prüfen Sie, dass keine Komponente einen Online-Dienst aufruft: Ein versehentlich ausgewählter Cloud-Embedder oder ein Cloud-Modell würde Ihre Textpassagen nach außen senden.
Bei der Hardware stellt das Generierungsmodell die höchsten Anforderungen: In Q4 passt ein Modell mit 8 bis 9 Milliarden Parametern in etwa 5 GB Speicher, zuzüglich des Kontexts. Der Kontext wird hier größer, weil er die Textauszüge enthält: Planen Sie zusätzlichen Spielraum ein, wenn Sie die Anzahl der Textpassagen erhöhen. Das Embedding ist dagegen ressourcenschonend; die erstmalige Indexierung eines großen Korpus bleibt der zeitaufwendigste Vorgang und wird einmal durchgeführt. Der Leitfaden zu LLMs ohne GPU zeigt, was mit der jeweiligen RAM-Menge möglich ist.
#Und danach? Die Verbesserungen der Reihe nach
Ein einfaches RAG-System beantwortet einfache Fragen oft gut. Für weitere Verbesserungen bietet folgende Reihenfolge das beste Verhältnis von Aufwand und Nutzen: zuerst eine Aufteilung, die die Struktur berücksichtigt, dann eine hybride Suche (Vektorsuche und BM25-Stichwortsuche, damit ein exakter Begriff wie eine Vertragsnummer nicht übersehen wird), anschließend ein Reranker, der die ersten Ergebnisse neu sortiert, und schließlich eine Evaluation anhand eines Satzes von etwa fünfzig Fragen, deren Antworten Sie kennen. Ohne Messung bleibt jede Änderung ein subjektiver Eindruck.
Was ist ein lokaler RAG?+
Welche Unterschiede gibt es zwischen RAG und Fine-Tuning?+
Welches Embedding-Modell für Französisch wählen?+
Ist eine GPU für lokales RAG erforderlich?+
Wie groß sollten die Textabschnitte für die Indexierung sein?+
Wie kann ich feststellen, ob mein RAG korrekt antwortet?+
- Was ist RAG? Ein Leitfaden für Anfänger
- Strategien zum Aufteilen von Dokumenten
- Embeddings für Französisch
- RAG in LM Studio
- AnythingLLM: RAG-Tutorial
- Ein RAG mit Ragas bewerten
- Quelle: Embeddings in Ollama
- Quelle: LlamaIndex-Tutorial mit lokalen Modellen
- Quelle: Lost in the Middle (Liu et al.)
- Quelle: LM Studio, Chat with Documents
Haben Sie Feedback, einen Fehler entdeckt oder möchten Sie etwas präzisieren? Geben Sie uns Bescheid – so wird der Guide für alle besser.