Wenn RAG-Systeme in die Produktion gehen, stoßen Teams auf das gleiche Problem: Wenn die Retrieval-Qualität schlecht ist, spielt die Kraft des LLM keine Rolle — die Antwort ist Müll. OpenAIs text-embedding-3-large kostet 0,00013 Dollar pro Token, Coheres embed-english-v3.0 0,0001 Dollar — eine Differenz von 30 %. Aber wenn Sie die falschen Chunks abrufen, ist das Ergebnis identisch: Halluzinationen. Senken Sie die Embedding-Kosten und senken Sie gleichzeitig die Retrieval-Qualität, steigen die LLM-Kosten downstream um 200 % (Re-Ranking, Prompt-Padding, Retries). Dieser Artikel zeigt, wie Sie Embedding-Auswahl, Chunking und Evaluation-Setup in produktiven RAG-Pipelines priorisieren.

Embedding-Modellauswahl: Latenz × Recall Matrix

Bei der Auswahl eines Embedding-Modells sind zwei Metriken kritisch: Retrieval Recall@k (ist die richtige Information in den ersten k Chunks?) und P99-Latenz. Der Unterschied zwischen Ada v2 und text-embedding-3-small ist nicht nur Preis — es geht um semantische Granularität. Wenn Ihre Domain eng und terminologielastig ist (Recht, Finanzen), liefert ein Fine-Tuned Sentence-BERT-Variant (768 Dimensionen) besseren Recall als OpenAIs 1536-dimensionales Modell.

Production-Zahlen, die wir sehen: Mit text-embedding-3-large erreichen Sie 64,6 Punkte beim MTEB-Benchmark, aber auf Ihrem Domain-spezifischen Eval-Set (z. B. E-Commerce-Produktdokumentation) fällt das auf 58,2. Coheres embed-multilingual-v3.0 Modell, das wir mit deutschsprachigen Inhalten getestet haben, erreichte 12 % höheren Recall@5 — weil Cohere mehr nicht-englisches Corpus in multilingual Training verwendet. Es gibt keine einzelne Metrik: Bei Batch-Größe 128 beträgt die Embedding-Latenz 230 ms, bei einer einzelnen Anfrage 45 ms. Bei Echtzeit-Suche hat Latenz Vorrang, bei Offline-Indexierung Recall.

In der Praxis testen wir so: Nehmen Sie Ihr Eval-Set (100–200 Fragen + Ground-Truth-Chunks), indexieren Sie mit 3 Modellen, berechnen Sie Recall@1/3/5 und MRR (Mean Reciprocal Rank) für jedes Modell. Nach der Wahl des Gewinnermodells entscheiden Sie, ob Fine-Tuning sinnvoll ist — wenn Recall@5 unter 75 % liegt, ist der ROI positiv. Roibases Datenanalyse-Arbeiten enthalten die Metrik-Infrastruktur, die erforderlich ist, um diese Eval-Pipeline zu implementieren.

Chunking-Strategie: Fixed vs. Semantic vs. Recursive

Die Chunk-Größe ist der kritischste Hyperparameter in RAG. Der Unterschied zwischen einem 512-Token-Chunk und einem 2048-Token-Chunk ist dieser: Ein kleinerer Chunk bietet spezifischeres Retrieval, aber verliert Kontext; ein größerer Chunk erhält Kontext, fügt aber Rauschen hinzu. Auch die Chunk-Überlappungsquote (z. B. 10 %) beeinflusst die Retrieval-Präzision.

Fixed-Size-Chunking (alle 512 Token schneiden) ist am einfachsten, aber wenn Sie mitten im Absatz schneiden, bricht die semantische Integrität zusammen. LangChains RecursiveCharacterTextSplitter funktioniert so: Teilen Sie zuerst bei \n\n (Absatz), wenn das nicht passt, teilen Sie bei \n (Zeile), wenn das nicht passt, teilen Sie bei Punkt. Diese Methode liefert 18 % besseren Recall@3, weil Chunk-Grenzen natürliche Textstrukturen folgen.

Semantic Chunking geht noch einen Schritt weiter: Sie erstellen Chunks basierend auf Embedding-Ähnlichkeit. Wenn sich beispielsweise die Themen in einem Dokument ändern (Kosinus-Ähnlichkeit fällt unter 0,6), starten Sie einen neuen Chunk. LlamaIndex' SemanticSplitterNodeParser verwendet diese Methode. Der Production-Tradeoff: Semantic Chunking erhöht die Indexierungszeit um 40 % (jeder Satz wird eingebettet), aber die Retrieval-Qualität steigt um 9 %.

Chunk-Überlappung: Wie viel ist genug?

