Embeddings sind da

PrivatAI bietet ab sofort einen OpenAI-kompatiblen Embeddings-Endpunkt unter /api/v1/embeddings. Er ist in Essential und Professional enthalten, kostet 0,10 € pro Million Eingabe-Token, und die Ausgabe ist kostenlos.

Damit schließt sich die häufigste Lücke unserer API: Ein Gespräch ließ sich auf EU-Infrastruktur betreiben — aber sobald das Modell aus Ihren eigenen Dokumenten antworten sollte, mussten Sie für die Embeddings woanders hin. Meist zu einem US-Anbieter, womit der Zweck der Übung dahin war.

Was ein Embedding eigentlich ist

Ein Embedding verwandelt einen Text in eine Liste von Zahlen — einen Vektor — der seine Bedeutung abbildet. Texte mit ähnlicher Bedeutung landen nah beieinander, auch wenn sie kein einziges Wort teilen.

„Die Kündigungsfrist beträgt drei Monate" und „notice period is three months" haben auf Zeichenebene nichts gemeinsam. Als Vektoren liegen sie praktisch aufeinander. Das ist der ganze Trick — und der Grund, warum semantische Suche dort funktioniert, wo Stichwortsuche scheitert.

Diese Vektoren legen Sie in einem Vektor-Index ab. Kommt eine Frage herein, betten Sie auch die Frage ein, suchen die nächstgelegenen gespeicherten Vektoren — und haben genau die Passagen, in denen es wirklich um die Frage geht.

Warum der Endpunkt zustandslos ist — und warum das der Punkt ist

Wir speichern Ihren Text nicht. Wir speichern die Vektoren nicht. Es gibt keinen Upload, keinen Dokumentenspeicher, keinen Index auf unserer Seite und nichts, was hinterher gelöscht werden müsste — weil wir es nie hatten.

flowchart LR
    A[Ihre Dokumente<br/>Ihre Server] -->|Text| B[PrivatAI<br/>/v1/embeddings]
    B -->|Vektoren| C[Ihr Index<br/>Ihre Datenbank]
    C --> D[Ihre Anwendung]

Das ist eine bewusste Entscheidung, kein fehlendes Feature. Die Alternative — Sie laden Ihre Verträge hoch, wir hosten und indexieren sie — hieße, dass wir Ihr sensibelstes Material halten. Und „wir löschen es auf Wunsch" ist ein deutlich schwächeres Versprechen als „es war nie unseres". Ihre Dokumente bleiben in Ihren Systemen, die Vektoren wandern in Ihren Index. Wir sehen den Text genau so lange, wie die Berechnung des Vektors dauert. Die Inferenz läuft bei Scaleway in Frankreich — derselbe EU-Anbieter und dieselbe Region wie bei unseren Chat-Modellen.

Der Preis dafür, ganz offen: Sie brauchen einen Ort für die Vektoren. pgvector auf einem Postgres, den Sie ohnehin betreiben, ist für die meisten Teams die langweilige, richtige Antwort. Qdrant, Weaviate oder eine gehostete EU-Vektordatenbank tun es genauso.

Was Sie damit bauen

Suche über eigene Inhalte, die die Frage wirklich versteht. Handbücher, Verträge, Wikis, Ticket-Historien. Jemand fragt „wie lange habe ich Zeit zu kündigen?" und findet die Klausel zur Kündigungsfrist, ohne das Wort erraten zu haben.

RAG — Antworten, die in Ihren Dokumenten verankert sind. Die relevantesten Passagen abrufen, sie /api/v1/chat/completions als Kontext mitgeben und in der Antwort zitieren. Das Modell hört auf zu raten und fängt an zu belegen — und Sie können jede Aussage zurückverfolgen.

Dubletten finden. Fast identische Support-Tickets, CRM-Einträge oder Produkttexte, die sich nur in der Formulierung unterscheiden. Exakter Abgleich findet davon keinen einzigen.

Klassifizierung und Routing. Ein paar Beispiele pro Kategorie einbetten, dann eingehende Mails oder Tickets dem nächstgelegenen zuordnen. Oft gut genug, ohne irgendetwas zu trainieren — und günstiger, als pro Nachricht ein Modell zu fragen.

