
Wie ein moderner RAG-Bot funktioniert
Eine gute RAG-Pipeline ist mehr als „Dokumente in eine Vektordatenbank stecken”. Der grundlegende Flow sieht so aus:
Der Re-Ranking-Schritt ist das Upgrade, das das Ganze deutlich nützlicher macht als eine einfache RAG-Demo. Die Vektorsuche ist schnell und findet semantisch ähnliche Chunks gut, kann aber Passagen liefern, die nur thema-nah, aber nicht direkt nützlich sind. Ein Cross-Encoder liest die Frage und jeden Kandidaten-Chunk zusammen und bewertet, wie gut der Chunk die Frage tatsächlich beantwortet.
Abhängigkeiten installieren
Wir verwenden das OpenAI-Python-SDK, weil Venice eine OpenAI-kompatible API bereitstellt. Dazu nehmen wir Qdrants Python-Client mit FastEmbed-Support:requirements.txt mit denselben Paketen an:
Modelle auswählen
Erstelle eine Dateirag_bot.py und beginne mit Imports, Datenstrukturen, API-URL und Modellnamen:
base_url und API-Schlüssel umziehen kann.
Verfügbare Venice-Modelle kannst du so auflisten:
Venice- und Qdrant-Clients erzeugen
Erstelle einen OpenAI-kompatiblen Venice-Client für Embeddings und Chat-Completions:
Für einen privaten lokalen Bot empfiehlt sich ein persistierter lokaler Pfad:
Dokumente laden und chunken
Für dieses Tutorial soll der Bot lokale Dateien oder Ordner einlesen. Starten wir mit.md-, .rst- und .txt-Dateien:
1000 Zeichen mit 150 Zeichen Überlappung ist ein guter Default für gemischte Markdown- und Textdokumente. Kleinere Chunks können die Präzision erhöhen. Größere Chunks bewahren mehr Kontext. Die richtige Einstellung hängt oft von der Art deiner Dokumente ab.
Dokumente mit Venice embedden
Sobald wir Chunks haben, embedden wir sie in Batches:Vektoren in Qdrant speichern
Bevor du Punkte einfügst, erstelle eine Qdrant-Collection mit der richtigen Vektorgröße. Die Vektorgröße erfährst du am einfachsten, indem du den ersten Batch embeddest undlen(embeddings[0]) nutzt.
source, chunk_index und Inhalt. So wird wiederholtes Ingesting für unveränderte Chunks idempotent.
Kandidaten-Chunks abrufen
Zur Fragezeit embeddet der Bot die Nutzerfrage und fragt Qdrant nach den besten Vektortreffern:limit ist hier die Kandidatenzahl. Sie sollte normalerweise höher sein als die Anzahl der Chunks, die du ans Modell schickst, weil der nächste Schritt sie neu rankt. Ein guter Default ist, 8 Kandidaten abzurufen und die besten 4 ans Chat-Modell zu senden.
Re-Ranking mit FastEmbed
Jetzt fügen wir den Teil hinzu, der das Retrieval deutlich schlauer wirken lässt.- Mit Vektorsuche eine größere Kandidatenmenge abrufen.
- Nur diese Kandidaten lokal neu ranken.
- Die obersten Chunks an das Sprachmodell senden.
candidate_k=8 und top_k=4. Erhöhe candidate_k, wenn die richtige Quelle oft in der Nähe ist, aber nicht in den finalen Kontext kommt.
Antworten mit Venice-Chat-Completions
Sobald der Kontext gewählt ist, formatiere ihn mit Quellnummern:Den Bot ausführen
Wenn du die Teile zu einem Skript zusammenbaust, speichere es alsrag_bot.py. Ein einfacher erster Lauf kann ein paar eingebaute Beispieldokumente verwenden, damit du die Pipeline prüfen kannst, bevor du eigene Dateien einliest:
Nützliche CLI-Optionen
Mach die wichtigsten Retrieval-Stellschrauben als CLI-Optionen verfügbar, damit du den Bot ohne Code-Änderungen tunen kannst:
Für wiederholte lokale Entwicklung ist ein üblicher Flow:
Privacy-Hinweise
Für ein privates RAG-Setup betrachte jede Schicht einzeln:
Der privacy-freundlichste Default für dieses Tutorial ist Venice für Inferenz, lokales Qdrant auf Disk und lokales FastEmbed-Re-Ranking. Das ergibt einen praxistauglichen RAG-Bot, ohne deine Vector-DB-Payloads an einen Drittanbieter zu senden.
Häufige Fehler, auf die du vorbereitet sein solltest
Wenn du Embedding-Modelle wechselst, erstelle die Qdrant-Collection neu. Verschiedene Embedding-Modelle können Vektoren unterschiedlicher Dimension liefern, und Qdrant-Collections erwarten eine feste Vektorgröße.
Wie es weitergeht
Sobald die Basis läuft, sind die wirkungsvollsten Verbesserungen meist:- Dokumentspezifische Loader für PDFs, HTML, Tickets oder interne Wiki-Seiten ergänzen.
- Reichere Metadaten speichern: Titel, Überschriften, Daten, Owner, URLs.
candidate_k,top_k, Chunk-Größe und Überlappung an echten Fragen tunen.- Bewertungsfragen anlegen, um Retrieval-Qualität vor und nach Änderungen zu messen.
- Die finale Venice-Chat-Completion streamen für ein besseres interaktives Chat-Erlebnis.