Hoppa till innehållet
AI-grafen
E· Universitetagenter-verktyg· ca 60 min· volatil — kontrolleras ofta· verifierad 2026-09-20

Agenter — planera, agera, observera

Kunna bygga en enkel agentloop, begränsa den med budget och stoppvillkor, och logga varje steg.

Förkunskaper

Intuition

En agent är en språkmodell i en loop: den får ett mål, väljer ett verktyg, ser resultatet, väljer nästa — tills den anser sig klar. Skillnaden mot ett enkelt verktygsanrop är att modellen bestämmer hur många steg och vilka.

Det som gör agenter användbara är också det som gör dem farliga: de kan gå i cirklar, bränna budget, eller göra något oåterkalleligt. Därför är loopen aldrig bara while True:

  • Budget: max steg (t.ex. 10), max tokens, max sekunder.
  • Stoppvillkor: modellen signalerar «klar» eller budgeten tar slut → returnera bästa hittills med markering «ofullständigt».
  • Skyddsräcken: verktyg med sidoeffekter kräver bekräftelse; upprepade identiska anrop bryts.
  • Logg: varje steg (tanke, anrop, resultat, kostnad) sparas. Utan logg kan ingen felsöka eller lita på resultatet.

Kod

import time, json

def agent(mal, llm, verktyg, max_steg=10, max_sek=60):
    msgs = [{"role": "system", "content": "Lös uppgiften med verktygen. När du är klar: svara med FINAL: <svar>."},
            {"role": "user", "content": mal}]
    logg, t0, senaste = [], time.time(), None
    for steg in range(max_steg):
        if time.time() - t0 > max_sek:
            return {"status": "timeout", "svar": None, "logg": logg}
        ut = llm(msgs, tools=verktyg.spec())
        if ut.text and ut.text.startswith("FINAL:"):
            return {"status": "klar", "svar": ut.text[6:].strip(), "logg": logg}
        for call in ut.tool_calls:
            nyckel = (call.name, call.arguments)
            if nyckel == senaste:
                res = {"error": "samma anrop som förra steget — ändra strategi"}
            else:
                res = verktyg.kor(call)
            senaste = nyckel
            logg.append({"steg": steg, "verktyg": call.name, "args": call.arguments, "resultat": str(res)[:300]})
            msgs += [ut.as_message(), {"role": "tool", "tool_call_id": call.id, "content": json.dumps(res)}]
    return {"status": "budget_slut", "svar": None, "logg": logg}

Mönstret kallas ofta ReAct (reason + act). Utvärdera agenter på uppgiftsnivå (löste den målet?) och på kostnad per lyckad uppgift.

Behärskning innebär

  • Bygger en agentloop (planera → agera → observera) med stoppvillkor
  • Sätter budget för steg, tokens och tid
  • Loggar varje steg så att en körning kan granskas

Logga in för att göra övningarna och bygga upp din behärskning.

Källor

Alla källor och licenser