Tokens, kontextfönster och kostnad
Varför hela historiken skickas vid varje tur och vad det kostar.
Tokens, kontextfönster och kostnad är en gratis lektion i Claude Architect på CoddyKit. Detta är lektion 4 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Claude Architect, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Claude Architect innehåller totalt 4 lektioner.
Claude har inget minne
Här är den viktigaste idén i den här lektionen: Claude API behåller INGET tillstånd mellan turer.
Modellen minns inte Ert senaste meddelande. Varje API-anrop börjar på nytt. Så hur kan chattbotar verka minnas?
Ni skickar hela konversationshistoriken i varje enskild begäran. Fältet messages innehåller hela dialogen varje gång.
Vad en begäran innehåller
En Claude API-begäran har några viktiga fält:
model— vilken Claude-modell som ska användasmax_tokens— gränsen för svarslängdensystem— systempromptenmessages— HELA historiken vid varje turtools/tool_choice— valfri verktygskonfiguration
Observera att messages växer över tid. Tur 1 skickar 1 meddelande. Tur 10 skickar alla 19 tidigare meddelanden plus det nya.
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."},
],
)Vad är en token
Modeller läser inte tecken eller hela ord. De läser tokens — små textdelar.
En grov tumregel är att en token motsvarar ungefär 4 tecken på engelska eller cirka 3/4 ord. "unhappiness" kan delas upp i "un" och "happiness". Även skiljetecken och blanksteg räknas.
Tokens är viktiga eftersom Ni betalar per token och kontextfönstret mäts i tokens, inte ord.
Indata- kontra utdatatokens
Varje begäran har två tokenantal som debiteras på olika sätt:
- Indatatokens — allt Ni skickar:
system+tools+ hela historiken imessages. - Utdatokens — det modellen genererar i sitt svar.
Utdatokens kostar vanligtvis mer per token än indatatokens. Men eftersom hela historiken skickas på nytt vid varje tur är det indatatokens som i det tysta sväller i långa konversationer.
Kontextfönstret
Kontextfönstret är det maximala antalet tokens som en modell kan hantera i en begäran — indata och utdata sammanlagt.
Om hela historiken plus det begärda max_tokens överskrider fönstret misslyckas begäran. Fönstret är ett fast tak, inte ett förslag.
Därför når långvariga chattar och stora verktygsresultat så småningom en gräns: den historik som skickas på nytt växer hela tiden mot taket.
Kostnaden växer med historiken
Eftersom Ni skickar hela historiken på nytt vid varje tur växer kostnaden inte linjärt med konversationen — den växer ungefär med dess kvadrat.
Tur 1 debiteras för några tokens. Tur 20 debiteras för alla 19 tidigare turer igen, plus den nya. En chatt med 10 meddelanden debiterar de tidiga meddelandena på nytt 10 gånger under sin livstid.
För en arkitekt betyder detta att en pratig agent som aldrig trimmar sin historik är 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ät innan Ni optimerar
Varje svar innehåller ett usage-objekt som rapporterar input_tokens och output_tokens. Detta är Er källa till sanningen för kostnaden.
Ni kan också räkna tokens innan Ni skickar begäran, så att Ni kan förutsäga kostnaden och kontrollera att Ni håller Er under fönstret — utan att betala för en fullständig generering.
En tumregel är att instrumentera tokenanvändningen i produktion. Aggregerade kostnadssiffror döljer vilka konversationer eller verktygsanrop som är dyrast.
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)Verktygsresultat sväller kontexten
I agentloopar läggs verktygsresultat till i historiken och skickas på nytt vid varje följande tur. Ett utförligt verktyg som returnerar ett JSON-objekt på 5 000 tokens fortsätter att kosta Er under resten av konversationen.
Lösningen är att trimma utförliga verktygsresultat till relevanta fält innan Ni lägger till dem. Lagra inte en hel API-dump i kontexten när tre fält är allt modellen behöver.
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)}],
})Sammanfatta för att hålla budgeten
För långa konversationer kan Ni ersätta gamla turer med en kompakt progressiv sammanfattning för att hålla historiken liten och inom fönstret.
Men var försiktig: sammanfattning gör tal, procenttal och datum vaga. Modellen skriver om "refund of $482.10 on 2026-03-14" till "en återbetalning förra våren".
Arkitektens lösning: flytta transaktionsfakta till ett separat ordagrant "case facts"-block som hålls utanför sammanfattningen, så att exakta värden aldrig blir otydliga.
Förlorad information i mitten
Ett större kontextfönster är ingen fribiljett. Modeller uppmärksammar början och slutet av indata mest, och mitten minst. Detta är effekten "lost-in-the-middle".
Om Ni alltså gömmer en viktig instruktion eller ett viktigt faktum i mitten av en enorm historik riskerar det att ignoreras — trots att Ni betalat fullt pris för att skicka det.
Håll viktiga instruktioner och den aktuella uppgiften nära kanterna och trimma den omfångsrika mitten.
Batch API för icke-blockerande jobb
Ett sätt att sänka kostnaderna är Message Batches API. Det är cirka 50 % billigare än standardförfrågningar, med ett behandlingsfönster på upp till 24 timmar.
Kompromisserna är att det inte finns något latency-SLA och att flerturnsverktygsanrop inte stöds. Använd custom_id för att koppla ihop förfrågningar och skicka bara om de som misslyckades.
Använd Batch för rapporter över natten och stora granskningar. Använd det aldrig för blockerande, tidskänsliga kontroller eller kontroller före sammanfogning — en användare väntar på dessa.
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 SLASnabb kontroll
Kostnaden per konversation för en produktionssatt supportchatbot stiger snabbt när sessionerna blir längre, trots att varje användarsvar är kort. Vad är den främsta orsaken och vilken är den rätta lösningen på arkitekturnivå?
Sammanfattning: tokens, kontext och kostnad
Viktiga slutsatser:
- API:et sparar inget tillstånd — Ni skickar om hela
messages-historiken vid varje tur. - Debiteringen sker per token, uppdelat i indata (system + verktyg + historik) och utdata.
- Kontextfönstret begränsar indata + utdata. Historiken som skickas om växer mot gränsen, och kostnaden växer ungefär med kvadraten på konversationens längd.
- Mät med
usageochcount_tokens; trimma utförliga verktygsresultat till relevanta fält. - Sammanfatta för att hålla Er inom budgeten, men behåll exakta tal och datum i ett ordagrant case-facts-block och var uppmärksam på effekten lost-in-the-middle.
- Batch API = cirka 50 % billigare, men endast för icke-blockerande jobb — aldrig för tidskänsliga kontroller.
Lär dig Python med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 26
- Lektioner
- 104
Vanliga frågor
Är lektionen ”Tokens, kontextfönster och kostnad” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Claude Architect, inklusive ”Tokens, kontextfönster och kostnad”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Claude Architect innehåller totalt 4 lektioner.
Vad lär jag mig i ”Tokens, kontextfönster och kostnad”?
Varför hela historiken skickas vid varje tur och vad det kostar. Ni övar på Claude Architect med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Claude Architect?
Du behöver inga förkunskaper. Utbildningen i Claude Architect på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.
Hur lång tid tar lektionen ”Tokens, kontextfönster och kostnad”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Claude Architect-lektionen?
Ja. Varje Claude Architect-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Claude-modellfamiljen
- Anatomin hos en API-begäran
- Förklaringar av stoporsaker
- Tokens, kontextfönster och kostnad