Claude Architect · Oppitunti

Tokenit, konteksti-ikkunat ja kustannukset

Miksi koko historia lähetetään jokaisella vuorolla ja mitä se maksaa.

Oppitunti 4/413 vaihetta

Tokenit, konteksti-ikkunat ja kustannukset on ilmainen Claude Architect-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Claude Architect-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Claude Architect-kurssilla on yhteensä 4 oppituntia.

Claudella ei ole muistia

Tämän oppitunnin tärkein ajatus on seuraava: Claude API ei säilytä MITÄÄN tilaa vuorojen välillä.

Malli ei muista edellistä viestiänne. Jokainen API-kutsu alkaa alusta. Miten chatbotit sitten vaikuttavat muistavan?

Lähetätte koko keskusteluhistorian jokaisessa pyynnössä. messages-kenttä sisältää koko keskustelun edestakaisen historian joka kerta.

Mitä pyyntö sisältää

Claude API -pyyntö sisältää muutamia keskeisiä kenttiä:

  • model — käytettävä Claude-malli
  • max_tokens — vastauksen pituuden yläraja
  • system — järjestelmäkehote
  • messages — KOKO historia jokaisella vuorolla
  • tools / tool_choice — valinnainen työkalujen määritys

Huomaatte, että messages kasvaa ajan myötä. Vuorolla 1 lähetetään yksi viesti. Vuorolla 10 lähetetään kaikki 19 aiempaa viestiä sekä uusi viesti.

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."},
    ],
)

Mikä on token?

Mallit eivät lue merkkejä tai kokonaisia sanoja. Ne lukevat tokeneita — pieniä tekstinpätkiä.

Karkea arvio: yksi token vastaa noin neljää englannin kielen merkkiä tai noin kolmea neljäsosaa sanasta. Sana "unhappiness" saattaa jakautua osiin "un" ja "happiness". Myös välimerkit ja välilyönnit lasketaan.

Tokeneilla on merkitystä, koska maksatte tokeneiden mukaan ja konteksti-ikkuna mitataan tokeneina, ei sanoina.

Syöte- ja tulostokenit

Jokaisessa pyynnössä on kaksi tokenimäärää, joista laskutetaan eri tavoin:

  • Syötetokenit — kaikki lähettämänne: system + tools + koko messages-historia.
  • Tulostokenit — mallin vastauksessaan tuottamat tokenit.

Tulostokeni maksaa yleensä enemmän kuin syöt tokeni. Koska koko historia lähetetään uudelleen jokaisella vuorolla, syötetokenit kasvavat hiljalleen valtaviksi pitkissä keskusteluissa.

Konteksti-ikkuna

Konteksti-ikkuna on suurin tokenimäärä, jonka malli voi käsitellä yhdessä pyynnössä — syöte ja tuloste yhteensä.

Jos koko historia ja pyydetty max_tokens-määrä ylittävät ikkunan, pyyntö epäonnistuu. Ikkuna on ehdoton yläraja, ei suositus.

Siksi pitkät keskustelut ja suuret työkalujen tulokset törmäävät lopulta rajaan: uudelleen lähetettävä historia kasvaa jatkuvasti sitä kohti.

Kustannukset kasvavat historian mukana

Koska koko historia lähetetään uudelleen jokaisella vuorolla, kustannukset eivät kasva keskustelun mukana lineaarisesti — ne kasvavat suunnilleen sen pituuden neliössä.

Vuorolla 1 laskutetaan muutama token. Vuorolla 20 laskutetaan kaikki 19 aiempaa vuoroa uudelleen sekä uusi vuoro. Kymmenen viestin keskustelussa varhaiset viestit laskutetaan elinkaarensa aikana uudelleen kymmenen kertaa.

Arkkitehdille tämä tarkoittaa seuraavaa: jatkuvasti juttuva agentti, joka ei koskaan karsi historiaansa, on kallis agentti.

# 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)

Mitatkaa ennen optimointia

Jokainen vastaus sisältää usage-objektin, joka ilmoittaa arvot input_tokens ja output_tokens. Tämä on kustannusten todellinen lähde.

Voitte myös laskea tokenit ennen lähettämistä, jolloin voitte ennakoida kustannukset ja tarkistaa, että pysytte ikkunan rajoissa — ilman että maksatte koko generoinnista.

Nyrkkisääntö: instrumentoi tokenien käyttö tuotannossa. Kustannusten yhteenlasketut luvut peittävät sen, mitkä keskustelut tai työkalukutsut ovat kalliita.

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)

Työkalujen tulokset paisuttavat kontekstia

Agenttisilmukoissa työkalujen tulokset lisätään historiaan ja lähetetään uudelleen jokaisella seuraavalla vuorolla. Monisanaisen työkalun palauttama 5 000 tokenin JSON-lohko aiheuttaa kustannuksia koko loppukeskustelun ajan.

