Claude Architect · leksjon

Hele historikken er nødvendig

Hver forespørsel inneholder hele samtalen.

Leksjon 1 av 413 trinn

Hele historikken er nødvendig er en gratis leksjon i Claude Architect på CoddyKit. Dette er leksjon 1 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.

Modellen beholder ingen tilstand

Det viktigste De må vite om Claude API: modellen er tilstandsløs. Den husker ingenting mellom forespørsler. Det finnes ingen skjult økt hos Anthropic som inneholder de tidligere meldingene.

Hver gang De kaller API-et, sender De hele samtalehistorikken i messages-matrisen. Hvis et faktum ikke finnes i denne matrisen, kjenner modellen det ganske enkelt ikke — selv om den fortalte Dem det samme faktumet for tretti sekunder siden.

For en Claude Certified Architect endrer denne innsikten hvordan De utformer alle systemer med flere meldingsrunder, agentiske løkker og overleveringer mellom flere agenter.

En forespørsels anatomi

En Claude API-forespørsel inneholder et fast sett med felt. Dette er feltene De kommer til å bruke i hver meldingsrunde:

  • model — hvilken Claude-modell som skal kalles
  • max_tokens — budsjett for resultatet
  • system — systemprompten (instruksjoner, rolle og regler)
  • messages — hele samtalehistorikken som en matrise med objekter for rolle og innhold
  • tools og tool_choice — valgfrie verktøydefinisjoner og kontroll over valg

Legg merke til hva som IKKE finnes her: noen form for samtale-ID eller økttoken. Tilstanden ligger utelukkende i det De sender på nytt.

import anthropic

client = anthropic.Anthropic()

response = client.messages.create(
    model="claude-sonnet-4-5",
    max_tokens=1024,
    system="You are a concise travel assistant.",
    messages=[
        {"role": "user", "content": "I want to visit Japan in spring."}
    ],
)

Bygge historikkmatrisen

For å fortsette en samtale svarer De ikke på en økt — De legger til modellens forrige svar og den nye brukermeldingen i den samme messages-listen, og sender deretter alt på nytt.

Mønsteret er: ta messages fra forrige meldingsrunde, legg til assistentens svar, legg til den nye brukermeldingen, og kall på nytt. Matrisen vokser for hver utveksling.

messages = [
    {"role": "user", "content": "I want to visit Japan in spring."},
    {"role": "assistant", "content": "Great — cherry blossom season peaks in early April."},
    {"role": "user", "content": "What about the weather then?"},
]

response = client.messages.create(
    model="claude-sonnet-4-5",
    max_tokens=1024,
    messages=messages,  # full history, every turn
)

Hva skjer hvis De glemmer det

Anta at De bare sender den nyeste brukermeldingen — "What about the weather then?" — og utelater de tidligere meldingene. Modellen har ingen anelse om hva «then» viser til, eller at Japan noen gang ble nevnt.

Den vil enten be om en avklaring eller hallusinere en kontekst. Dette er den vanligste årsaken til feil av typen «boten glemte hva vi snakket om». Løsningen er aldri et triks i prompten — De må sende hele historikken på nytt.

Verktøyresultater er også en del av historikken

Historikken består ikke bare av tekst fra bruker og assistent. Når modellen kaller et verktøy, fortsetter samtalen med strukturerte meldingsrunder:

  • en assistant-melding som inneholder en tool_use-blokk
  • en user-melding som inneholder den tilhørende tool_result

De må legge verktøyresultatet til i messages og sende alt på nytt. Modellen «ser» bare resultatet fra verktøyet fordi det nå er en del av historikken De fører videre.

messages.append({"role": "assistant", "content": response.content})  # has tool_use
messages.append({
    "role": "user",
    "content": [{
        "type": "tool_result",
        "tool_use_id": tool_use_id,
        "content": "Tokyo, April: ~15C, mild, occasional rain.",
    }],
})

response = client.messages.create(
    model="claude-sonnet-4-5",
    max_tokens=1024,
    tools=tools,
    messages=messages,  # history now includes the tool_result
)

Den agentiske løkken fører historikken videre

Det er derfor den agentiske løkken fungerer slik den gjør. For hver iterasjon sender De forespørselen, undersøker stop_reason, og hvis den er tool_use, kjører De verktøyene, legger resultatene til i historikken og fortsetter løkken — til stop_reason er end_turn.

Løkken er grunnleggende sett en løkke som samler historikk. Avslutt basert på stop_reason, ALDRI ved å lete etter ord som «done» i teksten. En grense for antall iterasjoner er et sikkerhetsnett, ikke den primære avslutningsmekanismen.

while True:
    response = client.messages.create(
        model="claude-sonnet-4-5", max_tokens=1024,
        tools=tools, messages=messages,
    )
    if response.stop_reason == "tool_use":
        messages.append({"role": "assistant", "content": response.content})
        messages.append({"role": "user", "content": run_tools(response)})
        continue  # resend the FULL grown history
    break  # end_turn -> done

Underagenter arver IKKE historikken

