DE ▾
API-Schlüssel erhalten

Was bedeutet OpenAI-kompatibel für eine API?

Eine API gilt als OpenAI-kompatibel, wenn du ein OpenAI SDK auf ihre URL zeigen, den Schlüssel austauschen und deinen bestehenden Code weiterarbeiten lassen kannst. Die Bezeichnung beschreibt das Übertragungsformat, nichts weiter.

Aktualisiert

Zwei verschiedene Maschinen, die über einen Standardanschluss verbunden sind, veranschaulichen ein gemeinsames API-Format

Wichtige Punkte

  • Das Label umfasst URL-Pfade, JSON-Anfrage- und Antwortstrukturen, Bearer-Auth und SSE-Streaming.
  • Es sagt nichts darüber aus, welches Modell antwortet, wie es sich verhält oder was es kostet.
  • Das Umschalten bedeutet meist, zwei Werte zu ändern: die Basis-URL und den API-Schlüssel.
  • Teste Streaming, Tools, JSON-Modus und Fehlercodes, bevor du dich auf einen Anbieter verlässt.

Die kurze Antwort

Wenn ein Anbieter sagt, seine API sei openai-kompatibel, bedeutet das, dass er dieselben HTTP-Anfragen empfängt, die die OpenAI-Client-Bibliotheken senden, und Antworten in derselben Struktur zurückgibt. Du behältst deinen Code, änderst die Base URL und den Schlüssel, und die Anfrage geht an einen anderen Server.

Das ist das ganze Versprechen. Es ist eine Aussage über die Schnittstelle, wie wenn man sagt, zwei Ladegeräte nutzen denselben Stecker. Es verrät dir nicht, was am anderen Ende des Kabels hängt. Das Modell, seine Sicherheitsregeln, sein Preis und seine Limits werden alle vom Anbieter festgelegt und unterscheiden sich stark.

Was das Label tatsächlich abdeckt

In der Praxis ist OpenAI-Kompatibilität eine kurze Liste konkreter Dinge. Wenn ein Anbieter alles unterstützt, läuft die meiste Client-Code unverändert.

  • Pfade. Chat-Anfragen gehen an POST /v1/chat/completions und die Modellliste kommt von GET /v1/models.
  • Auth. Der Schlüssel wird in einem Authorization: Bearer Header übertragen.
  • Anfragekörper. Ein model-String, ein messages-Array von Objekten mit role und content sowie optionale Sampling-Felder wie temperature, top_p, stop und seed.
  • Antwortkörper. Ein choices Array mit der Assistenten-Nachricht, ein finish_reason und ein usage Objekt mit Token-Anzahlen.
  • Streaming. Mit stream: true sendet der Server Server-Sent Events, jedes mit einem kleinen JSON-Delta, endend mit einem Finalmarker.
  • Optionale Funktionen. Function Calling, JSON-Modus und ähnliche Felder, wo der Anbieter sich entscheidet, sie zu unterstützen.

Da so viele Tools für dieses Format geschrieben wurden, wurde es zu einem beliebten Ziel. Editoren, Agent-Frameworks, Roleplay-Frontends und einfache Skripte ermöglichen alle die Eingabe einer benutzerdefinierten Basis-URL, und das ist alles, was sie benötigen.

Warum ein Format zum gemeinsamen Ziel wurde

Das Chat-Completions-Format verbreitete sich, weil es einfach war und früh ankam. Ein Tool-Autor, der es einmal unterstützt, erreicht viele Backends, und ein Backend-Autor, der es einmal unterstützt, erreicht viele Tools. Das ist ein guter Deal für beide Seiten, daher blieb das Format bestehen, auch bei Diensten, die nichts mit dem Unternehmen zu tun haben, das es entworfen hat.

Für dich als Entwickler hat das eine praktische Bedeutung. Dein Code benötigt keine andere Integration für jeden Anbieter. Du kannst einen Prototyp am Nachmittag zwischen Endpunkten verschieben, zwei Modelle auf denselben Prompts vergleichen oder einen zweiten Anbieter als Fallback halten, wenn der erste langsam ist. Die Kosten für eine Änderung deiner Entscheidung sind gering, und das macht es einfacher, einen neuen Dienst auszuprobieren, ohne dich festzulegen.

Die Kehrseite ist, dass die gemeinsame Oberfläche echte Unterschiede verbirgt. Da das Wechseln so einfach ist, ist es verlockend anzunehmen, dass alles hinter der URL äquivalent ist. Das ist es nicht, und die folgenden Abschnitte zeigen, wo die Lücken normalerweise auftreten.

