Chatcompletie met beeldherkenning aanmaken (streaming) best64
API-beschrijving:
Gegeven een prompt retourneert dit model een of meer voorspelde completions, en kan het ook de waarschijnlijkheden van alternatieve tokens per positie teruggeven. Deze API wordt voornamelijk gebruikt om chatcompleties te maken die beeldherkenning (op basis van Base64) en tekstprompts combineren.
Officiële referentie: OpenAI API-documentatie
API-details
- HTTP-methode:
POST - Endpoint:
https://api.codingplanx.ai/v1/chat/completions - Gegevensformaat:
application/json
Request Headers
| Parameternaam | Verplicht | Type | Voorbeeldwaarde | Beschrijving |
|---|---|---|---|---|
| Content-Type | Ja | string | application/json | Gegevensformaat |
| Accept | Ja | string | application/json | Verwacht responsformaat |
| Authorization | Nee | string | Bearer {{YOUR_API_KEY}} | Authenticatietoken |
Request Body
| Veldnaam | Type | Verplicht | Beschrijving |
|---|---|---|---|
| model | string | Ja | De ID van het model dat gebruikt moet worden (bijv. gpt-4o-mini). |
| messages | array | Ja | De lijst met berichten in het gesprek tot nu toe. Bevat role en content. Voor beeldherkenning kan content een array zijn met tekst en image_url (Base64). |
| tools | array | Ja | Een lijst met tools die het model kan aanroepen. Momenteel worden alleen functies als tools ondersteund. Wordt gebruikt om functies te definiëren waarvoor het model JSON-invoer kan genereren. |
| tool_choice | object | Ja | Bepaalt welke functie het model mag aanroepen. none betekent geen aanroep; auto betekent automatisch kiezen; u kunt ook een specifieke functie afdwingen. |
| temperature | integer | Nee | Samplingtemperatuur, tussen 0 en 2. Hogere waarden (zoals 0.8) maken de output willekeuriger; lagere waarden (zoals 0.2) maken die deterministischer. Het wordt afgeraden dit tegelijk met top_p aan te passen. |
| top_p | integer | Nee | Parameter voor nucleus sampling. 0.1 betekent dat alleen tokens worden overwogen die samen de bovenste 10% waarschijnlijkheidsmassa vormen. Het wordt afgeraden dit tegelijk met temperature aan te passen. |
| n | integer | Nee | Hoeveel chatcompleties per invoerbericht moeten worden gegenereerd. Standaard is 1. |
| stream | boolean | Nee | Schakelaar voor streaming output. Standaard is false. Als dit op true staat, worden gedeeltelijke berichtincrementen verzonden via Server-Sent Events (SSE), en eindigt de stream met data: [DONE]. |
| stop | string | Nee | Een sequentie waarbij de API stopt met verder genereren van tokens (maximaal 4). Standaard is null. |
| max_tokens | integer | Nee | Het maximale aantal tokens dat in de chatcompletie wordt gegenereerd. Standaard is inf (onbeperkt). |
| presence_penalty | number | Nee | Presence penalty (-2.0 tot 2.0). Positieve waarden bestraffen tokens op basis van of ze al in de tekst zijn verschenen, waardoor het model eerder nieuwe onderwerpen aansnijdt. |
| frequency_penalty | number | Nee | Frequency penalty (-2.0 tot 2.0). Positieve waarden bestraffen tokens op basis van hoe vaak ze al zijn voorgekomen, waardoor herhaling afneemt. Standaard is 0. |
| logit_bias | object | Nee | Past de kans aan 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 identificatie van uw eindgebruiker, om misbruik te monitoren en detecteren. |
| response_format | object | Nee | Geeft het formaat aan waarin het model moet antwoorden. Door { "type": "json_object" } mee te sturen wordt de JSON-modus ingeschakeld. Gebruik hierbij een prompt die het model expliciet vraagt om JSON te produceren. |
| seen | integer | Nee | Bètafunctie. Deterministische sampling-seed; het herhalen van een request met dezelfde seed en parameters zou hetzelfde resultaat moeten geven (absolute determinisme wordt niet gegarandeerd). |
Request-voorbeeld
{
"model": "gpt-4o-mini",
"messages": [
{
"role": "system",
"content": "Je bent een behulpzame assistent."
},
{
"role": "user",
"content": [
{
"type": "text",
"text": "Wat staat er op deze afbeelding? Beschrijf het alstublieft gedetailleerd."
},
{
"type": "image_url",
"image_url": {
"url": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAiEAAAIhCAYAAACYF2qHAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAgAElEQVR4nOy9ebxtWVXf+x1zrrX2Pud2VRQUjUVf0glIYvOJLdJ8iCagIor... (de te lange base64-string is hier ingekort)"
}
}
]
}
]
}
Response Body
| Veldnaam | Type | Beschrijving |
|---|---|---|
| id | string | De unieke identifier van de chatcompletie. |
| object | string | Het objecttype, meestal chat.completion (of in streamingmodus chat.completion.chunk). |
| created | integer | Unix-timestamp van het aanmaakmoment. |
| choices | array | Lijst met completion-keuzes. |
| └─ index | integer | De index van de keuze in de lijst. |
| └─ message | object | Het door het model gegenereerde berichtobject, met role en content. |
| └─ finish_reason | string | De reden waarom het model is gestopt met genereren (bijvoorbeeld stop voor normaal einde, length voor het bereiken van de max_tokens-limiet). |
| usage | object | Statistieken over het tokenverbruik van dit request. |
| └─ prompt_tokens | integer | Het aantal tokens dat door de prompt is verbruikt (inclusief tokens die uit de afbeelding zijn berekend). |
| └─ completion_tokens | integer | Het aantal tokens dat door de gegenereerde inhoud is verbruikt. |
| └─ total_tokens | integer | Het totale aantal tokens dat door dit request is verbruikt. |
Response-voorbeeld (succesvol 200 OK)
{
"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 (FAQ)
V1: Hoe schakel ik streaming output in?
A: Zet de parameter stream in de request body op true. Zodra streaming is ingeschakeld, wacht de API niet meer tot het volledige antwoord klaar is, maar stuurt deze gedeeltelijke resultaten terug via Server-Sent Events (SSE) in het formaat data: {...}, totdat het eindmarkeerpunt data: [DONE] wordt ontvangen.
V2: Aan welke eisen moet de Base64-codering voor beeldherkenning voldoen?
A: De Base64-string van de afbeelding moet de juiste MIME-typeprefix bevatten, zoals data:image/png;base64, of data:image/jpeg;base64,. Het wordt aanbevolen om afbeeldingen vóór conversie naar Base64 passend te comprimeren of te verkleinen om netwerkvertraging te beperken en het verbruik van prompt_tokens te verminderen (te grote afbeeldingen kunnen veel tokens kosten of zelfs de contextlimiet overschrijden).
V3: Waarom is het antwoord van het model afgekapt?
A: Controleer de waarde van choices[0].finish_reason in de response. Als deze length is, betekent dit dat de gegenereerde tekst de door u ingestelde limiet van max_tokens heeft bereikt, of dat het totale gesprek de maximale contextwindow van het model heeft overschreden. U kunt dit oplossen door max_tokens te verhogen.
V4: Hoe dwing ik het model om JSON-formaat te retourneren?
A: Stel eerst in de request body "response_format": { "type": "json_object" } in. Belangrijke opmerking: naast het instellen van deze parameter moet u in de systeemprompt (system) of gebruikersprompt ook expliciet in natuurlijke taal aangeven dat het model JSON moet retourneren (bijvoorbeeld: "Geef het resultaat in JSON-formaat terug"). Doet u dit niet, dan kan het model in een eindeloze lege generatie terechtkomen totdat alle tokens opgebruikt zijn.
V5: Wat moet ik doen als ik een 401 Unauthorized-fout krijg?
A: Controleer of de Authorization-header correct de API Key bevat. Het formaat moet exact Bearer uw_API_KEY zijn (let op: er staat één spatie tussen Bearer en de sleutel).