Her er fellen i systemer med flere agenter. I et nav-og-eiker-system delegerer en koordinator arbeid til underagenter via Task-kall. Men en underagent får en ny samtale — den arver IKKE koordinatorens meldingshistorikk.

Hvis underagenten trenger kunde-ID-en, ordrenummeret eller et tidligere funn, må koordinatoren sende det eksplisitt i prompten til underagenten. Å anta at historikken arves, fører garantert til feil: underagenten arbeider i blinde.

Sende kontekst eksplisitt

Fordi tilstanden ikke deles, må koordinatoren pakke riktig kontekst inn i hver delegering. Gi underagenten nøyaktig det den trenger for å handle — ikke mer (prinsippet om minste privilegium gjelder også for kontekst).

Flere Task-kall i samme svar kjører parallelt, og hvert av dem er en selvstendig beskrivelse. Behandle hver prompt til en underagent som en komplett, frittstående forespørsel.

subagent_prompt = f"""
You are researching flight options.
Context (you have no other history):
- Destination: Tokyo, Japan
- Travel window: early April 2026
- Origin: Istanbul (IST)
Return the 3 cheapest round-trip options with dates and prices.
"""
# Coordinator allowedTools must include "Task".
# Subagent starts with a blank message history -> context must be inline.

Historikken vokser — og det gjør kostnadene også

Det får konsekvenser å sende alt på nytt: for hver meldingsrunde tokeniseres hele historikken på nytt. Lange samtaler betyr større, tregere og dyrere forespørsler, og til slutt blir kontekstvinduet fullt.

På arkitekturnivå handler pålitelighetsarbeid om å håndtere denne veksten uten å miste nøyaktighet:

  • Forkort omfattende verktøyresultater til bare de relevante feltene før de legges til.
  • Progressiv oppsummering komprimerer eldre meldingsrunder — men vær oppmerksom på at tall, prosentandeler og datoer kan bli vage.

Behold transaksjonsfakta ordrett

Løsningen på vage sammendrag er å hente harde fakta — ordre-ID-er, beløp, datoer og bekreftede identiteter — inn i en separat «case facts»-blokk som beholdes ordrett, utenfor sammendraget. Oppsummer samtalen, aldri tallene.

Vær også oppmerksom på lost-in-the-middle: Modeller følger mest med på begynnelsen og slutten av konteksten. Plasser de viktigste faktaene og den gjeldende instruksjonen der de blir sett, ikke begrav dem midt i en lang historikk.

messages = [
    {"role": "user", "content":
        "CASE FACTS (verbatim):\n"
        "- Order #A-4471, total $129.00, placed 2026-03-02\n"
        "- Customer verified: ID CUST-8830\n\n"
        "CONVERSATION SUMMARY:\n"
        "Customer reported a late delivery and requested options."
    },
    {"role": "user", "content": "Now: can you process a partial refund?"},
]

Økter kan gjenopptas — verktøyresultater kan være foreldede

Claude Code lagrer historikk på tvers av økter: --resume <name> fortsetter en navngitt økt, og fork_session oppretter en gren fra et felles punkt. Praktisk — men en viktig advarsel å huske til eksamen.

Verktøyresultater fra gjenopptatte økter kan være foreldede hvis kodebasen er endret siden de ble hentet. Det er ikke alltid riktig å føre gammel historikk videre; noen ganger er en ny økt med et rent, strukturert sammendrag bedre enn å spille av utdatert kontekst på nytt.

# Continue a prior named session (history reloaded)
claude --resume refactor-auth

# Branch from a shared point without polluting the original
# fork_session -> new line of exploration from the same base

Hurtigsjekk: Den glemsomme underagenten

Et scenario som tester leksjonens viktigste beslutning.

Oppsummering: Hele historikken er nødvendig

Husk dette til eksamen og til virkelige systemer:

  • Modellen er tilstandsløs; hver forespørsel må inneholde hele den fullstendige messages-historikken.
  • Verktøykall utvider historikken — legg til hvert tool_result og send alt på nytt.
  • Den agentiske løkken samler historikk; stopp basert på stop_reason, ikke analysert tekst.
  • Underagenter arver ikke koordinatorens historikk — send all kontekst eksplisitt i hver prompt.
  • Historikken vokser: forkort omfattende verktøyresultater og oppsummer eldre meldingsrunder, men behold transaksjonsfakta ordrett og vær oppmerksom på lost-in-the-middle.
  • Gjenopptatte økter kan inneholde foreldede verktøyresultater — noen ganger er en ny økt med et rent sammendrag bedre.
Gratis å komme i gang

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 «Hele historikken er nødvendig» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Claude Architect, inkludert «Hele historikken er nødvendig», 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 «Hele historikken er nødvendig»?

Hver forespørsel inneholder hele samtalen. 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 1 av 4.

Hvor lang tid tar leksjonen «Hele historikken er nødvendig»?

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

  1. Hele historikken er nødvendig
  2. Risikoer ved progressiv oppsummering
  3. Effekten «lost in the middle»
  4. Blokker med saksfakta og trimming av utdata
← Tilbake til Claude Architect