Zum Inhalt springen
KeuralDocs
Entwickler

Keural API

Senden Sie Anfragen im OpenAI-Chat-Completions-Format mit einem API-Schlüssel.

Rufen Sie in Keural registrierte Modelle im OpenAI-Chat-Completions-Format auf.

Die Basis-URL hat das Format https://<Ihre öffentliche API-Domain>/llm/v1. Die öffentliche API-Domain unterscheidet sich je nach Umgebung. Fragen Sie Ihren Administrator.

MethodePfadBeschreibung
POST/llm/v1/chat/completionsErstellt eine Chat-Vervollständigung (Streaming unterstützt)
GET/llm/v1/modelsListet die mit dem Schlüssel verbundenen Modelle auf
GET/llm/v1/models/{model}Zeigt Informationen zu einem mit dem Schlüssel verbundenen Modell

Pfade für Embeddings, Bildgenerierung, Sprache und die Responses-API werden nicht unterstützt. Anfragen an diese Pfade beantwortet die API mit 404.

Ablauf der Nutzung

SchrittWas zu tun ist
1. Schlüssel ausstellenWählen Sie unter Einstellungen → API ein Modell und erhalten Sie einen Schlüssel. Kopieren Sie die Modell-ID und den Schlüssel.
2. Client verbindenTragen Sie in der App oder im Code Basis-URL, API-Schlüssel und Modell-ID ein.
3. Nutzen und verwaltenAuf demselben Bildschirm sehen Sie die Nutzung und können den Schlüssel bei Bedarf neu ausstellen oder widerrufen.

Voraussetzungen

ElementDetails
Keural-KontoSie benötigen ein Konto, mit dem Sie sich anmelden können.
API-MenüFehlt API unter Einstellungen, bitten Sie Ihren Administrator, die Funktion zu aktivieren.
Berechtigung als OrganisationsmitgliedUm Schlüssel in einem Organisations-Arbeitsbereich zu erhalten, muss der Organisationsadministrator Ihre API-Nutzung erlauben. Siehe API-Berechtigung der Organisationsmitglieder.
Basis-URLVerwenden Sie die öffentliche API-Adresse, die Ihr Administrator mitteilt.
ClientErforderlich ist eine App oder ein SDK, das OpenAI-API-kompatible Verbindungen unterstützt.

API-Schlüssel ausstellen

  1. Öffnen Sie im Kontomenü unten links Einstellungen und wählen Sie API. In der Desktop- und Mobil-App finden Sie den Eintrag in der Gruppe Tools.
  2. Wählen Sie auf der Registerkarte API keys den Arbeitsbereich, zu dem der Schlüssel gehört (persönlich oder Organisation), sowie die Model ID.
  3. Legen Sie bei Bedarf das New key expiration (optional, Korea time) fest. Bleibt das Feld leer, gilt der Schlüssel bis zum Widerruf.
  4. Klicken Sie auf Issue key und bewahren Sie den angezeigten Schlüssel mit Copy key an einem sicheren Ort auf. Der vollständige Schlüssel wird nur in diesem Moment angezeigt und lässt sich nach dem Schließen nicht mehr einsehen.
  • Der Schlüssel ist mit dem gewählten Arbeitsbereich und einem Modell verknüpft. Die Nutzung wird der Person zugeordnet, die den Schlüssel ausgestellt hat.
  • Je Kombination aus Arbeitsbereich und Modell kann nur ein Schlüssel gültig sein. Existiert bereits einer, wird kein weiterer ausgestellt: Stellen Sie ihn neu aus (Rotate) oder widerrufen Sie ihn (Revoke).
  • Verlieren Sie den Schlüssel, können Sie ihn nicht mehr einsehen. Stellen Sie ihn neu aus; der alte Schlüssel funktioniert dann sofort nicht mehr.
  • Erscheint die Meldung, dass keine Modelle verfügbar sind, prüfen Sie mit Ihrem Administrator die Sichtbarkeit der Modelle, Ihren Tarif und die API-Berechtigung der Organisation.

API-Berechtigung der Organisationsmitglieder

