Wichtigste Erkenntnisse
- RAG = Dokumente hochladen + Abruf + lokales LLM antwortet. Kein Training erforderlich.
- Fünf Schritte: (1) Dokumente laden, (2) in 500-1000-Token-Stücke aufteilen, (3) Embeddings generieren, (4) in Vektor-DB speichern, (5) beim Abfragen abrufen.
- Bestes Embedding-Modell: nomic-embed-text (137M, läuft lokal, 768-dim Vektoren).
- Beste Vektor-DB: Chroma (einfach, eingebettet) für <1M Dokumente; Qdrant (verteilt) für Produktion.
- Lokales RAG ist schneller und billiger als Cloud-APIs. Qualität hängt von Abruf-Genauigkeit und Prompt-Engineering ab.
📍 In einem Satz
Lokales RAG ermöglicht es einem lokalen LLM, Fragen zu Ihren eigenen Dokumenten zu beantworten, indem PDFs und Textdateien in Embeddings umgewandelt, in einer Vektordatenbank gespeichert und die relevantesten Abschnitte abgerufen werden, um sie dem Modell bei einer Frage zuzuführen.
💬 In einfachen Worten
RAG ist der Weg, ein KI-Modell tatsächlich über die eigenen Dateien Bescheid wissen zu lassen, statt nur über das, was es beim Training gelernt hat. Man lädt Dokumente einmal hoch, das System zerlegt sie in Abschnitte und wandelt jeden in eine durchsuchbare numerische Darstellung um, und ruft dann bei jeder Frage die relevantesten Abschnitte ab -- alles läuft lokal, ohne API-Rechnung pro Anfrage.
Wie funktioniert RAG Schritt für Schritt?
- 1Dokumentaufnahme: PDFs, Textdateien oder Webseiten laden.
- 2Chunking: Dokumente in 500-1000-Token-Chunks aufteilen (20% Überlappung, um Kontextbrüche zu verhindern).
- 3Embedding: Jeden Chunk in einen Vektor (768-1536 Dimensionen) mit lokalem Embedding-Modell konvertieren.
- 4Speicherung: Vektoren in Vektordatenbank (Chroma, Qdrant, Milvus) mit Metadaten (Dokumentname, Seite, Zeitstempel) speichern.
- 5Abfragezeit: Benutzerfrage in Embedding konvertieren, Vektor-DB nach Top-K ähnlichen Chunks durchsuchen (k=5-10).
- 6Kontext-Zusammenstellung: Abgerufene Chunks in einen Prompt mit Anweisungen für lokales LLM kombinieren.
- 7Generierung: Lokales LLM generiert Antwort basierend auf abgerufenem Kontext.
- 8Attribution: Zurückgeben, aus welchen Dokumenten die Antwort kam.
Was ist die optimale Chunk-Strategie?
Chunk-Strategie bestimmt Abruf-Qualität. Schlechtes Chunking = relevante Informationen auf Chunks verteilt, Abruf schlägt fehl.
Semantisches Chunking (empfohlen): Nach Sätzen oder Absätzen aufteilen, Bedeutung bewahren. Beispiel: jeder Absatz = 1 Chunk.
Fest-Größe-Chunking: 500 Token pro Chunk, 20% Überlappung. Einfach, aber kann Sätze aufteilen.
Rekursives Chunking: Zuerst nach Absätzen, dann nach Sätzen wenn zu groß. Hierarchie bewahren.
Semantisches Chunking mit 500-1000-Token-Chunks und 20% Überlappung ist optimal für die meisten Anwendungsfälle.
# Python: semantisches Chunking Beispiel
from langchain.text_splitter import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200, # 20% Überlappung
separators=["\n\n", "\n", ".", " "] # Nach Absatz, dann Satz aufteilen
)
chunks = splitter.split_documents(documents)
print(f"Erstellt {len(chunks)} Chunks")Welche Vektordatenbank sollten Sie verwenden?
Datenbank | Typ | Kapazität | Einrichtungsaufwand | Am besten für |
|---|---|---|---|---|
| Chroma | Eingebettet | <1M Dokumente | pip install | Prototyping, kleine RAG |
| Qdrant | Verteilt | Unbegrenzt | Docker oder Cloud | Produktion, skalierbar |
| Milvus | Verteilt | Unbegrenzt | Komplex | Unternehmensgroßstab |
| Weaviate | Graph + Vektor | Unbegrenzt | Docker | Komplexe Abfragen, Beziehungen |
| Pinecone (Cloud) | Verwaltet | Unbegrenzt | API-Schlüssel | Serverlos, wartungsfrei |
Welches Embedding-Modell sollten Sie wählen?
Modell | Dimensionen | Geschwindigkeit | Qualität | Empfehlung |
|---|---|---|---|---|
| nomic-embed-text (lokal) | 768 | Schnell | Ausgezeichnet | Best für lokale RAG |
| bge-m3 (lokal) | 1024 | Schnell | Ausgezeichnet | Mehrsprachigkeit |
| OpenAI text-embedding-3 (Cloud) | 3072 | Sehr schnell | Beste Klasse | Hybrid-Ansatz |
| Cohere (Cloud) | 4096 | Schnell | Ausgezeichnet | Produktions-Cloud-RAG |
Wie optimieren Sie die Abruf-Qualität?
Abruf-Qualität bestimmt RAG-Erfolg. Guter Abruf = gute Antworten. Schlechter Abruf = Halluzinationen.
- Top K Auswahl: K=5-10 Chunks abrufen. Höher K = mehr Kontext (langsamer), niedriger K = weniger Ablenkung.
- Ähnlichkeitsschwelle: Ergebnisse nach Mindestsimilaritätsscore filtern (z.B. >0,75). Vermeidet niedrig-relevante Chunks.
- Reranking: Cross-Encoder-Reranker zum erneuten Ranken nach Relevanz verwenden. Kleine Genauigkeitssteigerung.
- Hybrid-Suche: Semantische Suche (Embeddings) mit BM25-Keyword-Suche kombinieren. Erfasst exakte Keyword-Dokumente.
- Query-Erweiterung: Benutzerfrage mit Synonymen oder verwandten Begriffen erweitern. Verbessert Recall.
Wie bewerten Sie RAG-Qualität?
RAG-Qualität hat zwei Dimensionen: (1) Abruf-Qualität (bekamen wir relevante Chunks?), und (2) Generierungs-Qualität (antwortete das LLM gut?)
Abruf-Bewertung: Test-Abfragen mit bekannten korrekten Dokumenten erstellen. Präzision (wie viele abgerufene sind relevant?) und Recall (bekamen wir alle relevanten Dokumente?) messen.
Generierungs-Bewertung: LLM auf abgerufenen Chunks ausführen, Antworten manuell bewerten (0-5 Skala) für Genauigkeit und Vollständigkeit.
Automatisierte Evaluierungs-Tools (wie Ragas) können Abruf- und Generierungs-Metriken automatisch messen.
Produktions-RAG-Muster
Verwenden Sie für Produktionsdienste diese Muster:
- Caching: Embeddings häufig abgerufener Dokumente zwischenspeichern, um Neubrechnung zu vermeiden.
- Inkrementelle Indizierung: Neue Dokumente hinzufügen ohne alles neu zu indizieren. Qdrant und Milvus unterstützen dies.
- Überwachung: Abruf-Latenz, Cache-Hit-Rate und Benutzer-Feedback zur Antwortqualität nachverfolggen.
- Fallback: Falls Abruf fehlschlägt (keine relevanten Chunks), mit "Ich habe keine Informationen dazu" antworten statt zu halluzinieren.
- Versionierung: Dokumentversionen für Audit-Trails behalten. Speichern, welche Version für jede Antwort verwendet wurde.
Häufige Fehler bei lokaler RAG-Implementierung
- Dokumente falsch chunken. Zu viele kleine Chunks = Abruf-Rauschen. Zu wenige große Chunks = Information verteilt. Chunk-Größen empirisch testen.
- Abruf nicht bewerten. RAG bauen ohne Abruf-Test ist wie Auto ohne Motor-Test. Präzision/Recall immer messen.
- Generische Embeddings für Domänen-Dokumente. Rechts-, medizinische oder technische Dokumente brauchen möglicherweise feingestimmte Embeddings. Domain-spezifische Modelle erwägen.
- Update-Häufigkeit vergessen. Wenn Dokumente wöchentlich ändern, wird Vektor-DB veraltet. Pipeline zum Neu-Embedding und Update bauen.
- RAG ersetzt Fine-Tuning erwartet. RAG ist Kontext-Injektion. Fine-Tuning ist Modell-Anpassung. Für beste Ergebnisse beide kombinieren.
Häufig gestellte Fragen zu lokalem RAG
Wie viele Dokumente kann lokales RAG handhaben?
Chroma handhabet 100K-1M Dokumente auf Consumer-Hardware. Qdrant skaliert zu Milliarden mit verteiltem Setup. Über 1M verwenden Sie Qdrant oder Milvus.
Welche Latenz sollte ich erwarten?
Embedding-Abfrage (nomic-embed-text auf CPU): 50-200ms. Abruf (Chroma auf Disk): 10-50ms. LLM-Generierung: 2-10 Sekunden (hängt von Modellgröße ab). Gesamt: 2-10 Sekunden pro Abfrage.
Kann RAG Echtzeit-Dokument-Updates handhaben?
Ja. Neue Dokumente dynamisch zur Vektor-DB hinzufügen. Indizierungs-Latenz ist 100-500ms pro Dokument, also Echtzeit-Updates sind praktisch.
Ist lokales RAG billiger als Cloud-APIs?
Ja. Keine Pro-Token-Kosten, keine API-Aufrufe an externe Services. One-Time Setup von Embeddings, dann kostenlose Abfragen.
Kann ich Cloud-Embeddings mit lokalen LLMs verwenden?
Ja. OpenAI-, Cohere- oder andere Cloud-Embeddings zur Indizierung verwenden, dann lokale LLMs zur Generierung. Hybrid-Ansatz.
Quellen
- LlamaIndex Dokumentation -- docs.llamaindex.ai
- LangChain RAG-Anleitung -- python.langchain.com/docs/use_cases/question_answering
- Chroma Dokumentation -- docs.trychroma.com
- Qdrant Vector Search Engine -- qdrant.tech
- RAG-Paper (Lewis et al.) -- arxiv.org/abs/2005.11401
