Tokens, kontekstvinduer og kostnad
Hvorfor hele historikken sendes i hver omgang, og hva det koster.
Tokens, kontekstvinduer og kostnad er en gratis leksjon i Claude Architect på CoddyKit. Dette er leksjon 4 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Claude Architect, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Claude Architect inneholder totalt 4 leksjoner.
Claude har ikke noe minne
Her er den viktigste ideen i denne leksjonen: Claude API beholder INGEN tilstand mellom omgangene.
Modellen husker ikke den forrige meldingen Deres. Hvert API-kall starter på nytt. Så hvordan kan det virke som om chatboter husker?
De sender hele samtalehistorikken i hver eneste forespørsel. Feltet messages inneholder hele dialogen frem og tilbake, hver gang.
Hva en forespørsel inneholder
En forespørsel til Claude API har noen viktige felt:
model— hvilken Claude-modell som skal brukesmax_tokens— øvre grense for svarlengdensystem— systeminstruksenmessages— HELE historikken i hver omgangtools/tool_choice— valgfri verktøykonfigurasjon
Legg merke til at messages vokser over tid. Omgang 1 sender 1 melding. Omgang 10 sender alle de 19 tidligere meldingene pluss den nye.
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."},
],
)Hva er et token?
Modeller leser ikke tegn eller hele ord. De leser tokens — små tekstbiter.
En grov tommelfingerregel er at ett token tilsvarer omtrent 4 engelske tegn eller rundt 3/4 av et ord. "unhappiness" kan deles opp i "un" og "happiness". Tegnsetting og mellomrom teller også.
Tokens er viktige fordi De betaler per token, og kontekstvinduet måles i tokens, ikke ord.
Inndata- kontra utdata-tokens
Hver forespørsel har to token-antall som faktureres forskjellig:
- Inndata-tokens — alt De sender:
system+tools+ helemessages-historikken. - Utdata-tokens — det modellen genererer i svaret.
Utdata-tokens koster vanligvis mer per token enn inndata-tokens. Men fordi hele historikken sendes på nytt i hver omgang, er det inndata-tokens som ubemerket vokser kraftig i lange samtaler.
Kontekstvinduet
Kontekstvinduet er det maksimale antallet tokens en modell kan håndtere i én forespørsel — inndata og utdata til sammen.
Hvis hele historikken pluss forespurte max_tokens overskrider vinduet, mislykkes forespørselen. Vinduet er en absolutt grense, ikke et forslag.
Derfor møter langvarige samtaler og store verktøyutdata til slutt en grense: Historikken som sendes på nytt, vokser stadig mot grensen.
Kostnaden vokser med historikken
Fordi De sender hele historikken på nytt i hver omgang, vokser ikke kostnaden lineært med samtalen — den vokser omtrent med kvadratet av lengden.
Omgang 1 fakturerer noen få tokens. Omgang 20 fakturerer alle de 19 tidligere omgangene på nytt, i tillegg til den nye. En samtale med 10 meldinger fakturerer de tidlige meldingene på nytt 10 ganger i løpet av levetiden.
For en arkitekt betyr dette at en pratsom agent som aldri trimmer historikken, er en dyr 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)Mål før De optimaliserer
Hvert svar inneholder et usage-objekt som rapporterer input_tokens og output_tokens. Dette er fasiten for kostnadene.
De kan også telle tokens før De sender, slik at De kan forutsi kostnaden og kontrollere at De er innenfor vinduet — uten å betale for en full generering.
Tommelfingerregel: instrumenter token-bruken i produksjon. Samlede kostnadstall skjuler hvilke samtaler eller verktøykall som er dyrest.
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)Verktøyutdata gjør konteksten større
I agentløkker legges verktøyresultater til i historikken og sendes på nytt i hver påfølgende omgang. Et detaljert verktøy som returnerer en JSON-klump på 5 000 tokens, fortsetter å koste Dem resten av samtalen.
Løsningen er å trimme detaljerte verktøyutdata til de relevante feltene før De legger dem til. Ikke lagre en hel API-dump i konteksten når tre felt er alt modellen trenger.
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)}],
})Oppsummer for å holde budsjettet
For lange samtaler kan De erstatte gamle meldingsrunder med et kompakt fortløpende sammendrag for å holde historikken liten og innenfor kontekstvinduet.
Men vær oppmerksom på at sammendrag gjør tall, prosenter og datoer vage. Modellen omskriver «refusjon på 482,10 USD den 14.03.2026» til «en refusjon i vår».
Arkitektens løsning er å hente transaksjonsfakta inn i en separat ordrett «saksfakta»-blokk som holdes utenfor sammendraget, slik at de nøyaktige verdiene aldri blir utydelige.
Tapt i midten
Et større kontekstvindu er ikke en fribillett. Modeller legger mest vekt på begynnelsen og slutten av inndataene, og minst på midten. Dette er effekten «tapt i midten».
Hvis De derfor begraver en kritisk instruksjon eller et viktig faktum midt i en enorm historikk, risikerer De at det blir ignorert — selv om De har betalt full pris for å sende det.
Plasser viktige instruksjoner og den aktuelle oppgaven nær kantene, og beskjær den omfattende midtdelen.
Batch API for ikke-blokkerende jobber
Et kostnadsgrep er Message Batches API. Det er omtrent 50 % billigere enn standardforespørsler, med et behandlingsvindu på opptil 24 timer.
Ulempene er at det ikke finnes noen SLA for svartid, og at verktøykall i flere runder IKKE støttes. Bruk custom_id til å koble sammen forespørsler, og send bare inn feilene på nytt.
Bruk Batch til rapporter over natten og omfattende revisjoner. Bruk det aldri til blokkerende, tidssensitive kontroller eller kontroller før sammenslåing — en bruker venter på disse.
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 SLAHurtigsjekk
Kostnaden per samtale for en chatbot som brukes i produksjonsstøtte, øker raskt når øktene blir lengre, selv om hvert brukersvar er kort. Hva er den viktigste årsaken, og hva er den riktige løsningen på arkitekturnivå?
Oppsummering: tokens, kontekst og kostnad
Viktigste punkter:
- API-et opprettholder ingen tilstand — De sender hele
messages-historikken på nytt i hver runde. - Faktureringen skjer per token, delt inn i inndata (system + verktøy + historikk) og utdata.
- Kontekstvinduet begrenser inndata + utdata; historikken som sendes på nytt, vokser mot denne grensen, og kostnaden vokser omtrent med kvadratet av samtalens lengde.
- Mål med
usageogcount_tokens, og beskjær ordrike verktøyresultater til relevante felt. - Oppsummer for å holde Dem innenfor budsjettet, men behold nøyaktige tall og datoer i en ordrett saksfaktablokk, og vær oppmerksom på effekten «tapt i midten».
- Batch API = omtrent 50 % billigere, men bare for ikke-blokkerende jobber — aldri for tidssensitive kontroller.
Lær deg Python med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 26
- Leksjoner
- 104
Ofte stilte spørsmål
Er leksjonen «Tokens, kontekstvinduer og kostnad» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Claude Architect, inkludert «Tokens, kontekstvinduer og kostnad», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Claude Architect inneholder totalt 4 leksjoner.
Hva lærer jeg i «Tokens, kontekstvinduer og kostnad»?
Hvorfor hele historikken sendes i hver omgang, og hva det koster. Du øver på Claude Architect med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Claude Architect?
Ingen tidligere erfaring er nødvendig. Claude Architect på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.
Hvor lang tid tar leksjonen «Tokens, kontekstvinduer og kostnad»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Claude Architect-leksjonen?
Ja. Alle Claude Architect-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Claude-modellfamilien
- Anatomien til en API-forespørsel
- Forklaring av årsaker til stopp
- Tokens, kontekstvinduer og kostnad