Claude Architect · leksjon

tool_choice: auto / any / forced

La modellen velge et verktøy, tving frem et verktøy eller lås valget til ett navn.

Leksjon 2 av 413 trinn

tool_choice: auto / any / forced er en gratis leksjon i Claude Architect på CoddyKit. Dette er leksjon 2 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.

Hvem bestemmer: modellen eller De?

Når De gir Claude verktøy, er det ett spørsmål som former hele samhandlingen: Hvem bestemmer om et verktøy skal kjøres?

Feltet tool_choice i API-forespørselen Deres gir svaret. De kan la modellen bestemme, tvinge den til å kalle et verktøy eller låse den til ett bestemt verktøy etter navn.

Å velge riktig er grunnleggende for verktøyfordeling: Feil innstilling gir ordrik tekst når De trenger strukturerte data, eller et tvunget verktøykall når modellen egentlig bare burde ha svart.

De tre modusene

Det finnes tre verdier for tool_choice:

  • auto — modellen velger fritt: generer tekst eller kall et verktøy.
  • any — modellen må kalle et verktøy (selv om den velger hvilket), slik at omgangen returnerer et verktøykall, aldri fri tekst.
  • {"type":"tool","name":"X"} — tving frem ett bestemt verktøy med angitt navn.

Hver modus tilsvarer en annen hensikt: fleksibel resonnering, garantert strukturert output eller en fastlåst handling.

request = {
    "model": "claude-sonnet-4-5",
    "max_tokens": 1024,
    "tools": tools,
    "tool_choice": {"type": "auto"},  # or "any", or a named tool
    "messages": messages,
}

auto: La modellen velge

auto er standardinnstillingen for agentiske løkker. Modellen undersøker samtalen og avgjør selv om det trengs et verktøy, eller om et vanlig tekstsvar er tilstrekkelig.

Bruk den når veien videre ikke er fastlagt: for eksempel med en supportagent som enten kan svare direkte på et spørsmål eller først må slå opp en bestilling.

Med auto forteller stoppårsaken hva som skjedde: tool_use betyr at De skal kjøre verktøyet og fortsette løkken; end_turn betyr at modellen svarte med tekst og er ferdig.

resp = client.messages.create(
    model="claude-sonnet-4-5",
    max_tokens=1024,
    tools=tools,
    tool_choice={"type": "auto"},
    messages=messages,
)

if resp.stop_reason == "tool_use":
    # run the requested tool(s), append results, loop again
    ...
elif resp.stop_reason == "end_turn":
    # model replied with text; turn complete
    ...

any: Garanter et verktøykall

any tvinger modellen til å kalle et verktøy i hver omgang – den kan ikke svare med fri prosa. Den velger fortsatt hvilket verktøy, men et verktøykall er garantert.

Dette er det klassiske virkemiddelet for garantert strukturert output: Hvis det eneste verktøyet Deres er et skjemabasert record_result, betyr any at hvert svar returneres som validerte JSON-argumenter, aldri som et avsnitt som ikke kan analyseres.

classify_tool = {
    "name": "record_sentiment",
    "description": "Record the sentiment of a customer message.",
    "input_schema": {
        "type": "object",
        "properties": {
            "sentiment": {"type": "string",
                          "enum": ["positive", "neutral", "negative"]}
        },
        "required": ["sentiment"],
    },
}

resp = client.messages.create(
    model="claude-sonnet-4-5",
    max_tokens=512,
    tools=[classify_tool],
    tool_choice={"type": "any"},  # must call a tool -> structured output
    messages=messages,
)

Tvunget: Lås ett verktøy etter navn

Den mest spesifikke modusen tvinger frem nøyaktig ett verktøy: {"type":"tool","name":"X"}. Modellen kan ikke velge hvilket verktøy – bare hvordan argumentene skal fylles ut.

Bruk den når handlingen allerede er bestemt og De bare trenger at modellen trekker ut parameterne. Eksempel: De vet at denne omgangen må produsere en uttrekksregistrering, så De låser extract_invoice og lar Claude fylle ut feltene.

resp = client.messages.create(
    model="claude-sonnet-4-5",
    max_tokens=1024,
    tools=[extract_invoice_tool],
    tool_choice={"type": "tool", "name": "extract_invoice"},
    messages=[{"role": "user", "content": invoice_text}],
)

# resp.content[0] is a tool_use block with the extracted fields
fields = resp.content[0].input

any kontra tvunget: Den subtile forskjellen

Både any og tvunget modus garanterer et verktøykall. Forskjellen ligger i valget:

  • any — modellen velger fortsatt hvilket verktøy fra settet som skal brukes. Passer når flere verktøy er gyldige og De ønsker strukturert output, men fleksibel ruting.
  • tvunget {"type":"tool","name":"X"} — ingen rutingsbeslutning i det hele tatt; verktøy X kjøres.

Tommelfingerregel: Hvis De allerede har tatt beslutningen i koden, tvinger De verktøyet. Hvis modellen fortsatt skal avgjøre hvilken strukturert handling som passer, bruker De any.

Strukturert output er den store gevinsten

Ved å kombinere et JSON-Schema-verktøy med any eller et tvunget verktøy får arkitekter pålitelig strukturert output. Skjemaet eliminerer syntaksfeil og krever obligatoriske felt – uten sårbar regex på prosa.

