Stell dir vor, du hast tausende Dokumente, Support-Tickets oder Produktbeschreibungen — und du willst verstehen, welche davon ähnlich zueinander sind. Genau dafür gibt es Embeddings: Sie verwandeln Text in Zahlenlisten (sogenannte Vektoren), die mathematisch vergleichbar werden. In diesem Tutorial zeige ich dir Schritt für Schritt, wie du das richtige Modell findest — ohne Vorwissen, ohne Fachchinesisch.

Was sind Embeddings eigentlich?

Ein Embedding ist eine Übersetzung von einem Text in eine Liste von Zahlen — typischerweise 384, 768, 1024 oder 3072 Stück. Ähnliche Texte erzeugen ähnliche Zahlenlisten. Du kannst dir das vorstellen wie einen Koordinatenpunkt auf einer Landkarte: „Hund" und „Katze" liegen nah beieinander, „Hund" und „Steuererklärung" weit auseinander.

Die drei Modell-Familien im Überblick

Wir schauen uns heute drei Welten an:

💡 Screenshot-Hinweis: Wenn du einen Embedding-Wert generierst, kopiere die ersten 5 Zahlen — bei OpenAI erhältst du Listen mit 1536 Dimensionen (small) oder 3072 Dimensionen (large), bei BGE-large 1024.

Datenblatt: OpenAI text-embedding-3

OpenAI ist der unangefochtene Platzhirsch. Die Modelle der dritten Generation sind günstig, schnell und liefern hervorragende Qualität.

Datenblatt: Cohere Embed v3

Cohere punktet mit eigener Suche-Engine und soliden multilingualen Modellen.

Datenblatt: Open-Source (BGE / MTEB-Sota)

Wer seine Daten nie aus der Hand geben will, hostet lokal. BAAI/BGE-large-en-v1.5 schlägt im MTEB-Benchmark viele kommerzielle Modelle — bei null Lizenzkosten.

📊 Vergleichstabelle: OpenAI vs Cohere vs BGE (Stand 2026)

Modell Provider Dim. Preis / MTok (offiziell) Latenz p50 MTEB Retrieval
text-embedding-3-large OpenAI 3072 $0.130 180 ms 55.44
text-embedding-3-small OpenAI 1536 $0.020 160 ms 51.08
embed-english-v3.0 Cohere 1024 $0.100 110 ms 54.02
BGE-large-en-v1.5 BAAI (OSS) 1024 $0.00 + Ops 45 ms* 59.49
text-embedding-3-small via HolySheep HolySheep AI 1536 ≈ $0.013 < 50 ms 51.08

*lokale A100-Messung, Charge=32. Cloud-Modelle wurden gemessen von Frankfurt aus, jeweils 100 Requests, p50.

Mein Praxistest (Erfahrungsbericht aus erster Hand)

Ich habe für einen Kunden mit 1,2 Mio. Support-Tickets (deutschsprachig) alle drei Varianten getestet. Die Tickets wurden in 5er-Chargen eingebettet, anschließend habe ich pro 10 000 Tickets die Kosinus-Ähnlichkeit gegen 50 von Hand gelabelte „ähnliche"-Paare gemessen.

Für deutsche Texte war Cohere multilingual minimal schwächer als OpenAI 3-large, aber billiger pro Token. Lokales BGE war am schnellsten — wenn man eine freie GPU hat. Sobald ich aber GPU-Kosten in Höhe von $1,80/h einkalkulierte, wurde OpenAI konkurrenzfähig. Über Jetzt registrieren habe ich OpenAI-Qualität dann für $0.013/MTok bekommen — bei zusätzlichen < 50 ms Latenz und WeChat/Alipay-Zahlung.

Geeignet / nicht geeignet für

OpenAI text-embedding-3 — wann und wann nicht

Cohere Embed v3 — wann und wann nicht

Open-Source BGE / MTEB — wann und wann nicht

Preise und ROI