Was es dir nicht verrät

Hier sind die Überraschungen. Das Label lässt alles aus, was darüber entscheidet, ob die API für deine Arbeit nützlich ist.

Das Modell dahinter

Ein kompatibler Endpunkt kann jedes Modell bedienen. Manche bedienen Open-Weight-Modelle, manche leiten zu mehreren Anbietern weiter, manche verpacken ein proprietäres Modell. Kompatibilität bedeutet nicht, dass der Dienst von OpenAI betrieben wird, und sie bedeutet nicht, dass sich das Modell wie eines ihrer Modelle verhält. Der Modellname, den du in model übergibst, ist nur ein String, den der Anbieter definiert.

Verweigerungsverhalten

Inhaltsregeln gehören zum Modell und zum Anbieter, nicht zum Protokoll. Zwei kompatible APIs können auf denselben Prompt entgegengesetzt antworten. Wenn dein Use Case Fiktion, Roleplay oder andere rechtlich zulässige Erwachseneninhalte umfasst, prüfe, was der Anbieter zu Verweigerungen sagt, bevor du etwas verdrahtest.

Feature-Tiefe

Einige Anbieter implementieren nur Chat. Andere fügen Tools, JSON-Modus, Log-Wahrscheinlichkeiten oder zusätzliche Endpunkte hinzu. Ein Client, der ein Feld sendet, das der Server ignoriert, schlägt nicht immer laut fehl, daher ist eine stille Diskrepanz möglich.

Limits, Preise und Fehler

Ratenlimits, Kontextlänge, maximale Körpergröße und Preis pro Token sind alle Anbieterentscheidungen. Fehlerkörper unterscheiden sich auch im Detail, selbst wenn die HTTP-Statuscodes übereinstimmen, daher sollte Retry-Logik auf Statuscodes und Header basieren, nicht auf Nachrichtentext.

Ein schneller Kompatibilitätstest

Du kannst einen Anbieter in wenigen Minuten mit drei Anfragen verifizieren. Ersetze den Schlüssel durch deinen eigenen. Dieses Beispiel verwendet die Base URL dieser Seite.

curl https://api.kimicode.top/v1/models \
  -H "Authorization: Bearer YOUR_API_KEY"

curl https://api.kimicode.top/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "uncensored",
    "messages": [{"role": "user", "content": "Reply with the word ready."}]
  }'

Der erste Aufruf bestätigt den Schlüssel und listet Modell-IDs auf. Der zweite prüft die Chat-Struktur. Teste dann die Teile, von denen deine Anwendung abhängt: füge "stream": true hinzu und beobachte inkrementelle Chunks, übergebe ein tools Array, wenn du Function Calling nutzt, und setze response_format auf {"type":"json_object"}, wenn du parsebare Ausgaben benötigst.

Löse auch absichtlich einen Fehler aus, z. B. einen falschen Schlüssel. Du möchtest einen sauberen HTTP-Status und einen JSON-Fehlerkörper sehen, den dein Client verarbeiten kann.

Der gleiche Aufruf in Node

Das JavaScript SDK benötigt dieselben zwei Werte. Hier ist ein Streaming-Aufruf, der die Struktur ist, die die meisten Chat-Schnittstellen nutzen.

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.kimicode.top/v1",
  apiKey: process.env.API_KEY,
});

const stream = await client.chat.completions.create({
  model: "uncensored",
  stream: true,
  messages: [{ role: "user", content: "Name three uses of SSE." }],
});

for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}

Wenn dies Text wortweise ausgibt, funktioniert der Streaming-Pfad Ende-zu-Ende. Dieselbe Schleife funktioniert bei jedem kompatiblen Anbieter, was der gesamte Punkt des Formats ist.

Wie das Wechseln im Code aussieht

Mit dem offiziellen Python SDK ist die Änderung zwei Konstruktoren-Argumente. Der Rest deines Programms bleibt, wie er war.

from openai import OpenAI

client = OpenAI(
    base_url="https://api.kimicode.top/v1",
    api_key="YOUR_API_KEY",
)

resp = client.chat.completions.create(
    model="uncensored",
    messages=[{"role": "user", "content": "Summarize SSE in one sentence."}],
)
print(resp.choices[0].message.content)

Das Node SDK ist dieselbe Idee mit baseURL und apiKey Optionen. Viele Tools lesen OPENAI_BASE_URL und OPENAI_API_KEY aus der Umgebung, sodass du manchmal wechseln kannst, ohne Code zu berühren.

