Hoppa till innehållet
AI-grafen
E· Universitetagenter-verktyg· ca 60 min· utvecklande· verifierad 2026-09-20

ReAct-loopen: tänk, agera, observera

Kunna implementera en ReAct-agent och läsa dess spår.

Förkunskaper

Intuition

ReAct = Reasoning + Acting. Modellen växlar mellan att tänka och att handla, i ett spår som går att läsa:

Tanke:      Jag behöver veta hur många ärenden som är öppna.
Handling:   sok_arenden(status="öppen")
Observation: 47 ärenden
Tanke:      Nu behöver jag hur många av dem som är äldre än en vecka.
Handling:   sok_arenden(status="öppen", aldre_an_dagar=7)
Observation: 12 ärenden
Tanke:      Jag har vad jag behöver.
Svar:       12 av 47 öppna ärenden är äldre än en vecka.

Poängen med de explicita tankarna är inte magi — det är läsbarhet och felsökning. När agenten gör fel ser du exakt vid vilket steg resonemanget spårade ur.

Kod

SYSTEM = """Du löser uppgifter stegvis. Svara i exakt detta format:
Tanke: <ditt resonemang>
Handling: <verktyg>(<argument>)
… eller när du är klar:
Tanke: <resonemang>
Svar: <slutsvar>
Använd bara dessa verktyg: {verktyg}"""

import re

def react(mal, llm, verktyg, max_steg=8):
    spar, msgs = [], [{"role": "system", "content": SYSTEM.format(verktyg=verktyg.beskrivningar())},
                      {"role": "user", "content": mal}]
    for steg in range(max_steg):
        ut = llm(msgs, stop=["Observation:"], temperature=0)
        spar.append(ut)
        if "Svar:" in ut:
            return {"status": "klar", "svar": ut.split("Svar:", 1)[1].strip(), "spar": spar}
        m = re.search(r"Handling:\s*(\w+)\((.*?)\)\s*$", ut, re.S | re.M)
        if not m:
            obs = "Fel: kunde inte tolka handlingen. Använd formatet Handling: verktyg(argument)."
        else:
            obs = verktyg.kor(m.group(1), m.group(2))
        spar.append(f"Observation: {obs}")
        msgs.append({"role": "assistant", "content": ut})
        msgs.append({"role": "user", "content": f"Observation: {obs}"})
    return {"status": "budget_slut", "svar": None, "spar": spar}

Tre saker som får loopen att fungera i praktiken: stop-sekvensen så att modellen inte hittar på sina egna observationer, felmeddelanden tillbaka som observationer (modellen kan rätta sig), och ett hårt tak på antal steg.

Behärskning innebär

  • Implementerar en ReAct-loop
  • Läser och felsöker ett agentspår
  • Sätter stoppvillkor

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

Källor

Alla källor och licenser