Projekt 5: Bygg ett minnessystem för en agent
Episodiskt minne (händelser med tid), semantiskt minne (konsoliderade fakta med källa och tidsstämpel), retrieval för en fråga, hantering av motsägelser, och en långtidsevaluering över scripted sessioner som visar att agenten blir bättre av minnet.
Teori
Episoder är rådata om vad som hände. Semantiska fakta destilleras ur episoder (nyckel → värde) och senaste källan vinner vid konflikt. Retrieval ger de mest relevanta episoderna + fakta. Långtidsevaluering: ställ frågor i session N om saker som sades i session < N.
Deluppgifter
- episodiskt minne —
Memory.remember(session, text)lagrar episod med löpnummer;Memory.recall(query, k)→ k mest relevanta episoder (BM25 eller ordöverlapp). - konsolidering —
Memory.consolidate()extraherar fakta 'X är Y' / 'jag gillar Y' / 'mitt namn är Y' →factsmed (värde, session, episod-id); nyare ersätter äldre. - svara med minne —
Memory.answer(question)→ sträng ur fakta eller bästa episod; 'vet inte' annars. - glömska + integritet —
Memory.forget(session)raderar episoder och fakta från en session (rätten att bli glömd).
Godkänt när: accuracy_with_memory >= 0.8
Startkoden
körs i en isolerad sandlåda på servernimport re
def toks(s):
return set(re.findall(r"[a-zåäö0-9]+", s.lower()))
class Memory:
def __init__(self):
self.episodes = [] # {"id", "session", "text"}
self.facts = {} # nyckel → {"value", "session", "episode"}
def remember(self, session, text):
# TODO: lägg till episod med id = löpnummer
...
def recall(self, query, k=3):
# TODO: rangordna episoder på ordöverlapp med query (toks), returnera k bästa (nyast först vid lika)
...
def consolidate(self):
# TODO: mönster: "mitt namn är X" → namn; "jag gillar X" → gillar; "min favoritfärg är X" → favoritfärg;
# "jag bor i X" → bor; senare episod ersätter tidigare
...
def answer(self, question):
# TODO: mappa frågor ("vad heter jag", "vad gillar jag", "vilken är min favoritfärg", "var bor jag") till fakta; annars bästa episod; annars "vet inte"
...
def forget(self, session):
# TODO: radera episoder och fakta från sessionen
...
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
Med minne ≥ 80 % rätt på frågor om tidigare sessioner; utan minne ≈ 0. Motsägelse (favoritfärg ändras) löses till senaste. forget(2) gör att session 2:s fakta försvinner.
Vanliga fel
- Konsolidering skriver över med äldre fakta (fel ordning).
- Retrieval returnerar episoder från raderade sessioner.
- 'vet inte' saknas → hittar på.