API-Dokumentation: Strukturierte Ausgaben erstellen
API-Beschreibung
Basierend auf einem gegebenen Prompt (Eingabeaufforderung) gibt das Modell eine oder mehrere vorhergesagte Vervollständigungen (Completions) zurück und unterstützt die Erzwingung, dass das Modell strukturierte Daten nach einem bestimmten JSON-Schema ausgibt.
Offizielle Referenzdokumentation: OpenAI Structured Outputs
Basisinformationen der API
- HTTP-Methode:
POST - Endpunkt (URL):
https://api.codingplanx.ai/v1/chat/completions - Datenformat:
application/json
Header der Anfrage (Request Headers)
| Parametername | Erforderlich | Typ | Beispielwert | Beschreibung |
|---|---|---|---|---|
Content-Type | Ja | string | application/json | Gibt den Medientyp des Anfragetextes an |
Accept | Ja | string | application/json | Gibt den vom Client akzeptierten Datentyp an |
Authorization | Nein | string | Bearer {{YOUR_API_KEY}} | Authentifizierungsdaten (Credentials) |
Anfragetext (Request Body)
| Parametername | Erforderlich | Typ | Beschreibung |
|---|---|---|---|
model | Ja | string | Die ID des zu verwendenden Modells (z. B. gpt-4.1-2025-04-14). |
messages | Ja | array | Eine Liste der Nachrichten, die bisher Teil der Konversation sind. |
? messages[].role | Ja | string | Die Rolle des Absenders der Nachricht, z. B. system, user, assistant. |
? messages[].content | Ja | string | Der eigentliche Inhalt der Nachricht. |
tools | Ja | array | Eine Liste von Tools, die das Modell aufrufen kann. Derzeit werden nur Funktionen unterstützt. Dient zur Bereitstellung einer Liste von Funktionen, für die das Modell JSON-Eingaben generieren kann. |
tool_choice | Ja | object | Steuert, welche Funktion das Modell aufruft. none bedeutet keinen Aufruf, auto bedeutet automatische Auswahl. Die Erzwingung eines Aufrufs ist auch über {"type": "function", "function": {"name": "my_function"}} möglich. |
temperature | Nein | integer | Sampling-Temperatur, zwischen 0 und 2. Höhere Werte (wie 0.8) machen die Ausgabe zufälliger, niedrigere Werte (wie 0.2) machen sie fokussierter und deterministischer. Es wird empfohlen, diesen Wert oder top_p zu ändern, aber nicht beide gleichzeitig. |
top_p | Nein | integer | 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 | Nein | integer | Wie viele Vervollständigungsoptionen für jede Eingabenachricht generiert werden sollen. Standard ist 1. |
stream | Nein | boolean | Ob Streaming-Ausgabe aktiviert werden soll. Wenn true, werden partielle Nachrichtendeltas als Server-Sent Events (SSE) gesendet und mit data: [DONE] beendet. Standard ist false. |
stop | Nein | string | Sequenzen (bis zu 4), bei denen die API die weitere Generierung von Tokens stoppt. Standard ist null. |
max_tokens | Nein | integer | Die maximale Anzahl von Tokens, die in der Chat-Vervollständigung generiert werden sollen. Standard ist inf (unendlich). |
presence_penalty | Nein | number | Präsenz-Strafe (-2.0 bis 2.0). Positive Werte bestrafen neue Tokens basierend darauf, ob sie im bisherigen Text erscheinen, was die Wahrscheinlichkeit erhöht, dass das Modell über neue Themen spricht. |
frequency_penalty | Nein | number | Frequenz-Strafe (-2.0 bis 2.0). Positive Werte bestrafen neue Tokens basierend auf ihrer bisherigen Häufigkeit im Text, was die Wahrscheinlichkeit verringert, dass das Modell dieselben Zeilen wiederholt. |
logit_bias | Nein | null/object | Akzeptiert ein JSON-Objekt, das Token-IDs auf zugehörige Bias-Werte (-100 bis 100) abbildet, um die Wahrscheinlichkeit zu ändern, dass bestimmte Tokens in der Vervollständigung erscheinen. |
user | Nein | string | Eine eindeutige Kennung, die Ihren Endnutzer repräsentiert und dabei hilft, Missbrauch zu überwachen und zu erkennen. |
response_format | Nein | object | Ein Objekt, das das Format spezifiziert, das das Modell ausgeben muss. Durch Setzen von {"type": "json_schema", "json_schema": {...}} können strukturierte Ausgaben aktiviert werden, um sicherzustellen, dass das Modell ein gültiges JSON-Format generiert. |
seed (seen) | Nein | integer | (Beta-Funktion) Setzt den Zufalls-Seed. Das System wird sein Bestes tun, um deterministisch zu samplen. Wiederholte Anfragen mit demselben Seed und denselben Parametern sollten das gleiche Ergebnis liefern. |
Anfragebeispiel (Request Example)
{
"model": "gpt-4.1-2025-04-14",
"messages": [
{
"role": "system",
"content": "Determine if the user input violates specific guidelines and explain if they do."
},
{
"role": "user",
"content": "How do I prepare for a job interview?"
}
],
"response_format": {
"type": "json_schema",
"json_schema": {
"name": "content_compliance",
"description": "Determines if content is violating specific moderation rules",
"schema": {
"type": "object",
"properties": {
"is_violating": {
"type": "boolean",
"description": "Indicates if the content is violating guidelines"
},
"category": {
"type": ["string", "null"],
"description": "Type of violation, if the content is violating guidelines. Null otherwise.",
"enum": ["violence", "sexual", "self_harm"]
},
"explanation_if_violating": {
"type": ["string", "null"],
"description": "Explanation of why the content is violating"
}
},
"required": ["is_violating", "category", "explanation_if_violating"],
"additionalProperties": false
},
"strict": true
}
}
}
Antwortkörper (Response Body)
| Parametername | Typ | Beschreibung |
|---|---|---|
id | string | Eindeutiger Bezeichner für die Vervollständigungsanfrage. |
object | string | Objekttyp, immer chat.completion. |
created | integer | Der Unix-Zeitstempel (in Sekunden) der Erstellung. |
choices | array | Eine Liste der Vervollständigungsoptionen. |
? choices[].index | integer | Der Index der Option in der Liste. |
? choices[].message | object | Das vom Modell generierte Nachrichtenobjekt. |
? choices[].message.role | string | Rollenname (normalerweise assistant). |
? choices[].message.content | string | Der spezifische Inhalt der Nachricht. |
? choices[].finish_reason | string | Der Grund, warum das Modell aufgehört hat zu generieren (z. B. stop, length). |
usage | object | Statistiken zur Token-Nutzung. |
? usage.prompt_tokens | integer | Anzahl der Tokens im Prompt. |
? usage.completion_tokens | integer | Anzahl der Tokens in der generierten Vervollständigung (Completion). |
? usage.total_tokens | integer | Gesamtzahl der verbrauchten Tokens. |
Antwortbeispiel (Response Example)
{
"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
}
}
Häufig gestellte Fragen (FAQs)
1. Was ist response_format und wie kann eine strikte JSON-Ausgabe des Modells garantiert werden?
Der Parameter response_format ermöglicht es Ihnen, das Modell aufzufordern, Daten in einem bestimmten Format zurückzugeben. Wenn Sie "Strukturierte Ausgaben" (Structured Outputs) verwenden möchten, müssen Sie dies auf {"type": "json_schema"} setzen, Ihr JSON-Schema darin definieren und strict: true aktivieren. Dies stellt sicher, dass das Modell zu 100 % gemäß den von Ihnen definierten Feldern und Datentypen ausgibt, ohne dass Sie in Ihrem Code zusätzliche fehlertolerante JSON-Parsing-Schritte durchführen müssen.
2. Warum wurde meine JSON-Ausgabe abgeschnitten?
Wenn der Wert von choices[0].finish_reason in Ihren Antwortdaten length lautet, bedeutet dies, dass der generierte Text das Limit max_tokens erreicht hat oder das maximale Kontextlängenlimit des Modells überschritten hat. Es wird empfohlen, den Wert des Parameters max_tokens in der Anfrage zu erhöhen.
3. Was ist der Unterschied zwischen den Parametern temperature und top_p? Welchen sollte ich anpassen?
Beides sind Parameter zur Steuerung der Zufälligkeit der Modellausgabe:
temperatureskaliert die Ausgabewahrscheinlichkeitsverteilung des Modells. Je niedriger der Wert, desto strikter und deterministischer ist die Ausgabe; je höher der Wert, desto divergenter ist die Ausgabe.top_p(Nucleus Sampling) beschränkt das Modell darauf, nur aus den häufigsten Vokabeln auszuwählen, deren kumulative Wahrscheinlichkeitperreicht. Offizielle Empfehlung: Passen Sie nur einen dieser Parameter an, ändern Sie nichttemperatureundtop_pgleichzeitig.
4. Was passiert, wenn stream: true aktiviert wird?
Wenn stream: true gesetzt ist, wartet die API nicht, bis die gesamte Antwort generiert ist, um sie zurückzugeben, sondern gibt Datenfragmente in Echtzeit als Stream zurück, ähnlich wie bei einer Schreibmaschine. Das zurückgegebene Datenformat ändert sich zu Server-Sent Events (SSE). Der Client muss den Datenstrom abhören, um delta.content zusammenzusetzen, bis das [DONE]-Zeichen empfangen wird, das das Ende signalisiert.
5. Wie garantiere ich, dass bei jedem Aufruf desselben Prompts exakt dieselbe Antwort zurückgegeben wird?
Obwohl große Sprachmodelle inhärent zufällig sind, können Sie eine maximale deterministische Ausgabe erreichen, indem Sie einen bestimmten seed-Parameter übergeben und die temperature auf 0 setzen. Wenn Sie feststellen, dass sich der system_fingerprint in den zurückgegebenen Ergebnissen ändert, bedeutet dies, dass die Konfiguration des Backend-Modells feinabgestimmt wurde. In diesem Fall kann das Ergebnis trotz desselben Seeds geringfügige Unterschiede aufweisen.