Tokens, contextvensters en kosten
Waarom bij elke beurt de volledige geschiedenis wordt meegestuurd en wat dat kost
Tokens, contextvensters en kosten is een gratis Claude Architect-les op CoddyKit. Dit is les 4 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Claude Architect. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Claude Architect bevat in totaal 4 lessen.
Claude heeft geen geheugen
Dit is het belangrijkste idee in deze les: de Claude API houdt GEEN status bij tussen beurten.
Het model onthoudt je vorige bericht niet. Elke API-aanroep begint opnieuw. Hoe lijken chatbots dan toch iets te onthouden?
Je verstuurt de volledige gesprekgeschiedenis in elk afzonderlijk verzoek. Het veld messages bevat elke keer de volledige heen-en-weerdialoog.
Wat een verzoek bevat
Een verzoek aan de Claude API heeft enkele belangrijke velden:
model— welk Claude-model je wilt gebruikenmax_tokens— de limiet voor de lengte van het antwoordsystem— de systeempromptmessages— de VOLLEDIGE geschiedenis bij elke beurttools/tool_choice— optionele configuratie van gereedschappen
Merk op dat messages in de loop van de tijd groeit. In beurt 1 verstuur je één bericht. In beurt 10 verstuur je alle 19 eerdere berichten plus het nieuwe bericht.
resp = client.messages.create(
model="claude-sonnet-4-5",
max_tokens=1024,
system="You are a support agent.",
messages=[
{"role": "user", "content": "My order is late."},
{"role": "assistant", "content": "I can help. What is your order ID?"},
{"role": "user", "content": "It's #4821."},
],
)Wat is een token?
Modellen lezen geen tekens of volledige woorden. Ze lezen tokens — kleine stukken tekst.
Een ruwe richtlijn: één token bestaat uit ongeveer 4 Engelse tekens, of grofweg 3/4 van een woord. "unhappiness" kan worden opgesplitst in "un" en "happiness". Ook leestekens en spaties tellen mee.
Tokens zijn belangrijk omdat je per token betaalt en het contextvenster wordt gemeten in tokens, niet in woorden.
Invoer- versus uitvoertokens
Elk verzoek heeft twee aantallen tokens waarvoor verschillende kosten gelden:
- Invoertokens — alles wat je verstuurt:
system+tools+ de volledige geschiedenis inmessages. - Uitvoertokens — wat het model in zijn antwoord genereert.
Uitvoertokens kosten per token meestal meer dan invoertokens. Maar omdat de volledige geschiedenis bij elke beurt opnieuw wordt verstuurd, zijn het de invoertokens die ongemerkt enorm toenemen in lange gesprekken.
Het contextvenster
Het contextvenster is het maximale aantal tokens dat een model in één verzoek kan verwerken — invoer plus uitvoer samen.
Als je volledige geschiedenis plus de aangevraagde max_tokens het venster overschrijdt, mislukt het verzoek. Het venster is een harde bovengrens, geen suggestie.
Daarom lopen langdurige chats en grote uitvoer van gereedschappen uiteindelijk tegen een limiet aan: de opnieuw verstuurde geschiedenis blijft naar die limiet toe groeien.
Kosten groeien mee met de geschiedenis
Omdat je bij elke beurt de volledige geschiedenis opnieuw verstuurt, groeien de kosten niet lineair met het gesprek — ze groeien ongeveer met het kwadraat van de lengte ervan.
Voor beurt 1 betaal je voor enkele tokens. Voor beurt 20 betaal je opnieuw voor alle 19 eerdere beurten, plus de nieuwe. In een chat met 10 berichten worden de vroege berichten gedurende de levensduur ervan 10 keer opnieuw in rekening gebracht.
Voor een architect betekent dit: een praatgrage agent die zijn geschiedenis nooit inkort, is een dure agent.
# Rough illustration of resent input growing each turn
history = []
for turn in range(1, 6):
history.append({"role": "user", "content": user_msg(turn)})
resp = client.messages.create(
model="claude-sonnet-4-5",
max_tokens=512,
messages=history, # ENTIRE history resent every turn
)
history.append({"role": "assistant", "content": resp.content})
print("turn", turn, "input_tokens", resp.usage.input_tokens)Meten voordat je optimaliseert
Elke respons bevat een object usage met daarin input_tokens en output_tokens. Dit is je betrouwbare bron voor kosten.
Je kunt tokens ook voor het versturen tellen, zodat je de kosten kunt voorspellen en kunt controleren of je binnen het venster blijft — zonder te betalen voor een volledige generatie.
Vuistregel: meet het tokengebruik in productie. Geaggregeerde kosten verbergen welke gesprekken of aanroepen van gereedschappen het duurst zijn.
count = client.messages.count_tokens(
model="claude-sonnet-4-5",
system="You are a support agent.",
messages=history,
)
print("input tokens before send:", count.input_tokens)
resp = client.messages.create(model="claude-sonnet-4-5", max_tokens=512, messages=history)
print("billed:", resp.usage.input_tokens, resp.usage.output_tokens)Uitvoer van gereedschappen maakt de context groter
In agentlussen worden resultaten van gereedschappen aan de geschiedenis toegevoegd en bij elke volgende beurt opnieuw verstuurd. Een uitgebreid gereedschap dat een JSON-object van 5.000 tokens terugstuurt, blijft je de rest van het gesprek geld kosten.
De oplossing is om uitgebreide uitvoer van gereedschappen vóór het toevoegen in te korten tot de relevante velden. Bewaar geen volledige API-uitvoer in de context wanneer drie velden alles zijn wat het model nodig heeft.
raw = lookup_order(order_id) # huge JSON
# Trim to what the model actually needs
tool_result = {
"order_id": raw["id"],
"status": raw["status"],
"eta": raw["estimated_delivery"],
}
history.append({
"role": "user",
"content": [{"type": "tool_result", "tool_use_id": tu_id,
"content": json.dumps(tool_result)}],
})Samenvatten om binnen het budget te blijven
Bij lange gesprekken kun je oude beurten vervangen door een compacte voortschrijdende samenvatting om de geschiedenis klein en binnen het venster te houden.
Maar let op: door samenvatten worden getallen, percentages en datums vaag. Het model herschrijft "refund of $482.10 on 2026-03-14" als "een terugbetaling afgelopen voorjaar".
De oplossing van de architect: haal transactionele feiten naar een apart letterlijk blok met "case facts" dat buiten de samenvatting wordt bewaard, zodat exacte waarden nooit vervagen.
Verloren in het midden
Een groter contextvenster is geen vrijbrief. Modellen letten het sterkst op het begin en het einde van de invoer, en het minst op het midden. Dit is het effect van "verloren in het midden".
Als je dus een cruciale instructie of een belangrijk feit in het midden van een enorme geschiedenis begraaft, loop je het risico dat het wordt genegeerd — ook al heb je de volledige prijs betaald om het mee te sturen.
Houd belangrijke instructies en de huidige taak dicht bij de randen; kort het omvangrijke midden in.
Batch API voor niet-blokkerende taken
Een manier om kosten te verlagen is de Message Batches API. Deze is ongeveer 50% goedkoper dan standaardverzoeken, met een verwerkingstermijn van maximaal 24 uur.
De nadelen: er is geen SLA voor latentie en aanroepen van hulpmiddelen over meerdere beurten worden niet ondersteund. Gebruik custom_id om verzoeken aan elkaar te koppelen; dien alleen de mislukte verzoeken opnieuw in.
Gebruik Batch voor nachtelijke rapporten en grote controles. Gebruik het nooit voor blokkerende, tijdgevoelige of controles vóór het mergen — daar wacht een gebruiker op.
batch = client.messages.batches.create(requests=[
{"custom_id": "doc-001", "params": {
"model": "claude-sonnet-4-5", "max_tokens": 1024,
"messages": [{"role": "user", "content": classify(doc_1)}]}},
{"custom_id": "doc-002", "params": {
"model": "claude-sonnet-4-5", "max_tokens": 1024,
"messages": [{"role": "user", "content": classify(doc_2)}]}},
]) # ~50% cheaper, up to 24h, no latency SLAKorte controle
De kosten per gesprek van een productiechatbot voor ondersteuning lopen snel op naarmate sessies langer worden, ook al is elk antwoord van de gebruiker kort. Wat is de belangrijkste oorzaak en wat is de juiste oplossing op architectniveau?
Samenvatting: tokens, context en kosten
Belangrijkste punten:
- De API bewaart geen status — je stuurt bij elke beurt de volledige geschiedenis van
messagesopnieuw. - De facturering gebeurt per token, opgesplitst in invoer (systeem + hulpmiddelen + geschiedenis) en uitvoer.
- Het contextvenster begrenst invoer + uitvoer; opnieuw meegestuurde geschiedenis groeit ernaartoe en de kosten groeien ruwweg met het kwadraat van de gesprekslengte.
- Meet met
usageencount_tokens; kort uitvoer van hulpmiddelen in tot relevante velden. - Vat samen om binnen het budget te blijven, maar bewaar exacte getallen en datums in een letterlijk blok met casusfeiten; let op het effect van verloren informatie in het midden.
- Batch API = ongeveer 50% goedkoper, maar alleen voor niet-blokkerende taken — nooit voor tijdgevoelige controles.
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
- 26
- Lessen
- 104
Veelgestelde vragen
Is de les “Tokens, contextvensters en kosten” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad Claude Architect, waaronder “Tokens, contextvensters en kosten”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Claude Architect bevat in totaal 4 lessen.
Wat leer ik in “Tokens, contextvensters en kosten”?
Waarom bij elke beurt de volledige geschiedenis wordt meegestuurd en wat dat kost Je oefent met Claude Architect 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 Claude Architect te beginnen?
Ervaring vooraf is niet nodig. Claude Architect 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 4 van 4.
Hoe lang duurt de les “Tokens, contextvensters en kosten”?
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 Claude Architect?
Ja. Elke les over Claude Architect 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
- De Claude-modelfamilie
- Anatomie van een API-request
- Redenen voor stoppen uitgelegd
- Tokens, contextvensters en kosten