Én skjemaregel er viktig her: Merk et felt som required bare hvis det alltid finnes. Krev aldri et felt som kan mangle – modellen vil finne på en verdi for å oppfylle skjemaet.

extract_invoice_tool = {
    "name": "extract_invoice",
    "description": "Extract structured fields from an invoice document.",
    "input_schema": {
        "type": "object",
        "properties": {
            "invoice_number": {"type": "string"},
            "total": {"type": "number"},
            "due_date": {"type": "string"},  # may be absent -> NOT required
        },
        # only fields that are ALWAYS present belong here
        "required": ["invoice_number", "total"],
    },
}

auto holder den agentiske løkken i gang

I en agent med flere trinn er auto vanligvis riktig, fordi løkken er modelldrevet. De sender hele historikken i hver omgang, leser stop_reason, kjører eventuelle forespurte verktøy, legger til resultatene og gjentar – til modellen genererer end_turn.

Hvis De tvang frem et verktøy i hver omgang, kunne modellen aldri signalisere at den var ferdig med tekst, og løkken Deres ville ikke hatt en naturlig stopp. Forbehold tvungen modus for enkeltstående, fastsatte handlinger.

while True:
    resp = client.messages.create(
        model="claude-sonnet-4-5",
        max_tokens=1024,
        tools=tools,
        tool_choice={"type": "auto"},
        messages=messages,
    )
    messages.append({"role": "assistant", "content": resp.content})
    if resp.stop_reason == "tool_use":
        results = run_tools(resp.content)
        messages.append({"role": "user", "content": results})
        continue
    break  # end_turn -> terminate on stop_reason, never on text

Ikke forveksle valg med håndheving

tool_choice styrer om et verktøy kalles – det håndhever ikke forretningsregler. Å tvinge frem process_refund garanterer ikke at refusjonen er tillatt.

Kritiske garantier (verifisert identitet, refusjon under den tillatte grensen) hører hjemme i deterministiske forhåndsbetingelser og hooks, som er 100 % pålitelige, ikke i tool_choice eller instruksjonstekst (~90 % sannsynlig).

Tenk på tool_choice som ruting, og hooks/forhåndsbetingelser som sikkerhetsrekkverk.

Beskrivelsen styrer fortsatt utvelgingen

Selv med auto eller any avhenger modellens valg av verktøy av verktøybeskrivelsene, ikke navnene. En god beskrivelse angir formål, returverdier, inndataformater med eksempler, spesialtilfeller og grenser for når verktøyet kan brukes.

Overlappende eller vage beskrivelser fører til feilruting som ingen verdi for tool_choice kan rette opp. Begrens hvert agent til omtrent 4–5 verktøy med tydelig avgrensede bruksområder; 18 eller flere svekker påliteligheten i valget.

tool_choice angir policyen; beskrivelsene gjør rutingen presis.

En praktisk beslutningsveiledning

Velg etter hensikt:

  • auto — åpne agentrunder; modellen kan svare med tekst eller utføre handlinger. Standardvalget for den agentiske løkken.
  • any — det kreves strukturert output, men flere verktøy kan være aktuelle; modellen ruter mellom dem.
  • forced (name) — handlingen er allerede bestemt; De trenger bare å hente ut argumentene (klassifisering, uttrekking i ett trinn).

Hvis De har tatt beslutningen i koden, bør De tvinge valget. Hvis modellen skal vurdere om den skal handle, og hvilket verktøy som skal brukes, bør De bruke auto eller any.

# Single-shot classification: decision already made -> force it
resp = client.messages.create(
    model="claude-sonnet-4-5",
    max_tokens=256,
    tools=[record_sentiment_tool],
    tool_choice={"type": "tool", "name": "record_sentiment"},
    messages=[{"role": "user", "content": review_text}],
)
sentiment = resp.content[0].input["sentiment"]

Hurtigsjekk

Velg den beste tool_choice-verdien for scenarioet nedenfor.

Oppsummering: Velg, garanter eller lås

Viktigste punkter:

  • auto — modellen velger tekst eller et verktøy; standardvalget for modellstyrte agentiske løkker som må kunne signalisere end_turn.
  • any — må kalle et eller annet verktøy; dette gir garantert strukturert output med fleksibel ruting.
  • {"type":"tool","name":"X"} — låser til ett verktøy; bruk dette når handlingen er bestemt, og De bare trenger å hente ut argumentene.
  • tool_choice gjelder ruting, ikke håndheving — legg kritiske garantier i hooks/forutsetninger.
  • Et presist valg avhenger fortsatt av gode verktøybeskrivelser og 4–5 avgrensede verktøy per agent.
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 «tool_choice: auto / any / forced» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Claude Architect, inkludert «tool_choice: auto / any / forced», 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 «tool_choice: auto / any / forced»?

La modellen velge et verktøy, tving frem et verktøy eller lås valget til ett navn. 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 2 av 4.

Hvor lang tid tar leksjonen «tool_choice: auto / any / forced»?

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. Hvor mange verktøy per agent
  2. tool_choice: auto / any / forced
  3. Innebygde verktøy i Claude Code
  4. Mønster for trinnvis undersøkelse
← Tilbake til Claude Architect