Auf einem dedizierten Remote-Mac entscheidet die Embedding-Wahl darüber, ob euer RAG-Stack mit dem Korpus skaliert oder an Kosten und Latenz scheitert. text-embedding-3-small versus bge-m3 mit ONNX Runtime und CoreML EP ist keine Glaubensfrage, sondern eine Matrix aus Batchgröße, Dimension, Quantisierung und Cache-Hygiene.

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 Dimension1536, kürzbar (z. B. 512/1024)1024, beibehalten oder auf 768 projizieren
Quantisierungnicht zutreffend (Anbieterseite)FP16 oder INT8 dynamisch
Empfohlene Batchgröße M464–256 Eingaben pro Request16–64 Sequenzen, abhängig von Tokens
Speicherspitzevernachlässigbar (Stateless-Client)1.0–2.5 GB Unified Memory
Marginalkostenper-Token-Tarif des Anbietersamortisierter Stundensatz des Mac
DatenschutzDaten verlassen den Knotenvollständig auf dem Gerät
Sprachabdeckungstark englisch- und mehrsprachigmultilingual 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.csv

Cache-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.