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
- arXiv — ReAct: Synergizing Reasoning and Acting in Language Models — arXiv (öppen åtkomst; licens per artikel)