Het Chat Completions-endpoint
U begrijpt de messages-array met de rollen system, user en assistant, maakt uw eerste prompt en interpreteert het response-object dat de API retourneert.
Het Chat Completions-endpoint is een gratis AI Engineering Academy-les op CoddyKit. Dit is les 2 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject AI Engineering Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus AI Engineering Academy bevat in totaal 4 lessen.
De architectuur van de berichtenreeks
Het Chat Completions-eindpunt werkt met een berichtenreeks: een lijst met beurten, elk met een rol (system, user of assistant). Het model is staatloos, dus je stuurt de geschiedenis elke keer mee.
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create(
model='gpt-4o-mini',
messages=[
{'role': 'system', 'content': 'You are a concise Python tutor.'},
{'role': 'user', 'content': 'What is a list comprehension?'}
]
)
print(response.choices[0].message.content)De systeemrol: gedrag definiëren
Het systeembericht is je krachtigste hulpmiddel. Het bepaalt de persona, regels en indeling van het model voordat de gebruiker één woord typt. Besteed hier tijd aan — het vormt alles. Bekijk de code.
system_prompt = '''You are a customer support agent for TechShop.
You help customers with: order tracking, returns, and product questions.
You do NOT discuss pricing changes or competitor products.
Always respond in 2-3 sentences maximum.
If you cannot help, say: 'Let me connect you with a human agent.'
'''
response = client.chat.completions.create(
model='gpt-4o-mini',
messages=[
{'role': 'system', 'content': system_prompt},
{'role': 'user', 'content': 'Where is my order #12345?'}
]
)Gesprekken met meerdere beurten beheren
Om een gesprek voort te zetten, voeg je elke beurt toe aan de berichtenreeks en stuur je alles opnieuw. Zo lijkt het alsof het model iets onthoudt — je voert het de volledige geschiedenis.
history = [
{'role': 'system', 'content': 'You are a helpful assistant.'}
]
def chat(user_message):
history.append({'role': 'user', 'content': user_message})
response = client.chat.completions.create(
model='gpt-4o-mini',
messages=history
)
assistant_reply = response.choices[0].message.content
history.append({'role': 'assistant', 'content': assistant_reply})
return assistant_reply
print(chat('My name is Alice.'))
print(chat('What is my name?')) # model remembers 'Alice'De opbouw van het API-antwoord
Het antwoord is een object, niet alleen tekst. choices bevat het antwoord, finish_reason geeft aan waarom het is gestopt en usage telt tokens — en dat bepaalt je kosten. Registreer deze gegevens in productie.
response = client.chat.completions.create(
model='gpt-4o-mini',
messages=[{'role': 'user', 'content': 'Say hello in one word.'}]
)
# Accessing response fields
print('Content:', response.choices[0].message.content)
print('Finish reason:', response.choices[0].finish_reason) # 'stop'
print('Model:', response.model) # exact version like gpt-4o-mini-2024-07-18
print('Prompt tokens:', response.usage.prompt_tokens)
print('Completion tokens:', response.usage.completion_tokens)
print('Total tokens:', response.usage.total_tokens)finish_reason begrijpen
finish_reason vertelt je waarom het genereren is gestopt. 'stop' betekent dat het klaar is; 'length' betekent dat max_tokens is bereikt en het antwoord halverwege is afgebroken. Controleer dit altijd — afkapping is een stille fout.
def safe_completion(messages, max_tokens=500):
response = client.chat.completions.create(
model='gpt-4o-mini',
messages=messages,
max_tokens=max_tokens
)
choice = response.choices[0]
if choice.finish_reason == 'length':
print(f'WARNING: Response was truncated at {max_tokens} tokens!')
elif choice.finish_reason == 'content_filter':
print('WARNING: Response blocked by content filter!')
return None
return choice.message.contentHet juiste model selecteren
Kies het juiste model voor de taak. gpt-4o is de krachtpatser voor moeilijke redeneertaken; gpt-4o-mini is veel goedkoper en kan de meeste taken goed uitvoeren. Meet de prestaties voordat je ervan uitgaat dat groter beter is.
# Model comparison guidance
models = {
'gpt-4o': {
'use_for': 'Complex reasoning, code generation, nuanced analysis',
'input_cost_per_1M': 2.50, # USD
'output_cost_per_1M': 10.00
},
'gpt-4o-mini': {
'use_for': 'Classification, extraction, summarization, Q&A',
'input_cost_per_1M': 0.15,
'output_cost_per_1M': 0.60
}
}
# gpt-4o is ~17x more expensive on input tokensInhoudstypen in berichten
De content van een bericht kan meer zijn dan tekst. Voor visiemodellen zoals gpt-4o stuur je een lijst met een combinatie van tekst en afbeeldingen — zo kun je vragen stellen over grafieken of schermafbeeldingen.
# Sending an image to a vision-capable model
response = client.chat.completions.create(
model='gpt-4o',
messages=[
{
'role': 'user',
'content': [
{
'type': 'text',
'text': 'What is in this image? Describe in one sentence.'
},
{
'type': 'image_url',
'image_url': {'url': 'https://example.com/photo.jpg'}
}
]
}
]
)De parameter n: meerdere aanvullingen
De parameter n retourneert meerdere aanvullingen voor één prompt. Handig om de beste te kiezen of voor meer zekerheid: als alle n antwoorden overeenkomen, is het model zeker; als ze van elkaar verschillen, moet je voorzichtig zijn.
response = client.chat.completions.create(
model='gpt-4o-mini',
messages=[{'role': 'user', 'content': 'Name the capital of Germany.'}],
n=3, # generate 3 independent completions
temperature=0.5
)
for i, choice in enumerate(response.choices):
print(f'Completion {i+1}: {choice.message.content}')
# Check if all completions agree (confidence signal)
answers = [c.message.content.strip() for c in response.choices]
print('All agree:', len(set(answers)) == 1)Het antwoord als tekenreeks verwerken
Om het antwoord als tekst op te halen, gebruik je altijd het pad response.choices[0].message.content. Wikkel dit in een hulpfunctie — en controleer op None, wat gebeurt bij toolaanroepen of filters.
def get_completion(prompt, system='You are a helpful assistant.', model='gpt-4o-mini'):
'''Simple helper that returns the response text as a string.'''
response = client.chat.completions.create(
model=model,
messages=[
{'role': 'system', 'content': system},
{'role': 'user', 'content': prompt}
]
)
content = response.choices[0].message.content
if content is None:
raise ValueError(f'No content in response. Finish reason: {response.choices[0].finish_reason}')
return content
result = get_completion('Explain recursion in one sentence.')
print(result)Het onbewerkte verzoek en antwoord bekijken
Debug je onverwachte antwoorden? Bekijk dan het onbewerkte verzoek en antwoord. Als je OPENAI_LOG=debug instelt, wordt de volledige inhoud naar je terminal afgedrukt — de snelste manier om te zien wat er over de verbinding gaat.
import json
import httpx
# Enable debug logging (shows full request/response)
import os
os.environ['OPENAI_LOG'] = 'debug'
# Or use a custom logging client:
class LoggingClient(httpx.Client):
def send(self, request, *args, **kwargs):
print('REQUEST:', request.method, request.url)
print('BODY:', json.loads(request.content))
response = super().send(request, *args, **kwargs)
print('STATUS:', response.status_code)
return responseEen minimale chatlus bouwen
Nu kun je een minimale chatlus bouwen: houd een berichtenlijst bij, voeg elke beurt toe, stuur alles, en herhaal. Dit eenvoudige patroon vormt de basis van elke chatapp op de API. De code laat dit zien.
import openai
client = openai.OpenAI()
SYSTEM_PROMPT = 'You are a helpful assistant. Be concise.'
def simple_chat_loop():
messages = [{'role': 'system', 'content': SYSTEM_PROMPT}]
print('Chat started. Type "quit" to exit.')
while True:
user_input = input('You: ').strip()
if user_input.lower() == 'quit':
break
if not user_input:
continue
messages.append({'role': 'user', 'content': user_input})
response = client.chat.completions.create(
model='gpt-4o-mini',
messages=messages,
max_tokens=500
)
assistant_reply = response.choices[0].message.content
messages.append({'role': 'assistant', 'content': assistant_reply})
print(f'Assistant: {assistant_reply}\n')
print('Example chat loop defined. Run simple_chat_loop() to start.')Korte controle
Test je begrip van de AI-engineeringconcepten uit deze les.
Samenvatting van de les
Je hebt de basis van chatten geleerd: de berichtenreeks bepaalt het gesprek en het antwoord bevat content, finish_reason en aantallen tokens. Hierna: parameters.
Leer Python met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 30
- Lessen
- 120
Veelgestelde vragen
Is de les “Het Chat Completions-endpoint” gratis?
Ja — de volledige tekst van “Het Chat Completions-endpoint” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus AI Engineering Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus AI Engineering Academy bevat in totaal 4 lessen.
Wat leer ik in “Het Chat Completions-endpoint”?
U begrijpt de messages-array met de rollen system, user en assistant, maakt uw eerste prompt en interpreteert het response-object dat de API retourneert. Je oefent met AI Engineering Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met AI Engineering Academy te beginnen?
Ervaring vooraf is niet nodig. AI Engineering Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.
Hoe lang duurt de les “Het Chat Completions-endpoint”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over AI Engineering Academy?
Ja. Elke les over AI Engineering Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Uw Python-omgeving instellen
- Het Chat Completions-endpoint
- Modelgedrag sturen met parameters
- Foutafhandeling en rate limits