F· AI engineeringminnessystem· ca 90 min· volatil — kontrolleras ofta· verifierad 2026-09-20
Semantiskt minne och konsolidering
Kunna destillera episoder till fakta, hantera motsägelser och glömska, och koppla minnet till agentens beslut.
Förkunskaper
Intuition
Episoder är händelser. Semantiskt minne är det agenten vet om användaren efter att ha sett många händelser: «föredrar kodexempel före formler», «kan linjär algebra», «mål: LoRA-finjustering till december». Det byggs genom konsolidering: periodiskt läser modellen nya episoder och uppdaterar en faktalista.
Varje faktum bär: källa (vilka episoder), konfidens, tidpunkt, giltighet (permanent / tills vidare / utgår). Det gör tre saker möjliga:
- Motsägelser: nytt faktum «vill ha formler» mot gammalt «föredrar kod» → det nya vinner om det är färskare och stöds av flera episoder; annars fråga användaren.
- Glömska: fakta utan stöd på länge sjunker i konfidens och tas bort — annars växer listan och blir fel.
- Beslut: agenten läser fakta före den väljer förklaringsdjup, svårighet, ton. Om fakta inte påverkar något beslut är minnet dekoration.
Mät: beslut med vs utan fakta; andel fakta som är korrekta vid mänsklig kontroll; andel motsägelser som löstes rätt.
Kod
import json, time
KONSOLIDERA = """Här är kända FAKTA om användaren (JSON-lista) och NYA EPISODER.
Uppdatera faktalistan: lägg till, höj/sänk konfidens, markera motsägelser. Varje faktum:
{"text": ..., "konfidens": 0-1, "kallor": [episod-id], "giltig_till": null|datum, "typ": "preferens|kunskap|mal"}
Svara ENDAST med den nya JSON-listan."""
def konsolidera(llm, fakta, episoder):
ut = llm(KONSOLIDERA + "\nFAKTA: " + json.dumps(fakta, ensure_ascii=False) + "\nNYA EPISODER: " + json.dumps(episoder, ensure_ascii=False), temperature=0, json_mode=True)
nya = json.loads(ut)
return glom(nya)
def glom(fakta, halveringstid_d=90, min_konf=0.3):
now = time.time(); ut = []
for f in fakta:
alder = (now - f.get("senast_stodd", now)) / 86400
f["konfidens"] *= 0.5 ** (alder / halveringstid_d)
if f["konfidens"] >= min_konf and not (f.get("giltig_till") and f["giltig_till"] < time.strftime("%Y-%m-%d")):
ut.append(f)
return ut
def till_beslut(fakta):
pref = [f["text"] for f in fakta if f["typ"] == "preferens" and f["konfidens"] > 0.6]
return {"forklaringsdjup": "code" if any("kod" in p for p in pref) else "intuition"}
Behärskning innebär
- Destillerar episoder till fakta med källa och giltighet
- Hanterar motsägelser och glömska
- Kopplar minnet till agentens beslut och mäter effekten
Logga in för att göra övningarna och bygga upp din behärskning.
Källor
- arXiv — MemGPT: Towards LLMs as Operating Systems — arXiv (öppen åtkomst; licens per artikel)
- arXiv — Generative Agents: Interactive Simulacra of Human Behavior — arXiv (öppen åtkomst; licens per artikel)