Claude Architect · Lektion

Anatomin hos en API-begäran

model, max_tokens, system, messages, tools, tool_choice.

Lektion 2 av 413 steg

Anatomin hos en API-begäran är en gratis lektion i Claude Architect på CoddyKit. Detta är lektion 2 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.

Den enda slutpunkten

Varje anrop till Claude är ett anrop till Messages API. Som arkitekt behöver ni inte memorera syntax — ni behöver förstå sex fält som formar hela interaktionen: model, max_tokens, system, messages, tools och tool_choice.

När dessa blir rätt faller allt som kommer därefter — agenter, verktygsslingor och strukturerad output — på plats. Den här lektionen går igenom varje fält och det beslut som det representerar.

from anthropic import Anthropic

client = Anthropic()
response = client.messages.create(
    model="claude-opus-4-8",
    max_tokens=1024,
    system="You are a concise assistant.",
    messages=[{"role": "user", "content": "Hello!"}],
)
print(response.content[0].text)

model — Vilken hjärna

Fältet model väljer vilken Claude som utför arbetet. Det är en enda sträng, och valet innebär en verklig arkitektonisk avvägning mellan kapacitet, svarstid och kostnad.

  • Opus — mest kapabel, bäst för agentbaserat arbete med lång tidshorisont och avancerad problemlösning.
  • Sonnet — en stark balans mellan snabbhet och intelligens.
  • Haiku — snabbast och billigast för enkla uppgifter i stor volym.

Ni kan byta modell per anrop, så dirigera enkla uppgifter till en billigare modell och svåra uppgifter till en starkare.

# Same request shape, different routing decision
response = client.messages.create(
    model="claude-opus-4-8",  # swap to a cheaper model for simple tasks
    max_tokens=1024,
    messages=[{"role": "user", "content": "Summarize this ticket."}],
)

max_tokens — Output-taket

max_tokens är en hård gräns för hur många tokens Claude får generera i detta svar. Modellen får inte veta detta tal — det är ett tvingande tak, inte en instruktion.

Om genereringen når taket avbryts svaret och stop_reason returneras som "max_tokens". Det innebär att svaret är avhugget, inte komplett. Sätt värdet tillräckligt högt för att uppgiften ska slutföras. Strömma mycket långa svar så att anropen inte överskrider tidsgränsen.

response = client.messages.create(
    model="claude-opus-4-8",
    max_tokens=4096,  # generous ceiling so the answer isn't cut off
    messages=[{"role": "user", "content": "Write a detailed migration plan."}],
)
if response.stop_reason == "max_tokens":
    print("Truncated — raise max_tokens or stream.")

system — Roll och regler

Systemprompten system anger Claudes roll, ton och bestående regler — instruktioner som gäller för hela konversationen i stället för en enskild användartur.

Placera varaktigt beteende här: "Ni är en supportagent. Verifiera kundens identitet innan ni utför någon kontoåtgärd." Håll den stabil mellan anrop — en oföränderlig systemprompt cachas dessutom effektivt, vilket minskar kostnad och svarstid vid upprepade anrop.

SYSTEM = (
    "You are a customer-support agent for an online store. "
    "Always verify the customer's identity before discussing an order. "
    "Be warm, concise, and never invent order details."
)

response = client.messages.create(
    model="claude-opus-4-8",
    max_tokens=1024,
    system=SYSTEM,
    messages=[{"role": "user", "content": "Where is my order?"}],
)

messages — Hela historiken

Det här är det fält som arkitekter oftast gör fel med. Messages API är tillståndslöst: modellen behåller INGET minne mellan anrop. Vid varje tur skickar ni hela konversationshistoriken igen — varje tidigare tur från användaren och assistenten samt eventuella verktygsresultat.

Om ni bara skickar det senaste användarmeddelandet får Claude minnesförlust. Konversationens tillstånd finns i er applikation; ni spelar upp det vid varje anrop. Meddelanden växlar mellan roller och det första meddelandet måste vara user.

messages = [
    {"role": "user", "content": "My name is Alice."},
    {"role": "assistant", "content": "Hi Alice!"},
    {"role": "user", "content": "What's my name?"},  # only works because history is resent
]
response = client.messages.create(
    model="claude-opus-4-8", max_tokens=256, messages=messages,
)

tools — Ge Claude händer

Fältet tools är en lista över åtgärder som Claude får anropa — varje åtgärd har ett name, ett input_schema (JSON Schema) och framför allt en description.

description är det primära sättet för Claude att avgöra vilket verktyg som ska användas — inte namnet. En bra beskrivning anger verktygets syfte, returvärden, indatasformat med exempel och när det INTE ska användas. Otydliga eller överlappande beskrivningar leder till felroutning. Håll uppsättningen liten: cirka 4–5 verktyg per agent är optimalt; fler än 18 försämrar tillförlitligheten i valet.

tools = [{
    "name": "get_customer",
    "description": (
        "Look up a customer by verified email or account ID. "
        "Returns name, tier, and a verified customer_id. "
        "Call this FIRST before any account action; do not guess IDs."
    ),
    "input_schema": {
        "type": "object",
        "properties": {"email": {"type": "string"}},
        "required": ["email"],
    },
}]

tool_choice — Vem bestämmer

tool_choice styr om och hur Claude anropar ett verktyg:

  • {"type": "auto"} — Claude avgör om den ska svara med text eller anropa ett verktyg (standard).
  • {"type": "any"} — Claude MÅSTE anropa något verktyg. Så garanterar ni strukturerad output.
  • {"type": "tool", "name": "X"} — tvinga fram ett specifikt verktyg.

