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.
- Ab April 2026 ist lokales RAG schneller und billiger als Cloud-APIs. Qualität hängt von Abruf-Genauigkeit und Prompt-Engineering ab.
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.
Ab April 2026 ist semantisches Chunking mit 500-1000-Token-Chunks und 20% Überlappung 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.
Ab April 2026 können automatisierte Evaluierungs-Tools (wie Ragas) 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