OpenAI Chat: snel starten met chat-completions, roles en code

OpenAI Chat: snel starten met chat-completions, roles en code

Geschreven door

in

Kort antwoord: “openai chat” is in de praktijk het aanroepen van het OpenAI chat model via een chat endpoint, waarbij je een messages-lijst doorgeeft met rollen (system, developer, user, assistant). Voor snelle integratie kun je beginnen met de OpenAI CLI (openai chat:completions) of direct met de API via een SDK, daarna optimaliseren met goede role-hiërarchie, een strakke prompt, en gecontroleerde output.

Hieronder krijg je een voorbeeld-eerst workflow, inclusief concrete code, wat je wel en niet moet doen, en hoe je dit productie-ready maakt.

1) Wat bedoelen we met “openai chat” (API, CLI, messages)

In documentatie en tooling zie je “chat” vooral terug als chat completions en als een set message-rollen die samen bepalen wat het model als instructie en context ziet. De OpenAI API referentie voor de CLI laat zien dat er een command bestaat voor chat completions, namelijk openai chat:completions. (developers.openai.com)

Het belangrijkste concept is de messages-array. Je geeft per beurt een lijst met objecten, meestal met velden zoals role en content. In de OpenAI Model Spec wordt expliciet uitgelegd dat er een hiërarchie is in instructieniveaus, en dat roles gebruikt worden om te bepalen welke instructies prioriteit hebben bij conflicten. (model-spec.openai.com)

Rollen die je in de praktijk gebruikt

  • system of platform: instructies met hoogste autoriteit (door OpenAI geleverd of door jou via system niveau, afhankelijk van je integratie). (model-spec.openai.com)
  • developer: jouw technische instructies, beleid, stijl, tools-verwachtingen. (model-spec.openai.com)
  • user: de echte input van de gebruiker, je prompt. (model-spec.openai.com)
  • assistant: optionele eerdere model-antwoorden, nodig als je een expliciete historie bouwt. (model-spec.openai.com)

Let op: je bouwt “chat” niet door een enkele string te sturen, maar door de conversation context te serialiseren als messages. Je kunt dus prima met één request werken als je maar precies geeft wat de volgende beurt nodig heeft.

2) Snel starten, optie A: CLI gebruiken voor een eerste “openai chat” request

Als je alleen wil valideren of je account, key, en modelkeuze werken, is de CLI de snelste route. De OpenAI CLI referentie documenteert de chat resource en laat zien dat je openai chat:completions kunt gebruiken. (developers.openai.com)

2.1 API key klaarzetten

Voor CLI integratie gebruikt OpenAI de omgevingsvariabele OPENAI_API_KEY. (developers.openai.com)

  • macOS/Linux:

export OPENAI_API_KEY="jouw_key"

  • Windows PowerShell:

$env:OPENAI_API_KEY="jouw_key"

2.2 Minimal CLI voorbeeld

Exacte flags verschillen per CLI versie, maar het patroon is: model kiezen, messages sturen. Gebruik de CLI referentie als bron van waarheid voor de huidige command syntax. (developers.openai.com)

Als je al een werkend snippet hebt, ga meteen door naar sectie 3 voor API code. Als je geen snippet hebt: draai eerst met CLI zodat je response vorm klopt voordat je code in je app plakt.

3) Snel starten, optie B: chat completions met voorbeeldcode

Voor integratie in een codebase wil je doorgaans een SDK call, of HTTP request, waarbij je een model en messages doorgeeft. De kern blijft hetzelfde: messages met rollen, en gecontroleerde output.

3.1 Voorbeeld in JavaScript (fetch-stijl, conceptueel)

Dit is bewust compact, zodat je snel het patroon ziet. Vervang modelnaam en afhankelijk van je stack, pas headers en endpoint aan op basis van de officiële API docs van jouw gekozen client. (De rol-hiërarchie en message concepten volgen de Model Spec.) (model-spec.openai.com)