Använd any eller ett tvingat verktyg när ni behöver ett maskinläsbart resultat varje gång. Använd auto i öppna konversationer där ett vanligt svar ibland är korrekt.

response = client.messages.create(
    model="claude-opus-4-8",
    max_tokens=1024,
    tools=tools,
    tool_choice={"type": "any"},  # force SOME tool -> structured result guaranteed
    messages=[{"role": "user", "content": "Find the customer alice@shop.com"}],
)

stop_reason — Tolka resultatet

Varje svar innehåller ett stop_reason som anger vad ni ska göra härnäst. Arkitekter förgrenar logiken utifrån det — de tolkar aldrig texten för att leta efter ord som "klar".

  • "end_turn" — Claude avslutade naturligt; turen är klar.
  • "tool_use" — Claude vill köra ett verktyg; kör det, lägg till resultatet och fortsätt.
  • "max_tokens" — outputen avkortades av taket.
  • "stop_sequence" — en konfigurerad stoppsträng påträffades.

Detta enda fält är styrsignalen för hela den agentbaserade loopen.

response = client.messages.create(
    model="claude-opus-4-8", max_tokens=1024,
    tools=tools, messages=messages,
)

if response.stop_reason == "tool_use":
    pass   # run the tool, append result, call again
elif response.stop_reason == "end_turn":
    pass   # complete
elif response.stop_reason == "max_tokens":
    pass   # truncated -> raise max_tokens

Den agentbaserade loopen

Verktyg, messages och stop_reason bildar det centrala mönstret: skicka begäran → inspektera stop_reason → om tool_use, kör verktygen och lägg till resultaten i historiken → upprepa tills end_turn.

Eftersom API:et är tillståndslöst lägger Ni tillbaka assistentens verktygsbegäran OCH verktygsresultatet i messages innan nästa anrop. Avslut styrs av stop_reason — besluten fattas av modellen. En eventuell gräns för antalet iterationer är ett säkerhetsnät, aldrig den primära mekanismen för att avsluta.

while True:
    resp = client.messages.create(
        model="claude-opus-4-8", max_tokens=1024,
        tools=tools, messages=messages,
    )
    messages.append({"role": "assistant", "content": resp.content})
    if resp.stop_reason != "tool_use":
        break  # terminate on stop_reason, NOT on text
    results = run_tools(resp.content)          # execute each tool_use block
    messages.append({"role": "user", "content": results})

Varför tillståndslöshet är viktigt

Tillståndslöshet är inte en begränsning som måste kringgås — det är designen som gör Claude förutsägbar och skalbar. Eftersom modellen inte har något dolt tillstånd är begäran hela sanningen: samma sex fält tillsammans med samma historik ger samma beteende.

Därför är kontexthantering en egen disciplin. När historiken växer trimmar Ni utförliga verktygsresultat till relevanta fält, sammanfattar gamla turer och behåller kritiska transaktionsuppgifter (ID:n, belopp, datum) ordagrant i ett särskilt block — eftersom modellen bara känner till det Ni lägger tillbaka i messages.

Sätt ihop helheten

En produktionsbegäran består sällan bara av en modell och en prompt. En tur med en supportagent kombinerar alla sex fält: ett dirigerat model, ett säkert max_tokens, ett regelstyrande system, hela historiken i messages, en avgränsad uppsättning tools och ett tool_choice som passar uppgiften.

Läs av dessa sex fält från valfri begäran, så kan Ni exakt förutsäga hur den kommer att bete sig — det är arkitektens perspektiv.

response = client.messages.create(
    model="claude-opus-4-8",                 # routed by task difficulty
    max_tokens=2048,                          # room to finish
    system="You are a support agent. Verify identity first.",
    messages=conversation_history,            # full replay, stateless
    tools=support_tools,                      # 4-5 well-described tools
    tool_choice={"type": "auto"},             # text or tool, model decides
)

Snabbtest

Testa Er förståelse av hur fälten i en begäran styr beteendet.

Viktiga lärdomar

Ni har nu arkitektens mentala modell av en Claude-begäran:

  • model — förmåga kontra kostnad kontra fördröjning; dirigera per uppgift.
  • max_tokens — fastställd gräns för utdatas längd; stop_reason: "max_tokens" betyder att svaret har kapats.
  • system — beständig persona och regler; håll det stabilt.
  • messages — HELA historiken, skickad på nytt vid varje tur, eftersom modellen inte har något tillstånd.
  • tools — beskrivningarna styr valet; begränsa Er till cirka 4–5 väl avgränsade verktyg.
  • tool_choice — auto / any / tvingat; använd any för att garantera strukturerad utdata.

Och loopen som knyter ihop dem: styr den med stop_reason (end_turn kontra tool_use), aldrig genom att tolka text. Behärskar Ni detta bygger resten av certifieringen på en stabil grund.

Gratis att börja

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 ”Anatomin hos en API-begäran” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Claude Architect, inklusive ”Anatomin hos en API-begäran”, 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 ”Anatomin hos en API-begäran”?

model, max_tokens, system, messages, tools, tool_choice. 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 2 av 4.

Hur lång tid tar lektionen ”Anatomin hos en API-begäran”?

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

  1. Claude-modellfamiljen
  2. Anatomin hos en API-begäran
  3. Förklaringar av stoporsaker
  4. Tokens, kontextfönster och kostnad
← Tillbaka till Claude Architect