Dies verwalten nur Inhaber und Administratoren der Organisation. Damit ein Mitglied im Organisations-Arbeitsbereich Schlüssel erstellen kann, muss der Administrator dies zuvor erlauben. Neue und bestehende Mitglieder sind standardmäßig gesperrt.

Organisationsverwaltung → Organization API besteht aus folgenden drei Bereichen. Fehlt das Menü, ist die API-Funktion deaktiviert oder Ihr Konto hat keine Organisationsverwaltungsrechte.

BereichFunktion
API permissions by userAktiviert oder deaktiviert die API-Berechtigung je Mitglied.
Issued keysZeigt den Status der in der Organisation ausgestellten Schlüssel an und widerruft sie. Der Schlüsseltext ist nicht einsehbar.
API usageZeigt Anfragen und Token-Nutzung der in der Organisation ausgestellten Schlüssel.
AktionErgebnis
Allow API access aktivierenDas Mitglied kann im Organisations-Arbeitsbereich Schlüssel ausstellen.
Allow API access deaktivierenNeue Ausstellungen und Aufrufe mit bestehenden Schlüsseln werden blockiert. Bereits ausgestellte Schlüssel werden nicht automatisch gelöscht; widerrufen Sie sie bei Bedarf unter Issued keys.

Verlässt ein Mitglied die Organisation oder wird es entfernt, werden die von ihm in der Organisation erhaltenen Schlüssel automatisch widerrufen.

Mit einem Client verbinden

Tragen Sie diese drei Werte in Apps ein, die OpenAI-API-kompatibel sind (Chat-Clients, IDE-Erweiterungen, Automatisierungswerkzeuge usw.).

WertEinzutragenBezeichnung in der App
Base URLDie öffentliche API-Adresse, die Ihr Administrator mitgeteilt hat (…/llm/v1)Base URL, API Base, Endpoint, Host
API KeyDer ausgestellte Schlüssel (ohne führende oder nachgestellte Leerzeichen)API Key, Token, Secret Key, Authorization
ModelDie Model ID aus dem Ausstellungsbildschirm. Sie muss exakt mit dem Modell des Schlüssels übereinstimmenModel, Model ID, Model Name
  1. Wählen Sie in den App-Einstellungen das Hinzufügen einer OpenAI-kompatiblen Verbindung (Connection).
  2. Tragen Sie Base URL und API Key ein und speichern Sie.
  3. Wählen Sie in der Modellliste ein Modell. Die Liste zeigt nur das mit dem Schlüssel verbundene Modell.
  4. Senden Sie eine kurze Nachricht, um zu prüfen, ob eine Antwort kommt. Erscheint das ausgestellte Modell in der Modellliste, ist die Verbindung hergestellt.

Die Anfragen lauten wie folgt.

ArtInhalt
Chat-AnfragePOST <Base URL>/chat/completions
ModellabfrageGET <Base URL>/models
Authentifizierungs-HeaderAuthorization: Bearer <ausgestellter Schlüssel>
Inhalts-HeaderContent-Type: application/json

Erste Anfrage

export KEURAL_API_KEY='ihr_ausgestellter_schlüssel'
export KEURAL_BASE_URL='https://<ihre-api-domain>/llm/v1'
export MODEL_ID='modell-id_aus_dem_ausstellungsbildschirm'

curl "$KEURAL_BASE_URL/chat/completions" \
  -H "Authorization: Bearer $KEURAL_API_KEY" \
  -H 'Content-Type: application/json' \
  -d "{\"model\":\"$MODEL_ID\",\"messages\":[{\"role\":\"user\",\"content\":\"Hallo.\"}]}"

Das model im Anfragekörper muss mit dem Modell des Schlüssels übereinstimmen. Steht ein Pfadpräfix davor, wie etwa provider/Modell-ID, wird nur der Teil nach dem letzten / verglichen. Stimmt es nicht überein, liefert die API 403. Die Antwort enthält im Feld model immer die Modell-ID des Schlüssels.

from openai import OpenAI
import os