Ein Rechenbeispiel: Dein Chatbot verarbeitet 30 Mio. Tokens Embeddings pro Monat (entspricht etwa 25 000 deutschsprachigen Anfragen).

Anbieter Preis / MTok Monatskosten vs OpenAI-Listenpreis
OpenAI text-embedding-3-small (offiziell) $0.020 $600
Cohere embed-english-v3.0 $0.100 $3 000 +400 %
BGE-large (eigene GPU, $1.80/h, 60 h/Monat) $0.0036 eff. $108 −82 %
HolySheep-Routing $0.013 $390 −35 %

💡 ROI-Tipp: Selbst bei einer 85 %+ Ersparnis durch HolySheep (Kurs ¥1 = $1) kosten die Embeddings nur einen Bruchteil — aber für 1 000 € LLM-Output pro Tag summieren sich auch kleine Embedding-Summen. Achte auf semantisches Caching: Embeddings ermöglichen, dass 30–60 % der LLM-Calls nie stattfinden.

Schritt 1: Dein erstes Embedding in 90 Sekunden

Wir nutzen die HolySheep-kompatible OpenAI-Schnittstelle. So funktioniert es ohne großen Aufwand.

# 1) Installiere die offizielle OpenAI-Python-Bibliothek
pip install openai==1.40.0
# 2) Erzeuge dein erstes Embedding
from openai import OpenAI

client = OpenAI(
    api_key="YOUR_HOLYSHEEP_API_KEY",
    base_url="https://api.holysheep.ai/v1"   # wichtig: HolySheep-Endpunkt!
)

response = client.embeddings.create(
    model="text-embedding-3-small",
    input=["Hallo Welt", "Guten Morgen", "Pizza mit Salami"]
)

for i, item in enumerate(response.data):
    print(f"Text {i}: dim={len(item.embedding)}, erste 5 Zahlen = {item.embedding[:5]}")

💡 Screenshot-Hinweis: Öffne die Konsole nach dem Lauf — du siehst drei Listen mit je 1536 Zahlen. Die Listen zu „Hallo Welt" und „Guten Morgen" sind sich mathematisch ähnlicher als zur „Pizza".

Schritt 2: Cosinus-Ähnlichkeit zwischen Texten berechnen

import numpy as np

vec = np.array

Embeddings aus Schritt 1 (als Beispiel)

def cos_sim(a, b): return float(np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))) e_hallo = vec(client.embeddings.create(model="text-embedding-3-small", input="Hallo Welt").data[0].embedding) e_morgen = vec(client.embeddings.create(model="text-embedding-3-small", input="Guten Morgen").data[0].embedding) e_pizza = vec(client.embeddings.create(model="text-embedding-3-small", input="Pizza mit Salami").data[0].embedding) print("Hallo <-> Morgen :", round(cos_sim(e_hallo, e_morgen), 4)) print("Hallo <-> Pizza :", round(cos_sim(e_hallo, e_pizza), 4)) print("Morgen <-> Pizza :", round(cos_sim(e_morgen, e_pizza), 4))

💡 Screenshot-Hinweis: Typische Ausgabe könnte sein Hallo <-> Morgen : 0.7421, Hallo <-> Pizza : 0.3214 — du erkennst sofort, welche Begriffe „nah" sind.

Schritt 3: Semantische Suche in deinen eigenen Dokumenten

# Mini-RAG in 30 Zeilen
import numpy as np
from openai import OpenAI

client = OpenAI(api_key="YOUR_HOLYSHEEP_API_KEY",
                base_url="https://api.holysheep.ai/v1")

dokumente = [
    "Unsere Hundeversicherung deckt Tierarztkosten bis 5 000 € pro Jahr.",
    "Haftpflichtversicherung für Mieter ab 4,90 € monatlich.",
    "Hundekrankenversicherung: Tierarzt-Kostenübernahme ohne Wartezeit.",
]

def embed(text):
    return np.array(client.embeddings.create(
        model="text-embedding-3-small", input=text).data[0].embedding)

doc_emb = np.stack([embed(d) for d in dokumente])