Die Überlappungsquote wird typischerweise zwischen 10–20 % gehalten. Ein 512-Token-Chunk mit 50-Token-Überlappung bedeutet, dass ein Satz in zwei Chunks angezeigt werden kann. Mit steigender Überlappung wächst die Index-Größe (Speicherkosten), aber in Edge-Cases verbessert sich die Retrieval-Qualität. In unseren Tests ist 15 % Überlappung der optimale Punkt: Mehr bringt nur noch geringe Verbesserungen.

Die Überlappungsstrategie ist auch wichtig: Sliding Window (jeder Chunk rückt um 50 Token vor) oder Paragraph-Aware Overlap (Überlappung nur am Absatzanfang)? Paragraph-Aware Overlap erzeugt 7 % weniger Index-Größe, erhält aber die gleiche Retrieval-Qualität.

Eval-Setup: Offline-Metriken müssen die Production abbilden

Der größte Fallstrick bei RAG-Evaluation ist dieser: Offline-Metriken sehen gut aus, aber in der Production erleben Sie eine Halluzinations-Explosion. Der Grund: Ihr Eval-Set repräsentiert nicht die Production-Query-Verteilung. Unsere Empfehlung: Nehmen Sie 200 zufällige Queries aus Production-Logs und kennzeichnen Sie manuell die Ground-Truth-Chunks. Diese 4-Stunden-Arbeit gibt Ihnen 6 Monate lang korrekte Orientierung.

Die zu messenden Metriken:

MetrikDefinitionZiel
Recall@kIst die richtige Information in den ersten k Chunks?>80 % (k=5)
MRRDurchschnittliche Rangfolge des richtigen Chunks>0,7
Context PrecisionWie viel % der abgerufenen Chunks sind relevant>60 %
Answer RelevancyIst die LLM-Antwort auf die Frage bezogen? (LLM-as-Judge)>85 %
FaithfulnessWurde die LLM-Antwort nur aus dem Context generiert?>90 %

Für Context Precision und Faithfulness verwenden wir LLM-as-Judge: Wir fragen GPT-4o-mini „Ist dieser Chunk relevant für die Frage?" und erhalten einen Score von 0–1. Diese Methode zeigt 89 % Korrelation mit Human Evaluation (in unserem internen Test) und kostet 1/50 der Human Evaluation.

In der Production müssen Sie kontinuierliche Evaluation betreiben: Führen Sie jeden 1000. Query durch Ihre Eval-Pipeline aus, indem Sie zufällig 10 Queries auswählen. Wenn die Recall sinkt, erhalten Sie eine Warnung. Dieses Setup kann leicht mit Prometheus + Grafana implementiert werden — Retrieval-Latenz, Chunk-Anzahl und LLM-Token-Nutzung können auf demselben Dashboard nachverfolgt werden.

Hybrid Search: Dense + Sparse Retrieval kombiniert

Pure Dense Retrieval (nur Embedding-Ähnlichkeit) verpasst manchmal genaue Begriffsübereinstimmungen. Wenn ein Nutzer beispielsweise „Q3 2025 revenue" abfragt, liegt der Chunk „third quarter 2025 earnings" semantisch nahe, aber es gibt keine genaue Begriffsübereinstimmung — BM25-ähnliches Sparse Retrieval funktioniert hier besser. Hybrid Search kombiniert beide Methoden: Dense Retrieval holt die Top-50-Chunks, Sparse Retrieval holt die Top-50-Chunks, beide werden mit RRF (Reciprocal Rank Fusion) zusammengeführt.

Vector Databases wie Weaviate und Qdrant unterstützen Hybrid Search nativ. In unseren Tests zeigte Hybrid Search 6 % besseren Recall@10 als pure Dense, aber die Latenz stieg um 18 % (zwei separate Index-Abfragen). In der Production können Sie Hybrid Search basierend auf Query-Komplexität ein- und ausschalten: Wenn die Query 3 Wörter kurz ist, nur Sparse; wenn länger als 10 Wörter, nur Dense; in der Mitte Hybrid.

Der Alpha-Parameter (Dense vs. Sparse-Gewicht) variiert je nach Domain: Im E-Commerce ist Sparse wichtiger (Produktcodes, SKUs), in technischer Dokumentation ist Dense wichtiger (konzeptionelle Ähnlichkeit). Unser Standard-Alpha ist 0,7 (Dense-gewichtet), sollte aber durch A/B-Tests optimiert werden.

Re-Ranking: Precision nach Retrieval erhöhen