Denke daran, auch den Modell-String zu ändern. Eine Anfrage, die ein Modell benennt, das der neue Server nicht hostet, schlägt fehl, und das ist der häufigste erste Fehler.

Wo die API dieser Seite passt

Dieser Dienst ist eine gehostete, rein textbasierte API, die dem OpenAI-Format folgt. Sie betreibt ein Open-Weight-Modell, betrieben von einem unabhängigen Anbieter und abgestimmt darauf, ohne Inhaltsverweigerungen für rechtlich zulässige Erwachsenennutzung zu antworten. Es ist nicht die offizielle API eines Modell-Anbieters und es leitet nicht zwischen Anbietern weiter. Die Modell-ID ist uncensored.

Es unterstützt Streaming über SSE mit Nutzungsangabe am Ende, Tool Calling, JSON-Modus und leitet Temperatur, top_p, stop, seed und die Strafen durch. Das Kontextfenster beträgt 100.000 Token für Prompt und Completion zusammen. Es generiert keine Bilder oder Audio und bietet keine Embeddings oder Fine-Tuning. Eine Regel ist fest: keine sexuellen Inhalte, die Minderjährige einbeziehen.

Abrechnung ist Prepaid und gemessen: $0,15 pro 1M Input-Token und $0,50 pro 1M Output-Token, ohne Abonnement. Du siehst die Zahlen auf der Preisseite, und die Dokumentation führt eine erste Anfrage durch. Wenn du es ohne Bezahlung ausprobieren möchtest, können neue Konten ein $0,50 Testguthaben mit einem Klick auf der API-Schlüssel-Seite beanspruchen.

Häufige Kompatibilitätsfallen

  1. Falsche Base URL. Die URL muss bei /v1 enden. Clients hängen selbst /chat/completions an. Wenn du das bereits in der Base URL hinzufügst, führt das zu einem 404-Fehler.
  2. Nicht unterstützte Parameter. Wenn eine Bibliothek ein Feld sendet, das der Server nicht kennt, prüfe, ob es abgelehnt oder stillschweigend verworfen wird, und entferne es anschließend.
  3. Streaming und Parallelität. Eine gestreamte Anfrage belegt einen Concurrency-Slot, bis das Streaming endet. Wenn deine App viele Streams öffnet, kannst du ein 429-Fehler mit dem Code concurrency erhalten, auch wenn deine Anzahl der Anfragen pro Minute niedrig ist.
  4. Wiederholung bei 429. Behandle 429 als Signal zum Warten. Wenn ein Retry-After-Header vorhanden ist, halte dich daran.
  5. Token-Zählung. Gehe nicht davon aus, dass der Tokenizer eines anderen Anbieters übereinstimmt. Lies das usage-Objekt in der Antwort, um die Zahlen zu erhalten, für die du bezahlt wirst.

Keines dieser Probleme ist schwer zu beheben, sobald du weißt, wonach du suchen musst, und die meisten lassen sich auf eine sorgfältige Lektüre der ersten Fehlermeldung reduzieren.

Fragen und Antworten

Ist eine OpenAI-kompatible API von OpenAI?

Nein. Der Begriff beschreibt das Anfrage- und Antwortformat. Viele unabhängige Anbieter halten sich daran, und jeder betreibt seine eigenen Modelle.

Kann ich das OpenAI Python- oder Node-SDK damit verwenden?

Ja. Setze die Basis-URL und den API-Schlüssel im Client-Konstruktor und verwende die vom Anbieter bereitgestellte Modell-ID. Für diesen Service lautet sie uncensored.

Funktionieren alle OpenAI-Funktionen auf einer kompatiblen API?

Nicht unbedingt. Anbieter entscheiden selbst, welche Funktionen sie implementieren. Hier erhältst du Chat-Vervollständigungen, Streaming, Function Calling und JSON-Modus, aber keine Bilder, Audio oder Einbettungen.

Bedeutet Kompatibilität dieselben Antworten wie ein anderes Modell?

Nein. Antworten hängen vom Modell und den Regeln des Anbieters ab. Teste mit deinen eigenen Prompts, anstatt ähnliches Verhalten vorauszusetzen.

Dein Schlüssel ist nur ein Formular entfernt

Erstelle ein Konto, kopiere den Schlüssel, ändere die Basis-URL. Das ist die gesamte Einrichtung.

API-Schlüssel erhalten