client = OpenAI(
    api_key=os.environ["KEURAL_API_KEY"],
    base_url=os.environ["KEURAL_BASE_URL"],
)
res = client.chat.completions.create(
    model=os.environ["MODEL_ID"],
    messages=[{"role": "user", "content": "Hallo."}],
)
print(res.choices[0].message.content)

Unterstützte Anfragefelder

Die API akzeptiert nur diese 18 Felder auf oberster Ebene. Andere Felder führen zu 400. Optionale Felder mit dem Wert null gelten als nicht gesendet.

FeldRegel
modelPflicht. Die Modell-ID des Schlüssels
messagesPflicht. 1 bis 4.096 Einträge
stream · stream_optionsstream_options wird nur mit stream: true gesendet. Unterstützt include_usage.
toolsBis zu 128. Der Funktionsname verwendet [A-Za-z0-9_-], 1 bis 64 Zeichen
tool_choicenone · auto · required · eine bestimmte Funktion. required setzt tools voraus.
parallel_tool_callsUnterstützt das Modell es nicht, liefert die API 400
response_formattext · json_object · json_schema
max_tokens · max_completion_tokensSenden Sie nur eines der beiden. Ohne Angabe gilt 4.096 (oder die Modellgrenze, falls niedriger). Überschreitet der Wert die Modellgrenze, liefert die API 400.
temperature0 bis 2. Unterstützt das Modell es nicht, liefert die API 400
top_p0 bis 1
frequency_penalty · presence_penalty-2 bis 2
stopEine Zeichenkette oder ein Array mit maximal 4 Einträgen
seedGanzzahl
userMaximal 256 Zeichen
nNur 1

Nachrichten

RolleAkzeptierte Felder
system · developercontent, name
usercontent (Zeichenkette oder Array aus Text- und Bildteilen), name
assistantcontent, name, refusal, tool_calls
toolcontent, tool_call_id
  • Eine tool-Nachricht beantwortet jede id der vorherigen tool_calls nur einmal.
  • Bildteile (image_url) sind nur in user-Nachrichten von Modellen erlaubt, die Bilder verarbeiten. Verwenden Sie eine http- oder https-Adresse oder eine Base64-Data-URI im Format PNG, JPEG, GIF oder WebP. detail ist auto, low oder high.

Anfragekörper

ElementGrenze
Content-Typeapplication/json
Größe1 MiB
JSON-StrukturEin einziges Objekt auf oberster Ebene, Verschachtelungstiefe höchstens 64, keine doppelten Schlüssel
Dauer der AnfrageHöchstens 600 Sekunden

Verstoßen Sie gegen die Regeln für den Körper, lautet die Antwort 400, und param ist body.

Streaming

Mit "stream": true in der Anfrage antwortet die API per SSE. Jeder Abschnitt kommt als Ereignis data: ..., am Ende folgt data: [DONE]. Mit "stream_options": {"include_usage": true} wird kurz vor [DONE] noch ein Abschnitt mit der Token-Nutzung gesendet.

Mit include_usage enthalten alle Abschnitte usage: null, und der letzte Nutzungsabschnitt hat ein leeres Array choices. Nicht gestreamte Antworten enthalten usage nur, wenn Eingabe- und Ausgabe-Token bestätigt sind.

Die id der Antwort hat das Format chatcmpl-<x-request-id>. Alle Antworten enthalten den Header x-request-id.

Tritt während des Streamings ein Fehler auf, kommt ein data:-Ereignis mit dem Fehler-JSON, und die Verbindung endet ohne [DONE]. Überschreitet ein Abschnitt 1 MiB oder die Antwort 16 MiB, endet die Verbindung mit 503.

curl -N "$KEURAL_BASE_URL/chat/completions" \
  -H "Authorization: Bearer $KEURAL_API_KEY" \
  -H 'Content-Type: application/json' \
  -d "{\"model\":\"$MODEL_ID\",\"messages\":[{\"role\":\"user\",\"content\":\"Hallo.\"}],\"stream\":true,\"stream_options\":{\"include_usage\":true}}"

Nutzungsgrenzen

