F· AI engineeringagenter-verktyg· ca 90 min· volatil — kontrolleras ofta· verifierad 2026-09-20
Planering och nedbrytning i delmål
Kunna låta en agent planera, följa upp och omplanera.
Förkunskaper
Intuition
En agent utan plan tar ett steg i taget och kan gå i cirklar. En agent med plan bryter ner målet i delmål först, och håller sedan reda på vilka som är klara.
Planen ska vara data, inte prosa — då kan din kod validera den, visa den för användaren och avbryta om den ser fel ut:
{"steg": [
{"id": 1, "mal": "hämta orderdata", "verktyg": "sok_order", "beroenden": []},
{"id": 2, "mal": "kontrollera leveransstatus", "verktyg": "sok_leverans", "beroenden": [1]},
{"id": 3, "mal": "skriv svar till kund", "verktyg": null, "beroenden": [1, 2]}
]}
Omplanering sker när ett steg misslyckas eller ger oväntat resultat — men med ett tak, annars planerar agenten om i evighet.
Kod
from dataclasses import dataclass, field
@dataclass
class Steg:
id: int
mal: str
verktyg: str | None
beroenden: list[int] = field(default_factory=list)
status: str = "väntar" # väntar|klar|misslyckades
resultat: str | None = None
def validera_plan(steg: list[Steg], tillatna: set[str], max_steg: int = 10) -> None:
if not 1 <= len(steg) <= max_steg:
raise ValueError(f"planen har {len(steg)} steg (tillåtet 1–{max_steg})")
ids = {s.id for s in steg}
for s in steg:
if s.verktyg and s.verktyg not in tillatna:
raise ValueError(f"okänt verktyg: {s.verktyg}")
if any(b not in ids or b >= s.id for b in s.beroenden):
raise ValueError(f"steg {s.id} har ogiltigt beroende") # fångar även cykler
def kor_plan(steg, utfor, llm, max_omplaneringar=2):
omplaneringar = 0
while (nasta := next((s for s in steg if s.status == "väntar"
and all(any(x.id == b and x.status == "klar" for x in steg) for b in s.beroenden)), None)):
nasta.resultat = utfor(nasta)
nasta.status = "klar" if nasta.resultat is not None else "misslyckades"
if nasta.status == "misslyckades":
if omplaneringar >= max_omplaneringar:
return {"status": "gav_upp", "steg": steg}
steg = llm.omplanera(steg, misslyckat=nasta)
omplaneringar += 1
return {"status": "klar" if all(s.status == "klar" for s in steg) else "delvis", "steg": steg}
Valideringen är inte formalia: den fångar hallucinerade verktygsnamn och cirkulära beroenden innan något körs.
Behärskning innebär
- Låter en agent producera en granskbar plan
- Följer upp och omplanerar vid avvikelse
- Sätter stoppvillkor för omplanering
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)
- arXiv — Reflexion: Language Agents with Verbal Reinforcement Learning — arXiv (öppen åtkomst; licens per artikel)