Ratkaisu on karsia työkalujen yksityiskohtaiset tulokset olennaisiin kenttiin ennen niiden lisäämistä. Älkää tallentako kokonaista API-tulostetta kontekstiin, jos malli tarvitsee siitä vain kolme kenttää.

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)}],
})

Tiivistäkää pysyäksenne budjetissa

Pitkissä keskusteluissa vanhat vuorot voi korvata tiiviillä asteittain päivitettävällä yhteenvedolla, jotta historia pysyy lyhyenä ja konteksti-ikkunan rajoissa.

Varoitus kuitenkin: yhteenveto tekee luvuista, prosenteista ja päivämääristä epätarkkoja. Malli muuttaa ilmauksen "refund of $482.10 on 2026-03-14" muotoon "a refund last spring".

Arkkitehdin ratkaisu: poimi tapahtumatiedot erilliseen yhteenvedon ulkopuolella säilytettävään muuttamattomaan "case facts" -lohkoon, jotta tarkat arvot eivät hämärry.

Keskikohta unohtuu

Suurempi konteksti-ikkuna ei ratkaise kaikkea. Mallit kohdistavat eniten huomiota syötteen alkuun ja loppuun ja vähiten sen keskikohtaan. Tätä kutsutaan "lost-in-the-middle"-ilmiöksi.

Jos siis hautaat tärkeän ohjeen tai faktan valtavan historian keskelle, se saatetaan jättää huomiotta — vaikka sen lähettämisestä veloitetaan täysi hinta.

Pidä tärkeät ohjeet ja nykyinen tehtävä lähellä reunoja ja karsi raskasta keskiosaa.

Batch API ei-blokkaaviin tehtäviin

Yksi kustannusten hallintakeino on Message Batches API. Se on noin 50 % edullisempi kuin vakiopyynnöt, ja käsittelyaika voi olla enintään 24 tuntia.

Kompromissit: latenssille ei ole SLA-sopimusta, eikä monivaiheista työkalukutsua tueta. Käytä custom_id-tunnistetta pyyntöjen yhdistämiseen ja lähetä uudelleen vain epäonnistuneet pyynnöt.

Käytä Batchia yön yli ajettaviin raportteihin ja laajoihin tarkastuksiin. Älä koskaan käytä sitä estäviin, aikakriittisiin tai yhdistämistä edeltäviin tarkistuksiin — käyttäjä odottaa niitä.

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 SLA

Pikakoe

Tuotantokäytössä olevan tukichatbotin keskustelukohtaiset kustannukset kasvavat nopeasti istuntojen pidentyessä, vaikka käyttäjän yksittäiset vastaukset ovat lyhyitä. Mikä on ensisijainen syy ja oikea arkkitehtitason ratkaisu?

Kertaus: tokenit, konteksti ja kustannukset

Tärkeimmät opit:

  • API ei säilytä tilaa — lähetät koko messages-historian uudelleen jokaisella vuorolla.
  • Laskutus perustuu tokeneihin, jotka jaetaan syöte- (järjestelmä + työkalut + historia) ja tulostokeneihin.
  • Konteksti-ikkuna rajoittaa syötteen ja tulosteen yhteismäärää; uudelleen lähetettävä historia kasvaa sitä kohti, ja kustannukset kasvavat suunnilleen keskustelun pituuden neliössä.
  • Mittaa käyttöä usage- ja count_tokens-tietojen avulla ja karsi työkalujen tulosteista epäolennaiset kentät.
  • Tee yhteenveto budjetissa pysymiseksi, mutta säilytä tarkat luvut ja päivämäärät muuttamattomassa case facts -lohkossa. Huomioi lost-in-the-middle-ilmiö.
  • Batch API = noin 50 % edullisempi vain ei-blokkaaviin tehtäviin — älä koskaan käytä sitä aikakriittisiin tarkistuksiin.
Aloita maksutta

Opi Python tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
26
Oppitunnit
104

Usein kysytyt kysymykset

Onko oppitunti ”Tokenit, konteksti-ikkunat ja kustannukset” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Claude Architect-oppimispolun 3 oppituntia, myös oppitunnin “Tokenit, konteksti-ikkunat ja kustannukset”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Claude Architect-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Tokenit, konteksti-ikkunat ja kustannukset”?

Miksi koko historia lähetetään jokaisella vuorolla ja mitä se maksaa. Harjoittelet Claude Architect-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Claude Architect-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Claude Architect-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.

Kuinka kauan ”Tokenit, konteksti-ikkunat ja kustannukset”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Claude Architect-oppitunnilla?

Kyllä. Jokainen Claude Architect-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Claude-malliperhe
  2. API-pyynnön anatomia
  3. Pysäytyssyyt selitettynä
  4. Tokenit, konteksti-ikkunat ja kustannukset
← Takaisin: Claude Architect