Anfragen sind je Benutzer, Organisation und Modell begrenzt: gleichzeitige Anfragen, Anfragen pro Minute (RPM) und Token pro Minute (TPM). Die tatsächlichen Werte unterscheiden sich je nach Umgebung.

Die Token pro Minute werden beim Eingang der Anfrage reserviert. Die Eingabe zählt 1 Token je 4 englische Zeichen, andere Zeichen zählen 1 Token je Zeichen; jedes Bild zählt 2.000 Token. Die Ausgabe wird anhand von max_tokens reserviert (maximal 4.096). Begrenzen Sie die Ausgabe auf das Nötige, bleibt mehr Spielraum innerhalb des Limits.

429-CodeUrsacheRetry-After
rate_limit_exceededRPM, TPM oder gleichzeitige Anfragen überschrittenBei RPM und TPM 60 Sekunden; bei gleichzeitigen Anfragen 1 Sekunde
api_busyDer Server kann derzeit keine weiteren Anfragen annehmenKeine. Kurz warten und erneut versuchen.
upstream_rate_limitDer Modellanbieter hat sein eigenes Limit gemeldetKeine

Schlüsselverwaltung

Auf der Registerkarte API keys unter Einstellungen → API sehen Sie den Status der ausgestellten Schlüssel (gültig, abgelaufen oder widerrufen) und können sie neu ausstellen oder widerrufen.

Schlüssel sind 51-stellige Zeichenketten, die mit krl_llm_ beginnen. Pro Ausstellungsbereich kann nur ein Schlüssel gültig sein; existiert bereits einer, wird er neu ausgestellt statt ein neuer erstellt. Das Ablaufdatum kann nur ab heute festgelegt werden.

AktionErgebnisZu beachten
Neu ausstellen (Rotate)Ein neuer Schlüssel wird erzeugt.Der alte Schlüssel funktioniert sofort nicht mehr. Aktualisieren Sie auch den Schlüssel in verbundenen Apps.
Widerrufen (Revoke)Der Schlüssel wird sofort gesperrt.Verwenden Sie dies, wenn der Schlüssel vermutlich offengelegt wurde. Ein widerrufener Schlüssel lässt sich nicht wiederherstellen.

Nutzung einsehen

Über die API gesendete Anfragen und verbrauchte Token sehen Sie an zwei Stellen.

OrtInhalt
Einstellungen → API → API usageNutzung der von Ihnen ausgestellten Schlüssel im aktuellen Arbeitsbereich
Organisationsverwaltung → Organization API, Bereich API usageNutzung aller in der Organisation ausgestellten Schlüssel (Inhaber und Administratoren der Organisation)

Abfragebedingungen

BedingungBeschreibung
Startzeit · EndzeitKoreanische Zeit. Die Startzeit ist enthalten, die Endzeit nicht. Bleiben beide leer, werden die letzten 7 Tage angezeigt; abgefragt werden höchstens 90 Tage auf einmal.
Model IDZeigt nur Anfragen eines bestimmten Modells. Bleibt das Feld leer, werden alle angezeigt.
AnfragestatusWählen Sie zwischen Alle · In Bearbeitung · Abgeschlossen · Fehlgeschlagen · Abgebrochen · Nicht bestätigt.

Legen Sie die Bedingungen fest und klicken Sie auf Abfragen. Um eine gerade gesendete Anfrage erneut anzuzeigen, klicken Sie auf Aktualisieren.

Werte auf dem Bildschirm

  • Angewendeter Abfragezeitraum: der tatsächlich abgefragte Zeitraum. Wurden Start- oder Endzeit leer gelassen oder überschreitet der Zeitraum 90 Tage, wird der vom Server angepasste Zeitraum angezeigt.
  • Anzahl der Anfragen und Summen für Eingabe-Token · Ausgabe-Token · Gesamt-Token: Es werden nur bestätigte Werte addiert. Noch nicht bestätigte Token zählen nicht als 0, sondern werden als Nicht bestätigt angezeigt.
  • Anfrageliste: Jede Anfrage steht in einer Zeile mit Uhrzeit, Model ID, Status sowie Eingabe-, Ausgabe- und Gesamt-Token. Pro Seite werden 20 angezeigt; mit Zurück und Weiter blättern Sie.