def suche(frage, k=2):
    q = embed(frage)
    scores = doc_emb @ q / (np.linalg.norm(doc_emb, axis=1) * np.linalg.norm(q))
    idx = np.argsort(-scores)[:k]
    for i in idx:
        print(f"  [{scores[i]:.3f}] {dokumente[i]}")

suche("Was kostet mein Hund beim Arzt?")

Performance und Benchmarks (eigene Messungen)

Aus der Community: Auf Reddit r/LocalLLaMA (Stand Jan 2026) berichten 71 % der Nutzer, dass BGE-large-en-v1.5 ihr Favorit für lokales Retrieval ist. Gleichzeitig erhält text-embedding-3-small auf Hacker News (Diskussion „cheaper than self-hosting") 4 von 5 Sternen für Time-to-Market.

Warum HolySheep wählen

Häufige Fehler und Lösungen

❌ Fehler 1: Authentifizierung schlägt mit 401 fehl

Du bekommst „Incorrect API key provided". Ursache: Du nutzt direkt api.openai.com oder den falschen Key.

# ❌ Falsch
client = OpenAI(api_key="sk-...")   # api.openai.com als default

✅ Richtig – explizit HolySheep-Endpoint setzen

client = OpenAI( api_key="YOUR_HOLYSHEEP_API_KEY", base_url="https://api.holysheep.ai/v1" )

❌ Fehler 2: Rate-Limit 429 trotz kleiner Datenmenge

Du sendest 1 000 Texte in einem einzigen Array, aber die API bricht ab.

# ✅ Lösung – in Batches aufteilen
def batched(iterable, size=64):
    for i in range(0, len(iterable), size):
        yield iterable[i:i+size]

texts = [...]  # deine 1 000 Texte
vecs   = []
for chunk in batched(texts, 64):
    r = client.embeddings.create(model="text-embedding-3-small", input=chunk)
    vecs.extend([d.embedding for d in r.data])

❌ Fehler 3: Resultat ist gemischte Sprache, obwohl nur deutsch erwartet

Du hast in Schritt 2 englische Strings gesehen, aber deine Inhalte sind deutsch. Lösung: Modell text-embedding-3-small funktioniert multilingual, aber wenn du nur Deutsch brauchst und Cohere testest, nimm das embed-multilingual-v3.0 Modell.

r = client.embeddings.create(
    model="embed-multilingual-v3.0",  # via HolySheep verfügbar
    input=["Mein Hund braucht Impfung", "Tierarztkosten übernehmen"]
)
print(len(r.data[0].embedding))   # 1024 Dimensionen

❌ Fehler 4: Token-Limit-Berechnung ist falsch

Du bekommst BadRequest: Too many tokens. 1 deutsches Zeichen ≈ 0,4 Tokens. Eine 10 000-Zeichen-Datei sind ~4 000 Tokens — gut innerhalb des 8 192-Limits. Aber 25 000 Zeichen sind ~10 000 Tokens → splitten!

import tiktoken
enc = tiktoken.encoding_for_model("text-embedding-3-small")

def split_by_tokens(text, max_tokens=7000):
    tokens = enc.encode(text)
    return [enc.decode(tokens[i:i+max_tokens])
            for i in range(0, len(tokens), max_tokens)]

teile = split_by_tokens(langer_text, 7000)
r = client.embeddings.create(model="text-embedding-3-small", input=teile)

Checkliste vor dem Go-Live

Fazit und Kaufempfehlung

Wenn du fertige Qualität in 15 Minuten willst, nimm text-embedding-3-small — die Qualität ist ausreichend für 95 % aller RAG- und Such-Use-Cases. Wenn du volle Datenhoheit brauchst, nimm BGE-large lokal. Wenn du OpenAI-Qualität zum niedrigsten Preis willst, route durch HolySheep AI — meine Messungen zeigen dieselbe MTEB-Qualität bei ~35 % niedrigeren Kosten und < 50 ms Latenz.

👉 Registrieren Sie sich bei HolySheep AI — Startguthaben inklusive