Chat-completions maken (streaming)
Referentie naar officiële documentatie: OpenAI Chat Create
Beschrijving van de API
Gegeven een prompt retourneert het model één of meer voorspelde aanvullingen op het gesprek. Deze API ondersteunt zowel standaardantwoorden als streaming-antwoorden (SSE), en kan ook de waarschijnlijkheden van alternatieve tokens per positie retourneren.
Verzoekbeschrijving
- HTTP-methode:
POST - Request-URL:
https://api.codingplanx.ai/v1/chat/completions
Requestheaders (Headers)
| Parameternaam | Verplicht | Type | Voorbeeld | Beschrijving |
|---|---|---|---|---|
Content-Type | Ja | string | application/json | Gegevensindeling |
Accept | Ja | string | application/json | Gewenste response-indeling |
Authorization | Nee* | string | Bearer {{YOUR_API_KEY}} | Authenticatietoken (bij daadwerkelijke aanroepen doorgaans verplicht) |
X-Forwarded-Host | Nee | string | localhost:5173 | Hostnaam van de proxy (meestal niet nodig om handmatig mee te sturen) |
Requestbody (Request Body)
| Parameternaam | Type | Verplicht | Beschrijving |
|---|---|---|---|
model | string | Ja | De model-ID die gebruikt moet worden. Zie de compatibiliteitstabel van het modellen-endpoint voor ondersteunde modellen. |
messages | array | Ja | De lijst met berichten in het gesprek tot nu toe. Bevat de velden role en content. |
tools | array | Ja | Een lijst met tools die het model kan aanroepen. Momenteel worden alleen functies als tools ondersteund. |
tool_choice | object | Ja | Bepaalt welke functie het model moet aanroepen, indien van toepassing. none betekent geen aanroep, auto betekent automatisch kiezen, of forceer een specifieke functie. |
extra_body | object | Ja | Extra parameters. Bevat enable_thinking (boolean), waarmee de denkmodus wordt ingeschakeld indien het model dit ondersteunt. |
temperature | integer/float | Nee | Samplingtemperatuur, tussen 0 en 2. Hogere waarden (zoals 0.8) maken de output willekeuriger; lagere waarden (zoals 0.2) maken de output geconcentreerder en consistenter. Het wordt aangeraden óf deze parameter óf top_p aan te passen, maar niet beide tegelijk. |
top_p | integer/float | Nee | Parameter voor nucleus sampling. 0.1 betekent dat alleen tokens worden overwogen die samen de bovenste 10% van de waarschijnlijkheidsmassa vormen. Het wordt aangeraden óf deze parameter óf temperature aan te passen, maar niet beide tegelijk. |
n | integer | Nee | Hoeveel chat-completionkeuzes per invoerbericht moeten worden gegenereerd. Standaard is 1. |
stream | boolean | Nee | Of streaming-uitvoer wordt ingeschakeld. Als dit op true staat, worden gedeeltelijke bericht-incrementen verzonden via Server-Sent Events (SSE), en de stream eindigt met het bericht data: [DONE]. |
stop | string/array | Nee | Een reeks waarop de API stopt met het genereren van verdere tokens (maximaal 4). Standaard is null. |
max_tokens | integer | Nee | Het maximale aantal tokens dat in de chat-completion mag worden gegenereerd. De totale lengte van invoer plus output is beperkt door de contextlengte van het model. |
presence_penalty | number | Nee | Een getal tussen -2.0 en 2.0. Positieve waarden straffen nieuwe tokens af op basis van of ze al in de tekst zijn voorgekomen, waardoor het model eerder nieuwe onderwerpen aansnijdt. |
frequency_penalty | number | Nee | Een getal tussen -2.0 en 2.0. Positieve waarden straffen nieuwe tokens af op basis van hun huidige frequentie in de tekst, waardoor herhaling afneemt. |
logit_bias | object | Nee | Wijzigt de kans dat opgegeven tokens in de completion verschijnen. Accepteert een JSON-object dat token-ID’s koppelt aan biaswaarden (-100 tot 100). |
user | string | Nee | Een unieke identifier voor de eindgebruiker, om misbruikmonitoring en -detectie te ondersteunen. |
response_format | object | Nee | Geeft het uitvoerformaat van het model op. Stel in op { "type": "json_object" } om de JSON-modus in te schakelen. Let op: wanneer dit gebruikt wordt, moet in de berichten expliciet worden aangegeven dat het model JSON moet genereren, anders kan een eindeloze stroom van witruimte ontstaan. |
seen | integer | Nee | Stelt een seed in voor deterministische sampling (Beta-functionaliteit). |
Voorbeeldrequest
{
"model": "gpt-5-mini",
"max_tokens": 1000,
"messages": [
{
"role": "system",
"content": "Je bent een behulpzame assistent."
},
{
"role": "user",
"content": "Hallo"
}
],
"temperature": 1.0,
"stream": true,
"stream_options": {
"include_usage": true
}
}
Beschrijving van de response
- Content-Type:
application/json(niet-streaming) oftext/event-stream(bij streaming wanneerstream: true)
Responseparameters (niet-streamingstructuur)
| Parameternaam | Type | Beschrijving |
|---|---|---|
id | string | De unieke identifier van de chat-completion. |
object | string | Het objecttype, meestal chat.completion of chat.completion.chunk. |
created | integer | Tijdstempel van aanmaak (Unix-tijd). |
choices | array | Lijst met completionkeuzes. |
choices[].index | integer | De index binnen de lijst met keuzes. |
choices[].message | object | Het door het model gegenereerde berichtobject, met role en content. Bij streaming is dit delta. |
choices[].finish_reason | string | De reden waarom de generatie is gestopt (zoals stop, length, enz.). |
usage | object | Statistieken over tokenverbruik van de API. |
usage.prompt_tokens | integer | Het aantal tokens dat door de prompt is verbruikt. |
usage.completion_tokens | integer | Het aantal tokens dat door de modeloutput is verbruikt. |
usage.total_tokens | integer | Het totale aantal tokens dat bij deze aanvraag is verbruikt. |
Voorbeeldresponse (niet-streaming / geaggregeerd streamingresultaat)
{
"id": "chatcmpl-123",
"object": "chat.completion",
"created": 1677652288,
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "\r
\r
Hallo, hoe kan ik je vandaag helpen?"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 9,
"completion_tokens": 12,
"total_tokens": 21
}
}
(Opmerking: als in de aanvraag stream: true is opgegeven, bestaat de responsebody uit een SSE-eventstream gescheiden door regeleinden. Elke regel begint met data: {...}, en eindigt met data: [DONE].)
FAQs (veelgestelde vragen)
V1: Hoe parse ik een streaming-response wanneer stream: true is ingeschakeld?
A: Wanneer stream: true is ingeschakeld, retourneert de API gegevens via het Server-Sent Events (SSE)-protocol. De client moet de responsestream regel voor regel uitlezen, regels zoeken die beginnen met data: , en deze vervolgens als JSON parsen. Let erop dat het laatste bericht in de stream altijd data: [DONE] is; dit markeert het einde van de stream. Tijdens het parsen moet deze eindmarkering worden uitgefilterd.
V2: Waarom blijft mijn verzoek hangen of retourneert het een eindeloze stroom witruimte nadat ik response_format op JSON heb gezet?
A: Wanneer u { "type": "json_object" } gebruikt om de JSON-modus in te schakelen, moet u in de meegegeven messages (meestal in de system prompt) expliciet aangeven dat het model JSON moet genereren. Zonder zo’n instructie kan het model vastlopen en eindeloos witruimte genereren totdat de limiet van max_tokens wordt bereikt.
V3: Kunnen de parameters temperature en top_p tegelijk worden aangepast?
A: Officieel wordt sterk afgeraden om beide tegelijk aan te passen. Beide parameters regelen de mate van willekeur in de modeloutput. Als u stabielere en voorspelbaardere resultaten wilt, verlaag dan temperature of verklein top_p; als u creatievere antwoorden wilt, verhoog dan een van beide. Het gelijktijdig aanpassen van beide maakt het resultaat moeilijk voorspelbaar.
V4: Wat doet extra_body.enable_thinking?
A: Dit is een specifieke uitbreidingsparameter van deze API. Wanneer {"enable_thinking": true} wordt meegegeven, zal het model, indien ondersteund door de backend, de denkmodus inschakelen (Thinking Mode/CoT), zoals bij sommige redeneer-geoptimaliseerde grote modellen. Als het model dit niet ondersteunt, wordt deze parameter doorgaans genegeerd.
V5: Waarom is finish_reason in de response length in plaats van stop?
A: Wanneer finish_reason de waarde length heeft, betekent dit dat het model werd afgekapt voordat het een volledig antwoord kon genereren. Dit komt meestal doordat max_tokens te laag is ingesteld, of omdat de totale hoeveelheid invoer- en outputtokens de maximale contextwindow van het huidige model overschrijdt. Probeer max_tokens te verhogen.