EUniversitetLaboration· ca 60 min· sandlåda på servern
Labb: en agentloop med verktyg, budget och spår
Bygga en ReAct-loop (tänk → agera → observera) med två verktyg, ett budgettak och ett spår som går att läsa i efterhand — mot en deterministisk policy i stället för en LLM.
Teori
Agenten väljer varje steg ett verktyg och argument utifrån uppgiften och observationerna hittills, tills den svarar eller budgeten tar slut. Utan stoppvillkor springer den iväg.
Deluppgifter
- verktyg —
calculator(expr)(bara siffror och + - * / parenteser, annars fel) ochlookup(key)mot en liten faktabas. - policy —
policy(task, trace)→ ('calculator', expr) | ('lookup', key) | ('answer', text) — regelbaserad. - run_agent —
run_agent(task, budget)kör loopen, loggar varje steg i trace, stoppar vid answer eller budget → {answer, steps, trace, stopped_by}.
Godkänt när: success >= 0.8
Startkoden
körs i en isolerad sandlåda på servernimport re
FACTS = {"sveriges huvudstad": "Stockholm", "antal planeter": "8", "pi": "3.14159", "ljusets hastighet km/s": "299792"}
def calculator(expr):
# TODO: tillåt bara [0-9 +-*/(). ]; annars raise ValueError; returnera str(resultat)
...
def lookup(key):
# TODO: FACTS.get(key.lower().strip(), "okänt")
...
def policy(task, trace):
"""Regelbaserad 'LLM': bestämmer nästa handling utifrån uppgiften och tidigare observationer."""
# TODO:
# - om senaste observationen finns och uppgiften är ett rent räkneuttryck → ('answer', obs)
# - om uppgiften innehåller 'räkna' eller ett uttryck med siffror och operator → ('calculator', uttryck)
# - om uppgiften börjar med 'vad är' och matchar en nyckel i FACTS → ('lookup', nyckel), sedan ('answer', obs)
# - annars ('answer', 'vet inte')
...
def run_agent(task, budget=4):
trace = []
# TODO: loop max budget varv: action = policy(task, trace); utför; logga {"action", "arg", "observation"}; answer → return
...
Du skriver koden, tester du inte ser avgör om den håller. Skapa ett gratis konto för att köra labben.
Prova diagnosenSkapa konto gratisFörväntade resultat
≥ 80 % av uppgifterna löses inom 4 steg; en olöslig uppgift stoppas av budgeten med stopped_by='budget'.
Vanliga fel
eval()på fritt uttryck — validera tecknen först.- Loopen saknar budgetkontroll.
- Spåret loggar inte observationen.