4.6 KiB
Analyse: Retrieval-Unterschiede zwischen Dev und Prod
Datum: 2026-01-12
Version: v4.5.10
Status: 🔴 Kritisch
Problemstellung
Bei identischer Codebasis und identischen Daten liefert das Dev-System Suchergebnisse, während das Prod-System keine Ergebnisse findet.
Identifizierte Ursachen
1. 🔴 KRITISCH: Inkonsistente Collection-Präfix-Konfiguration
Problem: Zwei verschiedene Umgebungsvariablen werden für den Collection-Präfix verwendet:
-
app/config.py(Zeile 24):COLLECTION_PREFIX: str = os.getenv("MINDNET_PREFIX", "mindnet_dev")- Verwendet
MINDNET_PREFIXals Umgebungsvariable - Default:
"mindnet_dev"
- Verwendet
-
app/core/database/qdrant.py(Zeile 47):prefix = os.getenv("COLLECTION_PREFIX") or "mindnet"- Verwendet
COLLECTION_PREFIXals Umgebungsvariable - Default:
"mindnet"
- Verwendet
Auswirkung:
- Retriever verwendet
QdrantConfig.from_env(), dasCOLLECTION_PREFIXliest - Ingestion verwendet
Settings.COLLECTION_PREFIX, dasMINDNET_PREFIXliest - Resultat: Daten werden in verschiedene Collections geschrieben/gesucht:
- Dev:
mindnet_dev_chunks,mindnet_dev_notes,mindnet_dev_edges - Prod:
mindnet_chunks,mindnet_notes,mindnet_edges
- Dev:
2. ⚠️ Mögliche weitere Ursachen
2.1 Unterschiedliche Embedding-Modelle
- Prüfen:
MINDNET_EMBEDDING_MODELin Dev vs. Prod - Auswirkung: Unterschiedliche Vektoren → unterschiedliche Similarity-Scores
2.2 Unterschiedliche Vektor-Dimensionen
- Prüfen:
VECTOR_DIMin Dev vs. Prod - Auswirkung: Dimension-Mismatch → Suche schlägt fehl
2.3 Unterschiedliche Qdrant-Instanzen
- Prüfen:
QDRANT_URL/QDRANT_HOSTin Dev vs. Prod - Auswirkung: Daten liegen in verschiedenen Datenbanken
2.4 Unterschiedliche Score-Thresholds
- Prüfen: Filter-Logik oder Mindest-Scores
- Auswirkung: Ergebnisse werden gefiltert, bevor sie zurückgegeben werden
Diagnose-Checkliste
✅ Sofort prüfen:
-
Collection-Präfix-Verifikation:
# Dev echo $COLLECTION_PREFIX echo $MINDNET_PREFIX # Prod echo $COLLECTION_PREFIX echo $MINDNET_PREFIX -
Qdrant Collections prüfen:
# In beiden Systemen ausführen from app.core.database.qdrant import get_client, QdrantConfig cfg = QdrantConfig.from_env() client = get_client(cfg) print(f"Prefix: {cfg.prefix}") print(f"Collections: {client.get_collections().collections}") -
Embedding-Modell prüfen:
# Dev echo $MINDNET_EMBEDDING_MODEL echo $VECTOR_DIM # Prod echo $MINDNET_EMBEDDING_MODEL echo $VECTOR_DIM -
Qdrant-Verbindung prüfen:
# Dev echo $QDRANT_URL echo $QDRANT_HOST echo $QDRANT_PORT # Prod echo $QDRANT_URL echo $QDRANT_HOST echo $QDRANT_PORT
Lösungsvorschläge
Option 1: Harmonisierung der Umgebungsvariablen (Empfohlen)
Ziel: Eine einzige Umgebungsvariable für den Collection-Präfix verwenden.
Änderungen:
-
app/core/database/qdrant.py:prefix = os.getenv("COLLECTION_PREFIX") or os.getenv("MINDNET_PREFIX") or "mindnet"- Unterstützt beide Variablen (Abwärtskompatibilität)
COLLECTION_PREFIXhat Priorität
-
app/config.py:COLLECTION_PREFIX: str = os.getenv("COLLECTION_PREFIX") or os.getenv("MINDNET_PREFIX") or "mindnet_dev"- Unterstützt beide Variablen
COLLECTION_PREFIXhat Priorität
-
Dokumentation: Klarstellen, dass
COLLECTION_PREFIXdie primäre Variable ist
Option 2: Explizite Konfiguration in .env
Ziel: Beide Systeme verwenden explizit gesetzte COLLECTION_PREFIX Werte.
Dev .env:
COLLECTION_PREFIX=mindnet_dev
Prod .env:
COLLECTION_PREFIX=mindnet
Option 3: Daten-Migration
Ziel: Daten von einer Collection in die andere migrieren.
Vorgehen:
- Identifizieren, welche Collection die "richtigen" Daten enthält
- Daten von Dev nach Prod migrieren (oder umgekehrt)
- Collection-Präfix harmonisieren
Sofortmaßnahmen
- ✅ Prüfen: Welche Collections existieren in beiden Systemen?
- ✅ Prüfen: Welche Umgebungsvariablen sind gesetzt?
- ✅ Prüfen: Welche Collection enthält die Daten?
- ✅ Fix: Collection-Präfix-Konfiguration harmonisieren
- ✅ Test: Retrieval in beiden Systemen verifizieren
Erwartetes Ergebnis nach Fix
- ✅ Beide Systeme verwenden dieselbe Collection-Präfix-Logik
- ✅ Retrieval findet Daten in beiden Systemen
- ✅ Konsistente Konfiguration zwischen Ingestion und Retrieval