Chat-Vervollständigung erstellen (Streaming)
Offizielle Dokumentation als Referenz: OpenAI Chat Create
Schnittstellenbeschreibung
Bei Vorgabe eines Prompts gibt das Modell eine oder mehrere vorhergesagte Vervollständigungen der Konversation zurück. Diese Schnittstelle unterstützt sowohl Standard-Antworten als auch Streaming-Antworten (SSE) und kann die Wahrscheinlichkeiten alternativer Tokens an jeder Position zurückgeben.
Anfrage-Spezifikationen
- Anfragemethode:
POST - Anfrage-URL:
https://api.codingplanx.ai/v1/chat/completions
Anfrage-Header (Headers)
| Parameter | Erforderlich | Typ | Beispiel | Beschreibung |
|---|---|---|---|---|
Content-Type | Ja | string | application/json | Datenformat |
Accept | Ja | string | application/json | Akzeptiertes Datenformat |
Authorization | Nein* | string | Bearer {{YOUR_API_KEY}} | Authentifizierungs-Token (bei tatsächlichen Aufrufen meist erforderlich) |
X-Forwarded-Host | Nein | string | localhost:5173 | Proxy-Hostname (muss in der Regel nicht manuell übergeben werden) |
Anfrage-Body (Request Body)
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
model | string | Ja | Zu verwendende Modell-ID. Siehe Kompatibilitätstabelle für Modelle für eine Liste kompatibler Modelle. |
messages | array | Ja | Liste der bisherigen Nachrichten der Konversation. Enthält die Felder role und content. |
tools | array | Ja | Eine Liste von Tools, die das Modell aufrufen kann. Derzeit werden nur Funktionen als Tools unterstützt. |
tool_choice | object | Ja | Steuert, welche Funktion das Modell aufruft (falls vorhanden). none bedeutet kein Aufruf, auto bedeutet automatische Auswahl, oder es wird der Aufruf einer bestimmten Funktion erzwungen. |
extra_body | object | Ja | Zusätzliche Parameter. Enthält enable_thinking (boolean), um den Denkmodus zu aktivieren (sofern vom Modell unterstützt). |
temperature | integer/float | Nein | Sampling-Temperatur, zwischen 0 und 2. Höhere Werte (z. B. 0.8) machen die Ausgabe zufälliger, niedrigere Werte (z. B. 0.2) fokussierter und deterministischer. Es wird empfohlen, diesen Wert ODER top_p zu ändern, aber nicht beide gleichzeitig. |
top_p | integer/float | Nein | Nucleus-Sampling-Parameter. 0.1 bedeutet, dass nur die Tokens berücksichtigt werden, die die obersten 10 % der Wahrscheinlichkeitsmasse ausmachen. Es wird empfohlen, diesen Wert ODER temperature zu ändern, aber nicht beide gleichzeitig. |
n | integer | Nein | Wie viele Chat-Vervollständigungsoptionen pro Eingabenachricht generiert werden sollen. Standardwert ist 1. |
stream | boolean | Nein | Ob Streaming-Ausgabe aktiviert wird. Wenn auf true gesetzt, werden partielle Nachrichten-Deltas als Server-Sent Events (SSE) gesendet. Der Stream wird mit der Nachricht data: [DONE] beendet. |
stop | string/array | Nein | Die API stoppt die Generierung weiterer Tokens bei diesen Sequenzen (max. 4). Standardwert ist null. |
max_tokens | integer | Nein | Maximale Anzahl der zu generierenden Tokens in der Chat-Vervollständigung. Die Gesamtlänge aus Eingabe- und generierten Tokens wird durch das Kontextlimit des Modells begrenzt. |
presence_penalty | number | Nein | Zahl zwischen -2.0 und 2.0. Positive Werte bestrafen neue Tokens basierend darauf, ob sie bisher im Text aufgetreten sind, und erhöhen die Wahrscheinlichkeit, dass das Modell über neue Themen spricht. |
frequency_penalty | number | Nein | Zahl zwischen -2.0 und 2.0. Positive Werte bestrafen neue Tokens basierend auf ihrer bisherigen Häufigkeit im Text und verringern die Wahrscheinlichkeit, dass das Modell dieselben Inhalte wiederholt. |
logit_bias | object | Nein | Verändert die Wahrscheinlichkeit, dass bestimmte Tokens in der Vervollständigung erscheinen. Akzeptiert ein JSON-Objekt, das Token-IDs auf Bias-Werte (-100 bis 100) abbildet. |
user | string | Nein | Eindeutiger Identifikator für den Endnutzer, hilft bei der Überwachung und Erkennung von Missbrauch. |
response_format | object | Nein | Legt das Ausgabeformat des Modells fest. Setzen Sie dies auf { "type": "json_object" }, um den JSON-Modus zu aktivieren. Wichtig: Bei Verwendung muss das Modell in der Nachricht zwingend angewiesen werden, JSON zu generieren, da dies sonst zu einem endlosen Strom von Leerzeichen führen kann. |
seen | integer | Nein | Seed festlegen für deterministisches Sampling (Beta-Funktion). |
Anfrage-Beispiel
{
"model": "gpt-5-mini",
"max_tokens": 1000,
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "你好"
}
],
"temperature": 1.0,
"stream": true,
"stream_options": {
"include_usage": true
}
}
Antwort-Spezifikationen
- Content-Type:
application/json(Nicht-Streaming) odertext/event-stream(bei Streaming mitstream: true)
Antwort-Parameter (Nicht-Streaming-Struktur)
| Parameter | Typ | Beschreibung |
|---|---|---|
id | string | Eindeutiger Identifikator für die Chat-Vervollständigung. |
object | string | Objekttyp, normalerweise chat.completion oder chat.completion.chunk. |
created | integer | Zeitstempel der Erstellung (Unix-Zeit). |
choices | array | Liste der Vervollständigungsoptionen. |
choices[].index | integer | Index in der Auswahlliste. |
choices[].message | object | Vom Modell generiertes Nachrichtenobjekt, enthält role und content. Beim Streaming ist dies delta. |
choices[].finish_reason | string | Grund für das Stoppen der Generierung (z. B. stop, length etc.). |
usage | object | Statistiken zur API-Token-Nutzung. |
usage.prompt_tokens | integer | Vom Prompt verbrauchte Token-Anzahl. |
usage.completion_tokens | integer | Vom Modell generierte Token-Anzahl. |
usage.total_tokens | integer | Gesamte bei dieser Anfrage verbrauchte Token-Anzahl. |
Antwort-Beispiel (Nicht-Streaming / Aggregierte Streaming-Ergebnisse)
{
"id": "chatcmpl-123",
"object": "chat.completion",
"created": 1677652288,
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "\r
\r
Hello there, how may I assist you today?"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 9,
"completion_tokens": 12,
"total_tokens": 21
}
}
(Hinweis: Wenn stream: true in der Anfrage angegeben wurde, ist der Antwort-Body ein durch Zeilenumbrüche getrennter SSE-Event-Stream, bei dem jede Zeile mit data: {...} beginnt und der Stream mit data: [DONE] endet.)
FAQs (Häufig gestellte Fragen)
Q1: Wie parse ich eine Streaming-Antwort, bei der stream: true aktiviert ist?
A: Wenn stream: true aktiviert ist, gibt die API Daten über das Protokoll Server-Sent Events (SSE) zurück. Der Client muss den Antwort-Stream zeilenweise lesen, nach Strings suchen, die mit dem Präfix data: beginnen, und diese als JSON parsen. Bitte beachten Sie, dass die letzte Nachricht des Datenstroms immer data: [DONE] ist, was das Ende des Streams markiert. Diese Abschlussmarkierung muss beim Parsen herausgefiltert werden.
Q2: Warum bleibt meine Anfrage hängen oder gibt einen endlosen Leerzeichen-Stream zurück, nachdem ich response_format auf JSON gesetzt habe?
A: Wenn Sie den JSON-Modus mit { "type": "json_object" } aktivieren, müssen Sie das Modell in den übergebenen messages (meistens im System-Prompt) ausdrücklich anweisen: „Bitte generiere JSON“. Fehlt ein entsprechender Text-Prompt, kann das Modell stecken bleiben und endlos Leerzeichen generieren, bis das Limit von max_tokens erreicht ist.
Q3: Können die Parameter temperature und top_p gleichzeitig angepasst werden?
A: Offiziell wird dringend davon abgeraten, beide Parameter gleichzeitig anzupassen. Beide Mechanismen dienen dazu, die Zufälligkeit der Modellausgabe zu steuern. Wenn Sie eine stabilere und vorhersehbarere Ausgabe wünschen, verringern Sie die temperature ODER senken Sie top_p. Wenn Sie kreativere Antworten möchten, erhöhen Sie einen von beiden. Das gleichzeitige Ändern beider Parameter führt zu unvorhersehbaren Ergebnissen.
Q4: Welche Funktion hat der Parameter extra_body.enable_thinking?
A: Dies ist ein spezieller Erweiterungsparameter dieser Schnittstelle. Wenn Sie {"enable_thinking": true} übergeben und das vom Backend verwendete Modell den „Denkmodus (Thinking Mode / Chain of Thought)“ (wie einige LLMs mit verbesserter Logik) unterstützt, startet das Modell einen tiefgehenden Denkprozess. Wenn das Modell dies nicht unterstützt, wird dieser Parameter in der Regel einfach ignoriert.
Q5: Warum ist der finish_reason in der Antwort length und nicht stop?
A: Ein finish_reason mit dem Wert length zeigt an, dass die Modellantwort zwangsweise abgeschnitten wurde, bevor sie vollständig generiert werden konnte. Dies liegt meist daran, dass Ihr max_tokens-Parameter zu klein eingestellt ist oder die Gesamtzahl der Eingabe- und Ausgabe-Tokens das maximal zulässige Kontextfenster-Limit des aktuellen Modells überschreitet. Bitte versuchen Sie, den Wert für max_tokens zu erhöhen.