Hoppa till innehållet
AI-grafen
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

Alla källor och licenser