Embedding-Modell: Migration text-embedding-v3 → v4 (einheitlicher Vektorraum) #123
Labels
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: tobias/gwoe-antragspruefer#123
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Kontext
Diskussion aus #105 Clustering: für Antrag-Clustering und #108 Empfehlungen brauchen wir Assessment-Embeddings. Die bereits indexierten Wahlprogramm-Chunks nutzen
text-embedding-v3. Bei gleichem Preis ($0.07/1M Tokens) bietettext-embedding-v4:Kritischer Punkt: v3- und v4-Embeddings sind nicht vergleichbar (unterschiedliche Vektorräume). Wenn Assessments auf v4 gehen und Wahlprogramme auf v3 bleiben, können wir nie Cosine-Distance zwischen Antrag und Programm berechnen — genau das Feature, das #47 Citation-Binding inhaltlich stützt und #108 Empfehlungen ermöglicht.
Entscheidung
Vollständige Migration auf
text-embedding-v4für beide Seiten (Wahlprogramm-Chunks und neue Assessment-Embeddings). Einmaliger Reindex-Kosten ~$0.50 (69 Programme × ~200 Chunks × ~500 Tokens ≈ 7M Tokens).Implementierung
1. Schema-Migration
chunksTabelle: neue Spaltemodel TEXT DEFAULT 'text-embedding-v3'assessmentsTabelle: neue Spaltensummary_embedding BLOBundembedding_model TEXTchunks.modelfür schnellen Filter während Migration2. Code-Änderungen
app/embeddings.py:EMBEDDING_MODEL = "text-embedding-v4", Dimension-Checkapp/embeddings.py: Reindex-Funktion schreibt neue Rows mitmodel='text-embedding-v4'parallel zu bestehenden (zero-downtime)app/analyzer.py: nach erfolgreicher Analyse Assessment-Embedding erzeugen (Titel + Kurzfassung + Themen als gemeinsamer String)WHERE model = <active_model>via Settings-Flag3. Reindex
EMBEDDING_MODEL_ACTIVEflippt von v3 auf v4, alte v3-Rows werden gelöscht4. Cleanup & Doku
templates/methodik.html: v3 → v4 (2 Stellen)Akzeptanzkriterien
summary_embedding IS NOT NULL/api/assessmentliefert Embeddings nicht zurück (sind intern, zu groß für Response)Follow-ups nach Merge
#123 abgeschlossen ✅
Reindex komplett (2026-04-11 20:40 UTC):
Post-Reindex:
docker-compose.yml+.envaufEMBEDDING_MODEL_READ=text-embedding-v4geflipptread=write=v4/methodikzeigt v4,/api/feed.xmlOK,/api/assessmentsOKDELETE FROM chunks WHERE model='text-embedding-v3'+ VACUUMPerformance-Note: Mitten im Lauf habe ich auf Batch-Embedding umgestellt (10 Texte pro API-Call statt 1). Messbarer Speedup: ~7× von ~2.75 min/Programm auf ~23 sec. Gesamter Reindex-Lauf für 66 Programme: ~35 min (nach Umstellung).
Kosten: geschätzt ~$0.50 (11681 chunks × ~500 tokens × $0.07/1M = $0.41, plus 57 assessment-embeddings = vernachlässigbar).
Damit ist #105 (Clustering) und #108 Teil B (Ähnliche Anträge) unblocked. Schließe.