Auf dieser Seite: Drei Schmerzpunkte · Vergleichsmatrix · Latenz & Kosten · Batchgröße-Sweep · Cache-Schlüssel · Fehler-Fallback · FAQ
Dieses Playbook richtet sich an RAG-Teams, die auf einem Mac mini M4 indexieren. Es ergänzt die Architekturhinweise in Lokales RAG: Chunking, Embedding-Batches und Vektorkontingente, die Engine-Wahl in USearch, FAISS-CPU und sqlite-vec auf dem M4 sowie die multimodale Matrix in CLIP/SigLIP mit ONNX Runtime CoreML EP. Wenn ihr Traces exportiert, halten OTel-GenAI-Felder die Buchhaltung sauber.
Drei Schmerzpunkte vor der Wahl
1. Versteckte Kosten: die API rechnet pro Million Tokens, lokal zahlt ihr Strom, Speicherspitze und Stundensatz des Mac. 2. Drift-Risiko: wer Modelle, Dimensionen oder Quantisierungen wechselt, ohne den Index zu invalidieren, mischt unvergleichbare Vektoren — Recall@k bricht stillschweigend ein. 3. Datenklasse: sensible Korpora dürfen die Maschine nicht verlassen, dann fällt die API als Default aus und nur ein lokaler ONNX-Pfad mit CoreML EP bleibt. Diese drei Punkte sind keine Meinungen, sondern Eingangsbedingungen für jede Auswahl.
Vergleichsmatrix: sieben Schlüsselindikatoren
| Indikator | OpenAI text-embedding-3-small | bge-m3 (ONNX, CoreML EP) |
|---|---|---|
| Native Dimension | 1536, kürzbar (z. B. 512/1024) | 1024, beibehalten oder auf 768 projizieren |
| Quantisierung | nicht zutreffend (Anbieterseite) | FP16 oder INT8 dynamisch |
| Empfohlene Batchgröße M4 | 64–256 Eingaben pro Request | 16–64 Sequenzen, abhängig von Tokens |
| Speicherspitze | vernachlässigbar (Stateless-Client) | 1.0–2.5 GB Unified Memory |
| Marginalkosten | per-Token-Tarif des Anbieters | amortisierter Stundensatz des Mac |
| Datenschutz | Daten verlassen den Knoten | vollständig auf dem Gerät |
| Sprachabdeckung | stark englisch- und mehrsprachig | multilingual mit Long-Context-Fokus |
Latenz und Kosten: wo die Schwellen liegen
Faustregel für 2026: bei sporadischen Updates unter 5 Millionen Tokens pro Tag ist die API meist günstiger, weil keine Maschine warmgehalten werden muss. Zwischen 5 und 50 Millionen Tokens liegt die Grauzone — hier entscheiden Datenschutzklasse und Latenzanforderung. Über 50 Millionen Tokens täglich oder bei strikter On-Device-Pflicht gewinnt bge-m3 auf einem dedizierten Mac M4. Plant zwei Budgetzeilen: API-Kosten pro Million Tokens und Stundensatz des Knotens × Auslastung. Erst die Schnittpunkte liefern eine ehrliche Empfehlung; reine Listenpreis-Vergleiche täuschen ohne Auslastungszahl.
Batchgröße-Sweep: ausführbare Methodik
Sweept Batchgrößen 8, 16, 32, 64, 128 mit fester Sequenzlänge (z. B. 512 Tokens) und protokolliert p50/p95-Latenz, Speicherspitze, Durchsatz in Embeddings/Sekunde sowie Fehlerrate. Bei der API limitiert oft das Anbieter-RPM, lokal limitiert die Speicherspitze. Wählt den Knick im Durchsatz, nicht das Maximum — dort kollabiert p95 typischerweise zuerst.
# Skizze: Sweep-Lauf, Werte als CSV
for B in 8 16 32 64 128; do
EMBED_BATCH=$B EMBED_DIM=512 \
python sweep.py --model bge-m3-onnx --ep coreml --seq 512
done | tee sweep.csvCache-Schlüssel: Drift kanonisieren
Ein robuster Cache-Schlüssel ist sha256(modellname || dimension || quantisierung || tokenizer-version || normalisierter_text). Jede Änderung — Modellupgrade, Dimensionswechsel, FP16 → INT8, neuer Tokenizer — erzeugt einen neuen Schlüsselraum und damit einen sauberen Reindex. Verwendet niemals nur den Roh-Text als Schlüssel; ein stiller Modellwechsel mischt sonst unvergleichbare Vektoren in denselben Index. Schreibt die fünf Felder in den Schlüssel, in eine Tabelle embeddings_meta und in jede Trace-Zeile, damit Drift im Postmortem in Sekunden auffindbar ist.
Fehler-Fallback: typisierter Envelope
Bei Anbieter-429, 5xx oder Timeout darf die Pipeline nicht stillschweigend wiederholen. Liefert ein kurzes JSON-Envelope mit error_class, retry_after_ms, route und fallback_used; optional schaltet ein Schaltkreis auf bge-m3 lokal mit reduzierter Dimension um, bis das Cool-down-Fenster geschlossen ist. Loggt jede Umschaltung als zählbares Ereignis, damit Kostenmodelle nicht heimlich kippen. Ein Index mit zwei Fallback-Schreibern (API primär, lokal sekundär) ist akzeptabel, sofern der Cache-Schlüssel die Quelle codiert und nachgelagerte Suchen die Vektoren nicht mischen.
FAQ & Remote-Mac-Abnahme
Welche Dimension soll ich wählen? Für allgemeines RAG reichen 512 oder 768 Dimensionen; 1024 lohnt nur, wenn Recall@k auf eurem eingefrorenen Eval-Set messbar steigt. Index- und Speicherkosten skalieren linear mit der Dimension, daher kostet jede unbegründete Erhöhung Geld auf Dauer. Lohnt sich CoreML EP wirklich? Auf dem M4 verschiebt der Provider matmul-lastige Schichten auf Neural Engine und GPU; der Gewinn ist bei stabiler Eingabeform am höchsten und sinkt mit stark variabler Sequenzlänge. Wie viele Worker pro Mac? Beginnt mit einem Worker pro physischem Performance-Cluster und steigert nur, wenn die Speicherspitze unter 70 % bleibt und die Throttle-Rate des Systems leer bleibt. Wie nehme ich auf einem gemieteten Knoten ab? Soakt 60 Minuten, snapshottet ENV, sweep-CSV, p95-Latenz, Speicherspitze, Fehlerquote und Stundenkosten — diese sieben Felder sind die zitierbare Evidenz für jedes Postmortem. Was ändert sich bei mehrsprachigen Korpora? Long-Context-Modelle wie bge-m3 schlagen kürzbare API-Embeddings oft schon ab gemischtem Deutsch-Englisch-Korpus, sofern Recall@k konsequent gemessen wird. Kombiniert das mit den Schwellen aus Multi-Modell-Routing & Kostenmatrix und der Vektorindex-Wahl in Vektorindex-Matrix.
Öffentliche Seiten: Preise einsehen, SKUs auf Kaufen vergleichen und weitere Operator-Artikel im Tech-Blog lesen — ohne Login. Vertiefende Produkt-Dokumentation steht im Hilfezentrum.