Erstes Retrieval holt 50 Chunks, aber alle davon als Context an das LLM zu übergeben ist teuer und fügt Rauschen hinzu. Ein Re-Ranking-Modell (wie Coheres rerank-english-v3.0) bewertet diese 50 Chunks neu nach Query-Relevanz und wählt die relevantesten 5–10 aus. Das Re-Ranking-Modell hat eine andere Aufgabe: Das Embedding-Modell misst allgemeine semantische Ähnlichkeit, der Re-Ranker misst Query-Chunk-Relevanz.

In der Production bietet Re-Ranking 15 % bessere Context Precision, fügt aber 80 ms Latenz hinzu. Der Tradeoff: Wenn Ihre LLM-Kosten hoch sind (Sie verwenden GPT-4), ist der Re-Ranking-ROI positiv. Wenn Sie GPT-4o-mini verwenden, wiegt die Latenz schwerer. In unserem Setup atmen kritische Queries (SLA <500 ms) das Re-Ranking, analytische Queries (Dashboard, Berichte) verwenden es.

Die Re-Ranker-Auswahl ist wichtig: Coheres Modell basiert auf Cross-Encoder, höhere Latenz, aber bessere Genauigkeit. Jina AIs Re-Ranker basiert auf Bi-Encoder, niedrigere Latenz, aber 4 % niedrigere Genauigkeit. In der Production müssen Sie beide testen und basierend auf Latenz/Accuracy-Tradeoff entscheiden.

Cost Profiling: Token-Ökonomie beginnt mit Embedding

In der RAG-Pipeline ist die Kostenverteilung typischerweise (durchschnittlicher Production-Fall):

  • Embedding: 8 %
  • Vector Search: 2 % (Compute)
  • Re-Ranking: 5 %
  • LLM Inference: 85 %

Die Embedding-Kosten erscheinen gering, werden aber bei großen Mengen während der Indexierung berechnet. 1 Million Dokumente, durchschnittlich 1000 Token/Dokument, OpenAIs text-embedding-3-large = 1 Milliarde Token = 130 Dollar. Wenn Sie monatlich neu indizieren (nicht inkrementell, sondern vollständig), sind die jährlichen Embedding-Kosten 1560 Dollar. Mit Cohere sind es 1200 Dollar. 23 % Einsparungen.

Aber die echten Kosten sind diese: Wenn die Retrieval-Qualität schlecht ist, macht das LLM Retrys, füllt mit Context auf, korrigiert Halluzinationen — das sind 200 % Token-Steigerungen. 1 Million Queries/Monat, durchschnittlich 2000 Token/Query, GPT-4o kostet 10 Dollar/1 Million Token = 20K Dollar/Monat. Wenn die Retrieval-Qualität um 10 % sinkt, steigt die Retry-Rate um 15 %, die Kosten steigen auf 23K Dollar. Sie versuchen, 30 Dollar bei Embedding einzusparen, verlieren aber 3K Dollar downstream.

Deshalb sollte die erste Frage bei „RAG in Production" lauten: Habe ich ein Retrieval-Evaluation-Setup? Wenn nein, ist die Embedding-Modellauswahl verfrüht. Roibases First-Party-Datenarchitektur umfasst die Log-Infrastruktur, die diese Eval-Pipeline befeuert — Production-Queries, Retrieval-Ergebnisse und LLM-Antworten sollten strukturiert gespeichert werden, damit sie später analysiert werden können.

Incremental Indexing: Wie Sie auf ändernde Daten reagieren

In der Production ist die Dokumentmenge nicht statisch — jeden Tag werden neue Blog-Posts, Produktseiten und Dokumentation hinzugefügt. Full Reindex ist teuer und erfordert Ausfallzeit. Incremental Indexing funktioniert so: Sie betten nur geänderte Dokumente neu ein und fügen sie der Vector Database hinzu. Qdrant und Pinecone unterstützen inkrementelle Inserts nativ.

Die Schwierigkeit: Wenn sich ein Dokument ändert, aktualisieren Sie nur den Chunk oder das gesamte Dokument? Wenn sich die Chunk-Grenzen ändern (neuer Absatz hinzugefügt, Chunk-Größe ändert sich), müssen Sie alle Chunks des Dokuments neu berechnen. Unsere Strategie: Wir verfolgen die Dokument-Version (Hash), wenn sich die Version ändert, löschen und fügen wir alle Chunks neu ein. Diese Methode führt zu 3 % zusätzlichem Reindex, garantiert aber Konsistenz.

Die Lösch-Strategie ist auch wichtig: Wenn Sie alte Chunks nicht aus der Vector Database löschen, wird der Index beschmutzt und die Relevance sinkt. Aber auch das Hinzufügen von TTL zu jedem Chunk ist Overhead. Unsere Lösung: Wir fügen doc_id und version zu jedem Chunk hinzu, und wenn ein Dokument aktualisiert wird, lös