Verktøy er når modellen får hender

Det en språkmodell sender fra seg, er tekst. Alt annet den gjør, som å sjekke været eller åpne en fil, skjer fordi den kan be om å få noe kjørt.

Magnus Gribbestad Oppdatert oktober 2026 5 min
Figur · et verktøykall
Et verktøykall i fem trinn Du stiller et spørsmål om været. Modellen ber om et verktøy. Appen rundt modellen kjører verktøyet og gir resultatet tilbake, og modellen svarer deg med tallene. DU MODELLEN VERKTØYET Hva blir været i Ålesund i morgen? BER OM VERKTØY vær("Ålesund") APPEN KJØRER DET kjører 7 °C, regn Regn og 7 grader. Ta med jakke.
  1. Du spør om noe modellen ikke kan vite alene: været i morgen.
  2. Modellen skriver ikke svaret ennå. Den skriver en forespørsel: hvilket verktøy, og med hvilke opplysninger.
  3. Det er appen rundt modellen, ikke modellen selv, som kjører verktøyet.
  4. Resultatet legges inn i samtalen. Nå har modellen det den manglet.
  5. Modellen formulerer svaret til deg, med tallene fra verktøyet.
Kort sagt

Et verktøy er en funksjon språkmodellen kan be om å få kjørt, som å søke, regne eller hente data. Modellen ber om det. Det er appen rundt som gjør det.

Det modellen sender til appen, er tekst. At den likevel kan sjekke været, lese en fil eller regne riktig, skyldes at noen har gitt den verktøy å be om.

Hvem gjør hva

Når modellen trenger noe den ikke har, skriver den en strukturert forespørsel: navnet på verktøyet og opplysningene det trenger. Appen leser forespørselen, kjører verktøyet og gir resultatet tilbake som tekst. Modellen leser det og skriver svaret.

Modellen kjører ingenting selv. Det er viktigere enn det høres ut, for det betyr at noen bestemmer hvilke verktøy som finnes og hva de får lov til.

Hvorfor det endrer alt

Uten verktøy gjetter modellen fra det den har lært. Med verktøy kan den slå opp, regne og handle. Søk gir den ferske opplysninger. En kalkulator gir den riktig regning, også på store tall der den ellers kan gjøre feil. Tilgang til filer, kalender eller et regnskapssystem gir den dine egne data. Verktøy er det som gjør en agent mulig. Det som gjør den til en agent, er løkka: at modellen selv velger neste steg.

Et bilde, ikke en fasit

Tenk på en rådgiver bak en glassvegg. Hun kan snakke og skrive lapper, men ikke selv rekke etter mappene. Hun skriver «hent kundemappe 4711», en assistent henter den, og hun svarer ut fra innholdet.

Hvem bestemmer

Hvilke verktøy som er tilgjengelige, og hva de får gjøre, bestemmes av appen og av deg. Mange verktøy ber om godkjenning hver gang. Regelen «lese er trygt, skrive er farlig» er ikke hele sannheten, for å lese kan også være veien inn for angrep. Bedre er tre nivåer:

Greit alene

  • Lese fra egne, kontrollerte kilder
  • Regne og sammenligne

Med varsomhet

  • Lese åpne nettsider og innkommende e-post
  • Særlig når modellen også kan sende eller åpne lenker

La den spørre først

  • Sende e-post eller meldinger
  • Slette eller overskrive
  • Betale eller bestille

Det som kan gå galt

Modellen kan velge feil verktøy, fylle inn feil opplysninger eller misforstå resultatet. Det siste er verst når resultatet kommer fra et sted du ikke kontrollerer. Alt et verktøy gir tilbake, er tekst modellen leser, og står det en instruks i teksten, kan modellen følge den. Det kalles prompt injection. Derfor bør verktøy som leser fra åpne nettsider eller innkommende e-post behandles med mer varsomhet enn de som leser fra egne systemer. Ingen har en fullstendig løsning på dette i dag, og OWASP har det øverst på listen over risikoer for språkmodell-applikasjoner.

Skal flere apper kunne bruke de samme verktøyene, trenger de en felles standard. Den heter MCP.

For deg som bygger