const res = await fetch("https://api.openai.com/v1/chat/completions", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.OPENAI_API_KEY}`,
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    model: "chat-latest",
    messages: [
      { role: "system", content: "Je bent een nette technische assistent." },
      { role: "developer", content: "Antwoord kort, geef codeblokken waar nuttig." },
      { role: "user", content: "Geef een regex voor ISO 8601 datum zonder tijdzone." }
    ]
  })
});

const data = await res.json();
console.log(data.choices[0].message.content);

Opmerking over modelkeuze: OpenAI benoemt “chat-latest” als een model alias voor het nieuwste Instant model dat gekoppeld is aan ChatGPT, en beschrijft ook aanbevelingen voor productie. Controleer bij implementatie altijd de actuele model pagina voor jouw moment. (developers.openai.com)

3.2 Voorbeeld in Python (conceptueel)

from openai import OpenAI

client = OpenAI()

resp = client.chat.completions.create(
    model="chat-latest",
    messages=[
        {"role": "system", "content": "Je bent een nette technische assistent."},
        {"role": "developer", "content": "Antwoord kort, geef codeblokken waar nuttig."},
        {"role": "user", "content": "Geef een regex voor ISO 8601 datum zonder tijdzone."}
    ]
)

print(resp.choices[0].message.content)

De exacte SDK naam en aanroep blijven per taal consistent met het concept: kies model, stuur messages. Voor role-hiërarchie en instructieniveaus is de Model Spec je referentie. (model-spec.openai.com)

4) Prompt engineering die werkt: rol-hiërarchie, output contract, en context

Als je technisch bent, wil je dat “openai chat” voorspelbaar gedrag levert. Dat bereik je niet door langere prompts, maar door een contract aan het model te geven en de conversation context strak te houden.

4.1 Gebruik developer voor beleid, user voor taak

  • system: globale veiligheids- en stijlregels, of OpenAI-specifieke instructies.
  • developer: jouw engineering contract, zoals “antwoord in JSON”, “geen uitleg, alleen output”, of “stel eerst 1 vraag bij ontbrekende inputs”.
  • user: enkel de actuele taak en data, geen verborgen instructies.

De Model Spec beschrijft dat roles dienen om prioriteit te bepalen bij conflicten. Als jouw “developer” instructies niet winnen van user instructies, krijg je drift. Dus: zet de regels op de juiste autoriteit. (model-spec.openai.com)

4.2 Forceer een outputvorm (JSON schema, of strikte tekst)

Voor productie heb je twee opties:

  • Tekstcontract: vaste koppen, vaste volgorde, geen extra sections.
  • JSON contract: model moet valide JSON teruggeven. Dan parse je server-side en fail fast.

Voorbeeld contract in developer role:

{
  role: "developer",
  content: "Antwoord uitsluitend als JSON met velden: intent (string), commands (array van string). Geen extra tekst."
}

Als je JSON wilt afdwingen, behandel “model hallucinated JSON” als een parse error en doe één retry met een corrigerende prompt: “je output was geen valide JSON, herstel”.

4.3 Contextbeheer: convo historie slim opslaan

OpenAI werkt met een conversation concept waar je messages steeds expliciet doorgeeft. De model spec benadrukt dat roles en instructies hiërarchisch zijn. (model-spec.openai.com)

Praktisch betekent dat:

  1. Bewaar alleen wat je nodig hebt voor de volgende stap.
  2. Maak een “state summary” na N beurten, en stop details.
  3. Houd tool outputs gescheiden van instructies, zodat je geen “self contamination” krijgt.

5) Productie-ready integratie: logging, retries, tokens, en security

Een “openai chat” integratie is pas af als je failure modes afvangt. Dit zijn de standaard dingen die je in je pipeline bouwt.

5.1 Logging: log request model en response metadata, geen secrets

  • Log: model, latency, status code, token usage (als beschikbaar in je response).
  • Log niet: volledige prompt content als dat gevoelige data bevat, of maak het configurable.
  • Log ook de “reason” voor retry, bijvoorbeeld parse error of timeouts.

5.2 Retries: idempotentie en backoff

Voor retries zijn je belangrijkste signalen:

  • Netwerk timeouts
  • 429 rate limiting
  • 5xx errors
  • Parse errors bij JSON contract

Voeg backoff toe. Voor een retry na parse error, maak de correction prompt kort en expliciet.

5.3 Tokens: stop met “prompt stuffing”

Je wil niet dat je cost en latency lineair groeien met irrelevante context. Dus:

  • Laat system en developer prompts kort zijn.
  • Stop grote documenten alleen als je echt een passage nodig hebt.
  • Gebruik chunking en selecteer relevante chunks, als je retrieval doet.

5.4 Security: API keys, niet loggen, en threat model

OpenAI geeft aan dat je in de CLI authenticatie gebruikt via OPENAI_API_KEY. (developers.openai.com)

Dat betekent voor security:

  • Gebruik environment variables, geen keys in code.
  • Rotate keys als je exposure vermoedt.
  • Beperk wat je user input kan doen, door een strikt output contract te hanteren.

5.5 “Chat” versus agents tooling (wanneer je moet opschalen)

Als je naar multi-step workflows gaat, zie je tooling rond agents en threads in OpenAI docs. Die concepten leggen uit hoe je messages in een sessie organiseert, en hoe tool lifecycle werkt. (platform.openai.com)

Voor eenvoudige chat, houd je het bij chat completions. Voor meerstaps automatisering met tools, kijk je naar agents tooling in dezelfde ecosystem context.

6) Debuggen: waarom “openai chat” soms afwijkt

Als je model output niet doet wat je verwacht, zijn er meestal drie oorzaken: rol conflict, context drift, of te vage instructies.

6.1 Rol conflict door instructies op de verkeerde plek

De Model Spec legt uit dat roles hiërarchisch zijn en conflicten afhandelt via autoriteit. (model-spec.openai.com)

Checklist:

  • Regels staan in developer, niet in user.
  • Je vraagt geen tegenstrijdige dingen in dezelfde beurt.
  • Je gebruikt een output contract dat niet te breed is.

6.2 Context drift door te veel historie

Als je te veel beurten meestuurt, gaat het model “gemiddelde intenties” volgen. Fix: verklein prompt, voeg state summary toe, en eindig altijd met het actuele user verzoek.

6.3 Vage output specificaties

“Geef een oplossing” is te breed. Geef altijd minimum één van:

  • Formaat (JSON, bullets, codeblock)
  • Lengte limiet
  • Verplichte velden of variabelen
  • Wat te doen bij ontbrekende input (stel vraag, of default)

7) Voorbeeld workflow voor een developer, van prototype naar production

Gebruik deze workflow als je snel wil bouwen zonder later refactor pain.

7.1 Prototype

  • Begin met één call met system + developer + user.
  • Gebruik CLI om je omgeving te verifiëren. (developers.openai.com)
  • Leg een eerste output contract vast.

7.2 Hardening

  • Voeg JSON parsing en retries toe.
  • Log metadata, niet secrets.
  • Voeg timeouts toe, plus circuit breaker als je dependency flakt.

7.3 Opschaling

  • Als je meerdere tools en stappen nodig hebt, kijk naar agents tooling concepten en lifecycle. (platform.openai.com)
  • Organiseer conversation sessies met threads en messages, zodat tool outputs netjes in context landen.

Als je wil doorpakken met engineering keuzes rondom OpenAI integraties, zijn deze interne artikelen relevant voor je volgende stap:

7.4 Training als je meerdere cases wil versnellen

En als je een vooruitblik wil op wat je morgen al kunt bouwen met AI workflows:

Conclusie: zo maak je “openai chat” snel bruikbaar en niet fragiel

Gebruik “openai chat” als een gestandaardiseerde manier om een model aan te sturen via messages met roles. Begin met een minimale system, developer, user set, en forceer een output contract. Start met de CLI om je integratie te sanity-checken, daarna vervang je prototype door SDK of HTTP call met logging, retries, en strikte parse errors voor JSON.

Als je dit doet, krijg je drie directe voordelen: voorspelbaar gedrag door rol-hiërarchie, beheersbare latency en kosten door context discipline, en production-grade betrouwbaarheid door failure handling.

Reacties

Geef een reactie

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *