API-documentatie: gestructureerde output maken
Beschrijving van de endpoint
Gegeven een prompt retourneert het model een of meer voorspelde aanvullingen, en ondersteunt het het afdwingen van gestructureerde data-uitvoer volgens een opgegeven JSON Schema.
Officiële referentiedocumentatie: OpenAI Structured Outputs
Basisinformatie van de API
- HTTP-methode:
POST - Request-pad:
https://api.codingplanx.ai/v1/chat/completions - Dataformaat:
application/json
Request-headers (Headers)
| Parameter | Verplicht | Type | Voorbeeldwaarde | Beschrijving |
|---|---|---|---|---|
Content-Type | Ja | string | application/json | Geeft het datatype van de request-body aan |
Accept | Ja | string | application/json | Geeft het datatype aan dat de client kan ontvangen |
Authorization | Nee | string | Bearer {{YOUR_API_KEY}} | Authenticatiegegevens |
Request-body (Request Body)
| Parameter | Verplicht | Type | Beschrijving |
|---|---|---|---|
model | Ja | string | De ID van het model dat gebruikt moet worden (bijv. gpt-4.1-2025-04-14). |
messages | Ja | array | De lijst met berichten die tot nu toe deel uitmaken van het gesprek. |
? messages[].role | Ja | string | De rol van de afzender van het bericht, zoals system, user, assistant. |
? messages[].content | Ja | string | De inhoud van het bericht. |
tools | Ja | array | Een lijst met tools die het model kan aanroepen. Momenteel worden alleen functies ondersteund. Hiermee kunt u functies opgeven waarvoor het model JSON-invoer kan genereren. |
tool_choice | Ja | object | Bepaalt welke functie het model aanroept. none betekent niet aanroepen, auto betekent automatisch kiezen. U kunt ook forceren met {"type": "function", "function": {"name": "my_function"}}. |
temperature | Nee | integer | Sampling-temperatuur, tussen 0 en 2. Hogere waarden (zoals 0.8) maken de output willekeuriger, lagere waarden (zoals 0.2) maken deze geconcentreerder en consistenter. Het wordt aanbevolen om óf deze parameter óf top_p aan te passen, maar niet beide tegelijk. |
top_p | Nee | integer | Nucleus sampling-parameter. 0.1 betekent dat alleen tokens worden overwogen die samen de hoogste 10% kansmassa vormen. Het wordt aanbevolen om óf deze parameter óf temperature aan te passen, maar niet beide tegelijk. |
n | Nee | integer | Hoeveel completion-keuzes voor elk invoerbericht moeten worden gegenereerd. Standaard is dit 1. |
stream | Nee | boolean | Of streaming-output moet worden ingeschakeld. Als dit true is, worden incrementele berichtdelen verzonden via Server-Sent Events (SSE), en afgesloten met data: [DONE]. Standaard is dit false. |
stop | Nee | string | Een reeks waarop de API stopt met het genereren van verdere tokens (maximaal 4). Standaard is dit null. |
max_tokens | Nee | integer | Het maximale aantal tokens dat in de chat-completion mag worden gegenereerd. Standaard is dit inf (onbeperkt). |
presence_penalty | Nee | number | Presence penalty (-2.0 tot 2.0). Positieve waarden bestraffen tokens op basis van of ze al eerder in de tekst zijn verschenen, waardoor de kans toeneemt dat het model nieuwe onderwerpen aansnijdt. |
frequency_penalty | Nee | number | Frequency penalty (-2.0 tot 2.0). Positieve waarden bestraffen tokens op basis van hoe vaak ze al in de tekst voorkomen, waardoor herhaling van dezelfde inhoud afneemt. |
logit_bias | Nee | null/object | Accepteert een JSON-object dat token-ID's koppelt aan bias-waarden (-100 tot 100), om de kans te beïnvloeden dat bepaalde tokens in de completion verschijnen. |
user | Nee | string | Een unieke identifier van uw eindgebruiker, ter ondersteuning van monitoring en misbruikdetectie. |
response_format | Nee | object | Geeft het formaat op waarin het model moet antwoorden. Door {"type": "json_schema", "json_schema": {...}} in te stellen, schakelt u gestructureerde output in en zorgt u ervoor dat het model geldige JSON genereert. |
seen | Nee | integer | (Bètafunctie) Stelt een willekeurige seed in. Het systeem probeert sampling zo deterministisch mogelijk uit te voeren; herhaalde requests met dezelfde seed en parameters zouden hetzelfde resultaat moeten geven. |
Request-voorbeeld (Request Example)
{
"model": "gpt-4.1-2025-04-14",
"messages": [
{
"role": "system",
"content": "Bepaal of de invoer van de gebruiker specifieke richtlijnen schendt en leg uit waarom, indien dat zo is."
},
{
"role": "user",
"content": "Hoe bereid ik me voor op een sollicitatiegesprek?"
}
],
"response_format": {
"type": "json_schema",
"json_schema": {
"name": "content_compliance",
"description": "Bepaalt of inhoud specifieke moderatieregels schendt",
"schema": {
"type": "object",
"properties": {
"is_violating": {
"type": "boolean",
"description": "Geeft aan of de inhoud de richtlijnen schendt"
},
"category": {
"type": ["string", "null"],
"description": "Type overtreding, als de inhoud de richtlijnen schendt. Anders null.",
"enum": ["violence", "sexual", "self_harm"]
},
"explanation_if_violating": {
"type": ["string", "null"],
"description": "Uitleg waarom de inhoud de richtlijnen schendt"
}
},
"required": ["is_violating", "category", "explanation_if_violating"],
"additionalProperties": false
},
"strict": true
}
}
}
Response-body (Response Body)
| Parameter | Type | Beschrijving |
|---|---|---|
id | string | De unieke identifier van het completion-request. |
object | string | Objecttype, altijd chat.completion. |
created | integer | Tijdstempel van aanmaak (Unix-seconden). |
choices | array | De lijst met completion-opties. |
? choices[].index | integer | De index van de optie in de lijst. |
? choices[].message | object | Het door het model gegenereerde berichtobject. |
? choices[].message.role | string | De naam van de rol (meestal assistant). |
? choices[].message.content | string | De inhoud van het bericht. |
? choices[].finish_reason | string | De reden waarom het model is gestopt met genereren (bijv. stop, length). |
usage | object | Statistieken over tokengebruik. |
? usage.prompt_tokens | integer | Het aantal tokens dat door de prompt is verbruikt. |
? usage.completion_tokens | integer | Het aantal tokens dat door de gegenereerde completion is verbruikt. |
? usage.total_tokens | integer | Het totale aantal verbruikte tokens. |
Response-voorbeeld (Response Example)
{
"id": "chatcmpl-123",
"object": "chat.completion",
"created": 1677652288,
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "\r
\r
Hallo, hoe kan ik u vandaag helpen?"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 9,
"completion_tokens": 12,
"total_tokens": 21
}
}
Veelgestelde vragen (FAQs)
1. Wat is response_format en hoe zorg ik ervoor dat het model strikte JSON-uitvoer geeft?
Met de parameter response_format kunt u vereisen dat het model in een specifiek formaat antwoordt. Als u “gestructureerde output” wilt gebruiken, moet u deze instellen op {"type": "json_schema"} en daarin uw JSON Schema definiëren, met strict: true ingeschakeld. Zo zorgt u ervoor dat het model 100% volgens de door u gedefinieerde velden en datatypen uitvoert, zonder dat u in uw code extra fouttolerante JSON-parsing hoeft toe te passen.
2. Waarom wordt mijn JSON-uitvoer afgekapt?
Als in uw response de waarde van choices[0].finish_reason gelijk is aan length, betekent dit dat de gegenereerde tekst de limiet van max_tokens heeft bereikt, of de maximale contextlengte van het model heeft overschreden. Het wordt aanbevolen om de waarde van max_tokens in uw request te verhogen.
3. Wat is het verschil tussen temperature en top_p? Welke moet ik aanpassen?
Beide parameters worden gebruikt om de willekeurigheid van de modeloutput te regelen:
temperatureschaalt de kansverdeling van de output van het model. Hoe lager de waarde, hoe consistenter en voorspelbaarder de output; hoe hoger de waarde, hoe creatiever en gevarieerder.top_p(nucleus sampling) beperkt het model tot woorden/tokens waarvan de gecumuleerde kanspbereikt. Officiële aanbeveling: pas slechts één van beide parameters aan, niet allebei tegelijk.
4. Wat gebeurt er als ik stream: true inschakel?
Als u stream: true instelt, wacht de API niet tot het volledige antwoord is gegenereerd voordat het wordt teruggestuurd. In plaats daarvan wordt de output realtime als een typemachine gestreamd. Het teruggegeven formaat verandert dan naar Server-Sent Events (SSE). De client moet de gegevensstroom uitlezen en delta.content samenvoegen totdat het [DONE]-signaal wordt ontvangen.
5. Hoe zorg ik ervoor dat dezelfde prompt elke keer exact hetzelfde antwoord oplevert?
Hoewel grote taalmodellen een zekere mate van willekeur bevatten, kunt u door een specifieke seen-parameter (seed) mee te geven en temperature op 0 te zetten een zo deterministisch mogelijk resultaat krijgen. Als de system_fingerprint in de response verandert, betekent dit dat de backendconfiguratie van het model is aangepast; in dat geval kunnen zelfs met dezelfde seed kleine verschillen optreden.