Under er hele mekanismen med Anthropics Python-SDK: én verktøydefinisjon og løkka som kjører det modellen ber om. Funksjonen vaer er falsk, så du kan bytte den ut med et ekte oppslag. Den heter «vaer» og ikke «vær» fordi verktøynavn i API-et bare kan bestå av a–z, tall, understrek og bindestrek. Figuren over skriver «vær» for å være lesbar. Installer med pip install anthropic og sett nøkkelen i miljøvariabelen ANTHROPIC_API_KEY.

Python · verktøykall
# pip install anthropic     (leser nøkkelen fra miljøvariabelen ANTHROPIC_API_KEY)
import anthropic

client = anthropic.Anthropic()
MODELL = "claude-opus-5-5"   # sjekket 8. oktober 2026. Til et værkall holder en billigere modell, se under.


def vaer(by: str) -> str:
    # Falsk funksjon. Bytt ut med et ekte oppslag mot en værtjeneste.
    return {"Ålesund": "7 °C, regn"}.get(by, f"Ukjent sted: {by}")


FUNKSJONER = {"vaer": vaer}

VERKTOY = [{
    "name": "vaer",   # uten æ: verktøynavn kan bare ha a-z, A-Z, tall, understrek og bindestrek
    "description": "Gir værmeldingen for i morgen i en norsk by. Bruk den når brukeren spør om vær.",
    "input_schema": {
        "type": "object",
        "properties": {"by": {"type": "string", "description": "Navnet på byen, for eksempel Ålesund"}},
        "required": ["by"],
    },
}]

meldinger = [{"role": "user", "content": "Hva blir været i Ålesund i morgen?"}]

while True:
    svar = client.messages.create(
        model=MODELL, max_tokens=16000, tools=VERKTOY, messages=meldinger,   # tenkingen teller med i max_tokens
    )
    if svar.stop_reason != "tool_use":
        break
    meldinger.append({"role": "assistant", "content": svar.content})   # hele svaret, ikke bare teksten
    resultater = []
    for blokk in svar.content:
        if blokk.type == "tool_use":                  # modellen ber om et verktøy
            ut = FUNKSJONER[blokk.name](**blokk.input)   # det er VI som kjører det
            resultater.append({"type": "tool_result", "tool_use_id": blokk.id, "content": ut})
    meldinger.append({"role": "user", "content": resultater})

print("".join(b.text for b in svar.content if b.type == "text"))   # tom hvis modellen stoppet uten tekst

Tre ting å se etter. Vil modellen ha noe kjørt, er stop_reason lik tool_use, og svaret har en tool_use-blokk med verktøynavn og opplysninger. Du kjører funksjonen selv og sender resultatet tilbake som tool_result med samme tool_use_id. Og du legger hele svar.content tilbake i samtalen, ikke bare teksten. description er det modellen går ut fra når den velger verktøy, så skriv den som om du forklarer verktøyet til en kollega.

Modell-ID-en claude-opus-5-5 er lest i Anthropics dokumentasjon 8. oktober 2026, og ID-er eldes. For et værkall er Opus mer enn nok og dyrere enn det trenger å være, så bytt gjerne til claude-sonnet-5-5 eller claude-haiku-5-5 (begge i modelloversikten samme dag). max_tokens er satt høyt fordi Claude Opus 5.5 tenker som standard, og tenkingen teller med. Sjekk modelloversikten før du kopierer, og les mer om verktøy i dokumentasjonen. Vil du se løkka med tak på steg og budsjett, finner du den under agent.

Ikke kjørt mot API-et her. Test med din egen nøkkel. Koden er syntakssjekket med python -m py_compile, og løkka er kjørt mot en stand-in for SDK-en som svarer med ett verktøykall og deretter tekst: to kall, og resultatet kom tilbake med riktig tool_use_id. Kjørt på nytt med koden slik den står nå, 8. oktober 2026. Bruken er sjekket mot Anthropics dokumentasjon 8. oktober 2026.

Oppdatert oktober 2026. Leverandørene kaller det ulike ting, som tool use, function calling og verktøykall, men prinsippet er det samme. Om faren for at tekst i et verktøyresultat inneholder instruksjoner, se OWASP, «LLM01:2025 Prompt Injection».