Empfehlungen. „Ähnliche Artikel", berechnet aus Bedeutung statt aus Schlagworten, die jemand zu pflegen vergessen hat.

So nutzen Sie ihn

Der Endpunkt ist OpenAI-kompatibel — bestehende Werkzeuge funktionieren, indem Sie nur die Basis-URL ändern.

curl -X POST https://privatai.com/api/v1/embeddings \
  -H "Authorization: Bearer privat_ihr_key" \
  -H "Content-Type: application/json" \
  -d '{
        "model": "qwen3-embedding-8b",
        "input": ["Die Kündigungsfrist beträgt drei Monate.", "Notice period is three months."],
        "dimensions": 1024
      }'

Mit dem OpenAI SDK:

from openai import OpenAI

client = OpenAI(api_key="privat_ihr_key", base_url="https://privatai.com/api/v1")

res = client.embeddings.create(
    model="qwen3-embedding-8b",
    input=["Passage eins", "Passage zwei"],
    dimensions=1024,
)
vectors = [row.embedding for row in res.data]

Mit dem Vercel AI SDK:

import { createOpenAICompatible } from '@ai-sdk/openai-compatible';
import { embedMany } from 'ai';

const privatai = createOpenAICompatible({
  name: 'privatai',
  baseURL: 'https://privatai.com/api/v1',
  apiKey: process.env.PRIVATAI_API_KEY,
});

const { embeddings } = await embedMany({
  model: privatai.textEmbeddingModel('qwen3-embedding-8b'),
  values: ['Passage eins', 'Passage zwei'],
});

Bis zu 2.048 Strings und 1 MB Text pro Anfrage — einen Dokumentenbestand zu indexieren geht im Batch deutlich schneller und günstiger als String für String.

Das Detail, über das alle stolpern: dimensions

Wir bieten zwei Modelle an:

Modell Dimensionen Kürzbar?
qwen3-embedding-8b (Standard) 4096 Ja — 32…4096
bge-multilingual-gemma2 3584 Nein

Beide sind mehrsprachig und beherrschen Deutsch und Englisch. Der praktisch entscheidende Unterschied: Der HNSW-Index von pgvector verweigert Vektoren über 2000 Dimensionen.

Wer also in Postgres indexiert — und das tun die meisten — kann einen rohen 4096- oder 3584-dimensionalen Vektor überhaupt nicht indexieren. qwen3-embedding-8b ist Matryoshka-trainiert, also gezielt so gebaut, dass sich der Vektor kürzen lässt, ohne die Qualität zu ruinieren. Mit dimensions: 1024 passt er, lässt sich indexieren und schnell durchsuchen. Kleinere Vektoren brauchen zudem weniger Speicher und sind schneller zu vergleichen.

bge-multilingual-gemma2 lässt sich nicht kürzen. Wer dort eigene Dimensionen anfragt, bekommt einen klaren 400 statt eines still verschlechterten Index — uns ist ein lautes Scheitern lieber, als dass Sie ein Jahr lang eine Suche betreiben, die klammheimlich schlechtere Treffer liefert.

Eine Regel, und die ist nicht verhandelbar: Mischen Sie niemals Modelle oder Dimensionsgrößen innerhalb eines Index. Vektoren verschiedener Modelle sind nicht vergleichbar — und Vektoren desselben Modells in unterschiedlicher Größe ebenso wenig. Eine Änderung bedeutet, alles Gespeicherte neu einzubetten. Entscheiden Sie einmal, am Anfang.

Was es kostet

0,20 € pro Million Eingabe-Token, bei beiden Modellen, in Essential und Professional. Embeddings haben keine Ausgabe, es gibt also nichts weiter abzurechnen.

Zur Einordnung: Ein 200-seitiges Handbuch sind grob 100.000 Token (etwa zwei Cent), einmalig. Eine Suchanfrage sind ein paar Token. Für den typischen Einsatz als interne Wissensdatenbank ist das Einbetten nicht der Posten, der Ihnen auffallen wird.

Loslegen

Die vollständige Referenz mit Fehlercodes und Limits steht in der API-Dokumentation. Sie brauchen einen API-Schlüssel aus Ihrem Dashboard und eine geänderte Basis-URL. Ansonsten müssen sich Ihre Dokumente nicht bewegen.