Mit Anfragedetails in einer Zeile klappen folgende Werte auf.

ElementBeschreibung
Anfrage-IDWert, den Sie beim Kontakt mit dem Support angeben.
AntwortartStreaming oder normale Antwort
Status der NutzungsbestätigungBestätigt · Teilweise bestätigt · Nicht bestätigt
Endzeit · Antwortzeit (ms)Zeitpunkt des Anfrageendes und benötigte Dauer
Cache-Lesevorgänge · Cache-Erstellung · Reasoning-TokenErscheinen nur, wenn das Modell diese Werte zurückgibt.

Streaming-Anfragen werden auch ohne stream_options.include_usage erfasst. Wird eine Anfrage mitten im Vorgang unterbrochen, kann sie als Teilweise bestätigt oder Nicht bestätigt erscheinen.

Fehlerformat

Fehler werden im OpenAI-kompatiblen Format zurückgegeben.

{
  "error": {
    "message": "Für Menschen lesbare Fehlerbeschreibung",
    "type": "authentication_error",
    "code": "invalid_api_key",
    "param": null
  }
}

type richtet sich nach dem Statuscode, code nennt die Ursache.

StatustypecodeUrsache
400invalid_request_errorinvalid_requestVerstoß gegen ein Feld, einen Wert oder eine Regel des Körpers. param nennt das betroffene Feld
400invalid_request_errorupstream_rejected_requestDer Modellanbieter hat die Anfrage abgelehnt
401authentication_errorinvalid_api_keyFalsches Schlüsselformat, Schlüssel fehlt, abgelaufen, widerrufen oder neu ausgestellt, oder mehrere Authorization-Header
403permission_errorapi_disabledDie Keural-API-Funktion ist deaktiviert
403permission_errormodel_api_disabledDie API-Veröffentlichung des Modells ist deaktiviert
403permission_errormodel_not_allowedmodel stimmt nicht mit dem Modell des Schlüssels überein, oder das Mitglied hat keine API-Berechtigung
404invalid_request_errornot_foundUnbekannter Pfad
405invalid_request_errormethod_not_allowedFalsche Methode. Der Header Allow nennt die erlaubten Methoden
429rate_limit_errorTabelle unter NutzungsgrenzenLimit überschritten
503server_errorupstream_timeoutDie Antwort wurde nicht innerhalb von 600 Sekunden abgeschlossen
503server_errorinvalid_upstream_responseUngewöhnliches Antwortformat des Anbieters, oder Streamgröße überschritten
503server_errordependency_unavailable · unsupported_providerVorübergehendes internes Problem. Wenden Sie sich mit x-request-id an den Support

Fehlerbehebung

SymptomAntwortcodeZuerst prüfen
Die Modellliste ist leer oder die Verbindung schlägt fehl404 · 405Ob die Basis-URL auf …/llm/v1 endet
Die Authentifizierung schlägt fehl401Tippfehler oder Leerzeichen im Schlüssel; ob der Schlüssel abgelaufen, widerrufen oder neu ausgestellt wurde
Die Verbindung funktioniert, das Modell ist aber nicht nutzbar403Ob die Modell-ID mit der des Schlüssels übereinstimmt, und die API-Berechtigung der Organisation
Antworten dauern lange oder schlagen gelegentlich fehl429Nutzungsgrenzen
Zeitweise keine Antwort5xxSpäter erneut versuchen
Die Nutzung erscheint nicht oder stimmt nicht—Abfragezeitraum und der Arbeitsbereich, zu dem der Schlüssel gehört

Lässt sich das Problem nicht lösen, wenden Sie sich mit den folgenden Angaben an Ihren Administrator, damit die Ursache schneller gefunden wird. Senden Sie weder den Schlüsseltext noch den Inhalt der Prompts.

  • Zeitpunkt des Auftretens
  • Verwendete Modell-ID
  • Name und Version der Client-App
  • Wert von x-request-id aus dem Antwort-Header
  • Auf dem Bildschirm angezeigte Fehlermeldung

Auf dieser Seite