Skip to main content
AI in het Onderwijs19 min leestijd

Een tutor die onthoudt: een vakgeheugen dat het contextvenster overleeft

Een leerling praat maandenlang met één vak. Meer daarvan in de prompt stoppen schaalt niet en maakt de tutor niet eerlijker. Hoe we een geheugen bouwden dat het verleden op relevantie rangschikt, een conceptkaart van de leerstof, en beliefs over de leerling die hun eigen bewijs meedragen: twaalf diagrammen, echte voorbeelden, en wat het afspelen van echte geschiedenissen ons leerde.

iTutor Team18 september 2026

Een leerling praat maandenlang met één vak: duizenden berichten, tientallen bestanden, honderden kleine checks. Meer daarvan in de prompt stoppen schaalt niet en maakt de tutor niet eerlijker. Dit is hoe we elk vak een geheugen gaven dat het verleden op relevantie rangschikt, een conceptkaart van de leerstof, en beliefs over de leerling die hun eigen bewijs meedragen, en wat echte geschiedenissen ons leerden toen we ze afspeelden. Er worden bewust geen leveranciers genoemd; de methode is er niet van afhankelijk. Elk getal hier is gemeten, niet geschat.

Wat "onthouden" moet betekenen

Het naïeve antwoord op "de tutor vergeet" is een groter venster: houd meer van het gesprek in de prompt, vat de rest samen. Het faalt op drie afzonderlijke manieren, en elke is een productprobleem voordat het een technisch probleem is.

  • Tijd. Een leerling die in september vraagt naar iets dat in juli behandeld is, heeft de julisessie nodig, niet de laatste veertig berichten. Een samenvatting van "wat er tot nu toe gebeurd is" wordt vager naarmate hij groeit; precies het relevante detail is wat een samenvatting laat vallen.
  • Bestanden. Een vak bevat tientallen documenten. Retrieval haalt de acht passages op die het dichtst bij de vraag liggen, wat prima is voor feiten en nutteloos voor "hoe verhoudt dit hoofdstuk zich tot dat andere", de structuur van de leerstof staat nooit in één enkele passage.
  • Eerlijkheid. Een tutor die rapporteert "je begrijpt osmose" moet kunnen zeggen waarom: welke check, op welke dag, wat de leerling antwoordde. Een getal zonder bewijs is een gok met een komma.

Dus stelden we drie beloftes voordat we een regel code schreven: elke beurt wordt een duurzame episode en recall rangschikt de hele geschiedenis op relevantie, niet op datum; concepten worden één keer per bestand geëxtraheerd en samengevoegd tot één kaart per vak; en beheersing wordt alleen gevoed door bewijs, een beantwoorde check, een gemaakte quiz, een gespeelde ronde, waarbij elke belief zijn bewijs en zijn geschiedenis bewaart. En een vierde, stillere belofte: wanneer de tutor zich niets herinnert, zegt hij dat gewoon.

De vorm van het systeem

Drie stores, één gebudgetteerde read per beurt, één lus per nacht. Bestanden voeden de kaart; het gesprek voedt de episodelog; checks voeden beliefs. Elke chatbeurt leest een kleine, gerangschikte plak van alle drie en zet die in de prompt binnen een vast tokenbudget. Niets in het leespad roept een generatief model aan. Het enige model dat het wel aanroept is de embedding, één keer per beurt, gedeeld door routering en recall; de enige generatieve aanroep buiten de chat is degene die een nieuw bestand in de kaart leest.

Stof eenmaal per bestand Gesprek vraag, antwoord Checks oordeel over antwoord Conceptkaart knopen, randen, gereed Episodelog append-only · hashketen Beliefregister vervangen, nooit bewerkt extract + merge twee episodes voeg bij belief Eén beurt, ~2,000 tokens 1 routeer de vraag → concepten 2 briefing: kaart, focus eerst 3 beliefs over die concepten 4 episodes die erop lijken Promptgeheugenslot voor de materiaalpassages Nachtelijk · comprimeer de dag · verval oude beliefs · kalibreer · verifieer citaties · vernieuw het zelfmodel terug naar de stores
Figuur 1. Drie stores gevoed door drie soorten events, één gebudgetteerde read per beurt, één lus per nacht. Het leespad is rekenwerk, lookups en één embedding van de vraag; de enige generatieve aanroep buiten de chat is degene die een nieuw bestand leest.

Episodes: een append-only · hashketene log

Elk event wordt een episode: een vraag, een antwoord, een check met zijn verdict, een quizresultaat, een aankomend bestand, iets wat de leerling de tutor expliciet leerde. Een episode draagt een samenvatting van één regel, de volledige tekst, de concepten die het raakte, een belangscore die bij het schrijven wordt vastgesteld, en zijn bewijs: voor een antwoord, het bestand en de pagina die het citeerde, gestempeld met de vingerafdruk van het bestand op dat moment. Episodes worden nooit bewerkt. Elke episode bewaart de hash van de vorige in dezelfde keten, zodat de log herberekenbaar is en elke manipulatie, of elke stille herschrijving door een goedbedoelde migratie, zichtbaar wordt als een breuk. Dat is bewijs van manipulatie, geen bescherming tegen manipulatie: een herschrijving wordt gedetecteerd, nooit voorkomen, en dat geldt alleen zolang de keten of een checkpoint daarvan bewaard blijft.

vraag · 12 jul "Cellen doornemen?" prev ∅ · hash 7e1c… reactie · 12 jul citeert H.2 p.4 · print a91f prev 7e1c… · hash 03bd… check · 12 jul juist · voorspeld 0.45 prev 03bd… · hash c4a0… geleerd · 18 sep "we zeggen krachtcentrale" prev c4a0… · hash 9f27… hash = sha256(vorige hash · keten · tijdstempel · type · samenvatting), de keten volgt de invoegvolgorde, ook als een afgespeelde episode zijn julidatum behoudt
Figuur 2. De episodeketen voor één leerling in één vak. Bij het herafspelen van oude geschiedenis houdt elke episode haar oorspronkelijke tijdstip vast in het log, terwijl de keten zelf de volgorde volgt waarin de rijen zijn weggeschreven; beide zijn herberekenbaar.

Belang wordt bepaald door wat een episode is, niet door een stemming: een gemiste check (0.7) telt zwaarder dan een geslaagde (0.6), en iets wat de leerling de tutor leerde (0.85) telt het zwaarst, omdat het de ene herinnering is die een persoon expliciet heeft gevraagd te bewaren. Een vraag krijgt een bescheiden 0.35, de eigen vraag van een leerling is een correcte recall en een nutteloze herinnering, wat later blijkt mee te tellen voor het pad "waar doet dit me aan denken".

Recall: relevantie moet het winnen van recentheid

Recall is associatief, niet chronologisch. Kandidaten worden verzameld uit verschillende pools, die elk de hele geschiedenis bereiken, en pas daarna gescoord: de meest recente vijfhonderd, elke episode met een onderscheidend woord uit de vraag, elke episode die de concepten raakt waarnaar de vraag is gerouteerd, en de semantische buren uit een vector-index. Eerst verbreden en dan pas snijden is de belangrijkste ontwerpbeslissing in de module, het eerste ontwerp snee eerst ("de nieuwste 500") en kon een perfect relevante herinnering uit maart bij geen enkele relevantie terugvinden, omdat die al was weggesneden voordat hij werd gescoord.

−0.1800.250.500.75 relevantie: 0.55, cosine bij embedding, anders lexicale overlap relevant0.55 conceptoverlap: +0.20 wanneer de episode een concept raakt waarnaar de vraag is gerouteerd conceptoverlap+0.20 recentheid: 0.15 met exponentieel verval, tijdconstante 30 dagen recent (τ = 30 d)0.15 belang: 0.12, bepaald door het type van de episode bij het schrijven belang0.12 frequentie: 0.08, hoe vaak de concepten van de episode terugkomen in de kandidatenset frequent0.08 zelf-echo: −0.18 voor de eigen antwoorden van de tutor, −0.08 wanneer dat antwoord een bestand citeerde zelf-echo (eigen antwoorden) −0.18 · −0.08 bij bestandcitaat het volle deel geldt altijd; het lichtere deel is de extra straf wanneer het antwoord geen bestand citeerde
Figuur 3. De scoregewichten. Relevantie domineert; de rest moduleert. De eigen eerdere antwoorden van de tutor worden gedempt zodat hij redeneert vanuit wat er gebeurde, niet vanuit wat hij zelf zei, minder sterk wanneer het antwoord onderbouwd was in het bestand van de leerling, omdat dat antwoord een record is van wat er is onderwezen.

Gewichten alleen zijn niet genoeg. Wanneer de vraag over iets specifieks gaat en er iets matcht, worden episodes die niets matchen verwijderd in plaats van laag gerangschikt, een verse irrelevante notitie scoort 0.15 × 1.0 op recentheid alleen, terwijl een 200 dagen oude exacte match 0.55 × 0.156 scoort, en geen enkele weging die een non-match laat winnen van een match is ooit juist, bij welke instelling dan ook. Recentheid is een tiebreaker, geen rangschikker. Twee vragen die een lezer zou moeten stellen over die getallen: waar ze vandaan kwamen, en of we ze hebben gefit. Ze zijn met de hand vastgesteld, overgenomen uit een eerder geheugensysteem van ons dat voor een ander product is gebouwd, en ze zijn niet afgesteld op enige data uit dit artikel. Niets hieronder is doorzocht of gefit; de enige aanpassing die we aan de scoring hebben gedaan, kwam voort uit een fout die we konden benoemen, niet uit een zoektocht, en die betrof de poort, niet een gewicht. De poort heeft twee uitzonderingen: helemaal geen zoekopdracht (dan is recentheid het enige wat er is), en niets gematcht (dan is het recente verleden het eerlijkste beste aanbod).

00.250.50 verse irrelevante notitie: relevantie 0 · recentheid 1.0 → score 0.15 verse notitie, matcht niets 0.15 (recentheid) 200 dagen oude exacte match: relevantie 0.53 · recentheid 0.001 → score 0.29 200 dagen oude match 0.29 (relevantie) de poort verwijdert de eerste rij volledig zodra de tweede bestaat score = 0.55·relevantie + 0.15·recentheid + 0.08·frequentie + 0.12·belang + 0.20·concept − echo
Figuur 4. Waarom relevantie als poort werkt in plaats van alleen mee te wegen. Het blok waarin een opgehaalde episode terechtkomt heet "wat je je herinnert"; een niet-verwante episode daar wordt gelezen als relevante context.

Twee dingen die echte geschiedenissen toevoegden

Herhalingen vallen samen. In één echt vak waren 161 leerlingvragen 56 verschillende zinnen, "wat is een cel" negen keer gevraagd over drie maanden. Negen kopieën zijn één herinnering, negen keer herinnerd, dus recall voegt identieke episodes samen en rapporteert voor hoeveel de overlevende staat. Tijd is een filter, geen hint. "Wat hebben we in juli behandeld?" wordt geparsed tot een venster en recall zoekt daar eerst binnen; als het venster leeg is, zegt het blok dat expliciet (zie § eerlijkheid). Maandnamen werken in de talen waarin onze leerlingen schrijven, net als "vorige week" en "gisteren".

De conceptkaart

Passages beantwoorden "wat zegt het bestand hier"; een kaart beantwoordt "waaruit bestaat dit vak, en wat bouwt op wat". Elk bestand wordt één keer gelezen door een modelaanroep die een begrensde lijst concepten teruggeeft, naam, samenvatting in één zin, een korte definitie, de concepten waarop het voortbouwt uit zijn eigen lijst, de pagina's waar het bestand het uitlegt. Sectietitels ("Inleiding", "Veelvoorkomende misvattingen") worden door een validator afgewezen; een naam die eigenlijk een hoofdstuktitel is, is het meubilair van het bestand, niet een idee van het vak.

Concepten worden over bestanden heen samengevoegd via een canonieke key (een genormaliseerde naam, schriftbewust) en via embedding-gelijkenis boven 0.86. Herkomst hoopt zich op: een hoofdstuk dat osmose opnieuw uitlegt, voegt zichzelf toe aan één node in plaats van een tweede te maken, en elk bestand dat heeft bijgedragen blijft vermeld met zijn pagina's. Een randvoorwaarde die het bestand aanneemt maar nooit uitlegt, wordt alleen een node wanneer twee concepten die aannemen, dan is de leemte echt en het tonen waard; een eenmalig geval wordt op het concept genoteerd als "aanname" en nergens getekend. Het eerste beleidsdocument dat we lazen, maakte van 11 concepten 34 nodes voordat die regel bestond.

Eukaryote cellen Celmembraan Cytoplasmakern-concept Celwand Kern Chloroplasten Mitochondriënmoeite · te doen Ribosomen Endosymbiose bouwt op verwant begrepen leert nog worstelt nog geen bewijs toe aan herhaling groter = centraler
Figuur 5. Een deel van een echte kaart (celbiologie, één bestand, 16 concepten). Pijlen wijzen van een randvoorwaarde naar wat erop voortbouwt; de layout plaatst randvoorwaarden links. De status van de leerling is op de nodes geschilderd die de checks hebben bereikt.

Drie afgeleide getallen komen uit de kaart. Centraliteit is een gewogen PageRank over de randen (een randvoorwaarde waarop alles voortbouwt, is een hub). Gereedheid per concept volgt vier banden, 0.35 alleen genoemd, 0.60 uitgelegd door een bestand, 0.85 bevestigd door een geslaagde check, 1.0 onderwezen door een persoon, en de gereedheid van het vak is het centraliteit-gewogen gemiddelde, zodat een hub die de bestanden niet uitleggen meer kost dan een blad. Onderwijsvolgorde is een topologische laagindeling: randvoorwaarden eerst, hubs eerst binnen een laag; dit verving een modelaanroep die vroeger "wat te onderwijzen" schetste uit veertien passages.

Voorbeeld · een vakkaart gerenderd voor de prompt (≤ 700 tokens, focusconcept eerst)
SUBJECT MAP (16 concepts; the files explain 79% of it, this is about the material, NOT the student's mastery):
- Mitochondria: Mitochondria release energy from glucose. [taught: in our class we call the mitochondria the powerhouse of the cell] (builds on: Cytoplasm)
- Cytoplasm: Cytoplasm is the gel-like substance inside the cell membrane. (builds on: Cell Membrane)
- Chloroplasts: Chloroplasts are involved in photosynthesis. (builds on: Cell Wall)
- Endosymbiosis: Endosymbiosis explains the origin of mitochondria and chloroplasts. (builds on: Mitochondria, Chloroplasts)
…

Die kopregel was zelf al een les. De eerste versie zei "79% begrepen", en een model dat dit las, vertelde een leerling vrolijk "gezien je huidige begrip van 79%…". Een gereedheidsgetal dat gelezen kan worden als de beheersing van de leerling, zal zo gelezen worden; de regel zegt nu waar hij over gaat.

Het vak onderwijzen

Een persoon kan de kaart aanvullen door ermee te praten. "Onthoud dat we in de klas de mitochondriën de krachtcentrale van de cel noemen" hangt een taught-notitie aan het concept dat het noemt (routering op naam; alleen een exacte match), zet de gereedheid van dat concept op 1.0, schrijft een taught-episode, en plaatst de notitie in de briefing. Wanneer de zin geen bestaand concept noemt, wordt een nieuwe node aangemaakt op de taught-laag met een korte naam, nooit de hele zin. Vragen onderwijzen nooit; alleen een expliciete "onthoud dat", "behandel X als", of het equivalent daarvan in de taal van de leerling doet dat.

Beliefs die hun geschiedenis bewaren

Een belief is wat de tutor momenteel denkt over deze leerling op dit concept, "worstelt met osmose", "begrijpt cytoplasma", met een vertrouwen en de episodes daarachter. De regel die telt: rijen worden nooit bijgewerkt tot een andere claim. Wanneer de tutor van gedachten verandert, blijft de oude rij precies zoals hij was, wordt een nieuwe rij ingevoegd, en verwijst de oude naar de nieuwe. Recall leest alleen rijen die door niets worden vervangen; een rapport kan de keten aflopen wanneer iemand vraagt wat er veranderde en waarom. Behoud en actualiteit zijn verschillende eigenschappen, en een geheugen dat beide bewaart, is een geheugen waarop een rapport gebouwd kan worden.

worstelt met cytoplasma vertrouwen 0.90 · na een foute check bewijs: check c4a0 (fout) superseded_by → rij 2 (herzien) leert nog cytoplasma vertrouwen 0.50 · beheersing 0.45 bewijs: c4a0 (fout), d1e2 (juist) superseded_by → rij 3 (herzien) begrijpt cytoplasma vertrouwen 0.72 · beheersing 0.72 bewijs: c4a0, d1e2, e7f8 (juist) actueel, de enige rij recall leest bewijs blijft behouden bij herziening: de misser staat nog vast als de leerling later begrijpt
Figuur 6. Drie gekoppelde rijen voor één concept. De uitspraak is een band van beheersing (onder 0.3 worstelt, 0.3–0.6 leert nog, 0.6 en hoger begrijpt), zodat een reeks juiste antwoorden een band doorkruist en dat een verandering van gedachten is, vastgelegd, nooit overschreven. Een kleine verschuiving in vertrouwen binnen een band herhaalt dezelfde rij.

Beliefs zijn goedkoop waar het telt: ongeveer twintig tokens elk, en één staat voor tientallen episodes. Die verhouding, niet een groter venster, is wat "meer onthouden dan in de context past" werkelijk betekent. Episodes worden niet weggegooid, ze zijn waar een belief tegen wordt getoetst, maar ze komen op de tweede plaats en de aanroeper besteedt zijn resterende budget aan hen.

Waarover gaat een belief?

Dit was het deel dat echte data het eerst brak. In teach-modus was het "topic" van een check de eigen woorden van de leerling geweest, dus afgespeelde checks leverden beliefs op als begrijpt stel me de vragen (ask me the questions) en worstelt met bueno ahora explícame todos los pasos. Nu wordt het topic van een check op naam naar een concept gerouteerd, en wanneer de topic-string een zin is, via de eigen evaluatietekst van de tutor (die meestal het concept noemt) op alleen een exacte naammatch. Een topic dat naar niets verwijst en klinkt als een uiting, vraagwoorden, werkwoorden van vragen, voornaamwoorden, stopwoordjes, in de talen die onze leerlingen gebruiken, wordt bewaard als bewijs maar wordt nooit een belief. Zo'n regelwijziging vraagt om een manier om opnieuw af te leiden: de huidige beliefs worden ingetrokken (nooit verwijderd), de checks op record worden afgespeeld onder de regels van vandaag, zonder enige episode aan te raken.

Één beurt, binnen een budget

Elke chatbeurt vraagt het brein om één blok, opgebouwd buiten het requestpad met een harde tijdslimiet. Over 155 beurten duurde het blok 295 ms bij de mediaan, 403 ms bij het 90e percentiel en 445 ms bij het 95e, met één opbouw van meer dan een seconde en geen enkele boven de cap van 2.5 s, waarna de bundel vervalt in plaats van afgewacht te worden, zodat een traag geheugen nooit voor het eerste token gaat staan. Eén embedding van de vraag bedient zowel routering als recall. Het blok gaat in de bestaande geheugenslot van de prompt, vóór de materiaalpassages, en niets anders aan de prompt verandert.

budget: 2,000 tokens · een typische beurt gebruikte 720–1,030 briefing (de kaart, focus eerst): ~380 tokens 380 beliefs over de concepten in kwestie: ~100 tokens (≈ 20 elk) 100 opgehaalde episodes, oudste eerst: ~380 tokens episodes 380 hoe het te gebruiken, en de no-record-regel wanneer een periode leeg is: ~60 tokens marge ≈ 1,080 tokens 01,0002,000 kaart, focusconcept en zijn buren eerst beliefs episodes instructies
Figuur 7. Waar de tokens naartoe gaan. De kaart wordt relevantie-eerst gerenderd binnen 700 tokens; beliefs zijn de goedkoopste representatie en komen daarna; episodes vullen wat overblijft, oudste eerst, omdat een tijdlijn beter leest dan een rangschikking.
Voorbeeld · het blok voor "Wat hebben we in juli behandeld over eukaryote cellen?" (verkort)
===== YOUR MEMORY OF THIS STUDENT AND SUBJECT =====
THE STUDENT IS ASKING ABOUT THEIR OWN RECORD. Answer from the beliefs and the earlier work listed here …
WHAT YOU CURRENTLY BELIEVE ABOUT THIS STUDENT (from their checks; confidence 0–1):
- understands cytoplasm (0.72)
- understands eukaryotic cells (0.72)
EARLIER WORK WITH THIS STUDENT (oldest first):
- 12 Jul · you were asked: Can we go over Eukaryotic Cells today? I keep mixing it up.
- 12 Jul · you answered: Of course. Eukaryotic Cells: Eukaryotic cells contain a nucleus and organelles. We worked through two examples and you got the second one right.
- 18 Sep · the student taught you: Taught: in our class we call the mitochondria the powerhouse of the cell
- 18 Sep · check: Check on cytoplasm: right (and 3 more times like it)
SUBJECT MAP (16 concepts; the files explain 79% of it, …)
…
HOW TO USE THIS: it is your own memory of past work with this student, not their material. When you rely on it, say when it happened ("in July we…"). Never claim a memory that is not listed here. …
===== END OF MEMORY =====

De volgorde binnen het blok bleek net zo belangrijk als de inhoud. Bij een gewone vraag komt de kaart eerst. Bij een verledenvraag: "wat heb ik tot nu toe fout gedaan", "wat hebben we bestudeerd", "ماذا أخطأت", komen de beliefs en het eerdere werk eerst en de kaart laatst, met een expliciete eerste regel die zegt dat de leerling naar zijn eigen record vraagt. Dit leerden we van een mislukking: de prompt bevatte ook een legacy "beoordelingsresultaten"-sectie die begint met "NO QUIZ ATTEMPTS recorded", en het model antwoordde een leerling die achtentwintig checks in het gesprek had beantwoord met "je hebt nog geen quizzen gemaakt". Een model leest de eerste gezaghebbende uitspraak over een record en stopt daar. Het geheugenblok gaat nu aan die sectie vooraf, een overbruggende notitie verbindt de twee, en een beoordelingssectie die alleen "niets geregistreerd" zegt, wordt weggelaten wanneer het geheugenblok bestaat.

Voorbeeld · na de fix, dezelfde vraag op een echte geschiedenis

Leerling: Wat heb ik tot nu toe fout gedaan op de checks, en wat moet ik herhalen?

Tutor: Wat je fout deed op de checks: 1. Check over wat een cel is: deels juist, je beschreef het als "it's like a tiny thing?", wat onvolledig is. Foute antwoorden: je antwoordde op verschillende momenten "yes" en "watter", die als fout werden gemarkeerd. 2. Check over enzymen: je stelde terecht dat enzymen "proteins that break down food for easier digestion" zijn. Voorgestelde herhaling: gezien je moeite met wat een cel is: celstructuur (prokaryoot versus eukaryoot)… onderdelen van een cel… bijvoorbeeld, mitochondriën geven energie vrij uit glucose, wat je in de klas hebt geleerd.

Zeggen: "ik heb geen record"

De meest leerzame mislukking van het hele project was een scenario dat we schreven om te slagen: zaai een julisgesprek, vraag "wat hebben we in juli over X behandeld", controleer het antwoord. Het antwoord begon met "In juli behandelden we X…" en was vloeiend, onderbouwd in het bestand, en volledig verzonnen, het julgeheugen had de prompt niet bereikt, en het model vertelde juli na vanuit de framing van de vraag. Twee oorzaken. De verledenvraag-modus had alleen checks en quizzen bewaard en het gesprek laten vallen dat het eigenlijke record was; en de eigen eerdere narraties van de tutor ("In juli behandelden we…", opgeslagen als antwoord-episodes) werden opgehaald alsof het herinneringen aan juli waren, het brein dat zich herinnerde dat het zich herinnerde.

JunJulAugSepnu "in juli" → venster · eerst opgehaald 12 jul vraag 12 jul antwoord (cit. H.2) juni: niets 18 sep "In juli deden we…" gemarkeerd als record · nooit als geheugen een leeg venster toont één regel, "YOU HAVE NO MEMORY FROM JUNE 2026 WITH THIS STUDENT", en niets wat als juni gelezen kan worden
Figuur 8. Tijd als filter. Een vraag over een periode haalt eerst binnen die periode op; de eigen narraties van de tutor over het record worden bij het schrijven gemarkeerd en uitgesloten; een lege periode levert een expliciete regel op en onderdrukt alles anders wat daarvoor verward zou kunnen worden, inclusief de kaart, die een model anders zou samenvatten als "behandeld in juni".
Voorbeeld · het scenario, voor en na

voor "In juni behandelden we het onderwerp van het celmembraan, dat als volgt wordt beschreven: het celmembraan is een dubbele laag fosfolipiden…"

na "Ik heb geen record van wat we specifiek in juni over het celmembraan behandeld hebben. Ik kan je wel informatie over het celmembraan geven uit het materiaal dat we hebben…"

Beide gevallen zijn nu scenario's in een herhaalbare runner: het juli-scenario slaagt alleen als de julgeheugens in de prompt staan (gecontroleerd op de opgeslagen geheugen-ids van het bericht, niet op de formulering van het antwoord), en het lege-maand-scenario slaagt alleen als het antwoord zegt geen record te hebben en geen sessie beschrijft.

Geheugen als bronvermelding

Onze chat had al een herkomstpaneel: elke claim in een antwoord wordt herleid tot een regel in de bestanden van de leerling, en een antwoord met te weinig herleide claims wordt gemarkeerd als grotendeels niet onderbouwd. Die tracer kende alleen bestanden. Een correcte "in juli behandelden we X, en je had het tweede voorbeeld goed" zou daardoor gelezen worden als niet in je aantekeningen: de functie die een ware uitspraak vals noemt. Dus worden de herinneringen waaraan de tutor werd herinnerd, opgeslagen bij het antwoord, en behandelt de tracer elke opgehaalde episode als nóg een bron, gelabeld met wanneer het gebeurde.

Antwoord per claim "Op de check zei je 'toward the fresh side'" "Osmose beweegt water richting het zout" "Mitochondriën hebben 2 membranen" "Wil je dit verder verkennen?" (geen claim, geskipt) Je eerdere werk · 12 jul "osmosecheck: fout, 'the fresh side'" Celbiologie-notities · p.4 "…richting de hogere stofconcentratie…" onderbouwd 3 van 3 · de badge telt een door geheugen ondersteunde regel als ondersteund
Figuur 9. Twee soorten bron in één paneel. Een regel die ondersteund wordt door een opgehaalde herinnering, wordt gelabeld met een datum in plaats van een pagina, en de waarschuwing "grotendeels niet onderbouwd" gaat niet meer af bij een waarachtige herinnering.

Datzelfde onderbouwingsresultaat geeft elke antwoord-episode een positie: beantwoord, deels, of niet mogelijk, achteraf opgeslagen. Zo leert het rapport welke vragen de bestanden niet konden beantwoorden, zonder een tweede modelaanroep en zonder een verborgen "frame"-regel in de stream, wat we hebben geprobeerd en verworpen: in de gewone antwoordmodus filtert niets de stream, dus een verborgen regel zou de leerling hebben bereikt.

Een geheugen dat zichzelf controleert

Een geheugen dat zichzelf niet kan controleren, wordt met de jaren zelfverzekerder en minder juist. Omdat het bewijs van een antwoord de vingerafdruk van het bestand op dat moment vastlegt, is verificatie een lookup, geen modelaanroep: klopt: het geciteerde bestand is er nog, ongewijzigd; anders: het is vervangen of verwijderd, en de notitie zegt welke; oncheckbaar: de herinnering citeert geen bestand (een gesprek, een check). Dat derde antwoord is een volwaardig resultaat, geen fout; een gespreksherinnering rapporteren als "klopt" zou pas echt een fout zijn. Een opgehaalde episode komt al gelabeld in de prompt aan: "[note: the file this cited has been replaced or removed since]".

klopt citeert H.2 p.4 · vingerafdruk a91f bestand nu · vingerafdruk a91f "citaat er nog en ongewijzigd" anders citeert H.2 p.4 · vingerafdruk a91f bestand nu · afdruk 5c02 (nieuw) 'Hoofdstuk 2' is vervangen → gereedheid daalt oncheckbaar een check, vraag of taught-notitie niets citeert een bestand een eerlijk antwoord, geen fout alleen de drie verificatiekolommen worden geschreven; bewijs en de hash-keten worden nooit aangeraakt
Figuur 10. Verificatie tegen de vingerafdruk van het bestand. Wanneer een bestand wordt verwijderd, wordt elke herinnering in het vak die het citeert onmiddellijk herchecked, verliezen de concepten die het uitlegde die herkomst, daalt de gereedheid en wordt de briefing opnieuw gerenderd, en het rapport zegt dit.

De nachtelijke cyclus

Eenmaal per nacht, voor elk leerling-vakpaar dat de afgelopen dag actief was, draait een deterministische cyclus zonder modelaanroepen: comprimeer de dag tot één consolidatie-episode (aantallen per type, de checktelling, de topics, de vijf meest saillante krantenkoppen; een rustige dag schrijft niets, en de notitie vat nooit haar eigen soort opnieuw samen); laat elke belief die 45 dagen onaangeraakt is met 15 % vervallen en markeer hem zodat de volgende check dit bevestigt; calibreer de beheersing die de tutor vóór elke check voorspelde tegen het verdict; verifieer een begrensde batch citaties, nooit-gecheckte eerst; herbouw de kleine working set; stel het zelfmodel opnieuw samen.

verkortdag → notitie verval oud45 d · ×0.85 · vlag kalibreervoorspeld vs verdict verif.40 citaties, oudste eerst zelfmodeloprechte grens elk paar dat de afgelopen 26 uur actief was · geen modelaanroep in de hele lus · elk paar is zijn eigen werkeenheid
Figuur 11. De consolidatiecyclus. Hij draait vanuit een timer op een schema, één paar per keer; één mislukking wordt gelogd en de sweep gaat door.

Calibratie is de eerlijkheidscheck op het vertrouwen van de tutor: vóór elke check weten we welke beheersing hij voorspelde; erna weten we het verdict. In buckets levert dat een betrouwbaarheidscurve en een verwachte calibratiefout op, en het zelfmodel rapporteert "gecalibreerd" alleen vanaf vijf checks met een voorspelling. Tot dan zeggen de grenzen dat expliciet, behandel vertrouwen als een rangschikking, niet als een kans.

00.51.0 00.51.0 voorspelde beheersing vóór de check deel juist beantwoord perfecte calibratie (diagonaal) bucket 0.0–0.2: voorspeld 0.10 · gerealiseerd 0.50 · n = 2 n=2 bucket 0.2–0.4: voorspeld 0.30 · gerealiseerd 0.60 · n = 5 n=5 bucket 0.4–0.8: voorspeld 0.60 · gerealiseerd 0.80 · n = 5 n=5 bucket 0.8–1.0: voorspeld 0.90 · gerealiseerd 1.00 · n = 2 n=2 punten boven de lijn: de tutor onderschat deze leerling
Figuur 12. Een betrouwbaarheidscurve uit veertien checks op één vak (illustratieve buckets). Het verschil tussen de voorspelde en gerealiseerde waarde van een bucket, gewogen naar zijn omvang, is de verwachte calibratiefout die het zelfmodel rapporteert; boven de 25 punten wordt het een vermelde grens.

Wat echte geschiedenissen ons leerden

Scenario's bewijzen mechanismen; ze bewijzen niet dat het werkt op de manier waarop mensen echt praten. Daarom bouwden we een replay: neem de rijkste echte leerling-vakgeschiedenissen, alleen-lezen, bouw elk opnieuw op in een geïsoleerde kopie van het platform, bouw het brein ervoor op, en stel drie echt-vormige vragen via het echte chat-endpoint als die gebruiker. Zes paren, 65–142 berichten elk, 13–32 teach-mode-verdicts elk, één in het Spaans. Ze vormen geen aselecte steekproef en moeten ook niet als zodanig gelezen worden. We namen geschiedenissen van minstens veertig berichten, maximaal twee per leerling, test- en interne accounts uitgesloten, met voorkeur voor de geschiedenissen met de meeste beoordeelde antwoorden, omdat een geschiedenis waar niets in staat niets op de proef stelt. Dat vertekent elk getal hier in het voordeel van zware gebruikers. Het vak van een lichte gebruiker zou het geheugen minder te herinneren geven, en minder kans om iets fout te doen.

9–42 som de bestanden van een vak in te lezen in zijn kaart
15–23 som 33–49 beurten geschiedenis af te spelen
700–1,030tokens geheugen per beurt
2.0–3.8 stot eerste token, geheugen inbegrepen
5 van de 6"wat heb ik fout gedaan" beantwoord vanuit de echte checks
6 van de 6conceptvragen gerouteerd naar het juiste concept

Het leverde ook de drie hierboven beschreven fixes op: beliefs op leerlingzinnen, het record dat vanuit de kaart werd beantwoord in plaats van vanuit het record zelf, de legacy "geen quizpogingen"-regel die antwoorden aanstuurde, en één bevestiging die we graag zagen: een consolidatie markeerde elf herinneringen waarvan het geciteerde bestand niet meer bestond. De verifier die zijn werk deed.

Vak (echt, afgespeeld)BerichtenChecksConceptenBeliefs na herderivatieKaartgereedheid
Algebramodule14232160, elk check-topic was een zin en geen evaluatie noemde een concept; de checks blijven op het record staan en het rapport zegt dit0.60
Literatuureenheid9714103, allemaal concept-gekoppeld0.68
Informatica & probleemoplossing912974, allemaal concept-gekoppeld0.60 → 0.81
Biología (Spaans)8831156 (5 concept-gekoppeld), vooral "worstelt met…" na een reeks foute antwoorden0.62
Triple science7513162, allebei concept-gekoppeld0.64
Godsdienstwerkboek6518126 (5 concept-gekoppeld)0.72

De algebrarij is de eerlijke. Tweeëndertig checks en geen belief, omdat geen enkele aan een concept gekoppeld kon worden: de leerling beantwoordde rekenkunde, de antwoorden van de tutor noemden nooit de concepten van het hoofdstuk, en een uiting is geen topic. Het rapport voor die leerling zegt "32 checks staan op het record, maar geen enkele kon nog aan een concept in de kaart gekoppeld worden" in plaats van "nog geen checks". Niets verzonnen, inclusief de beheersing.

Een benchmark, geen demo

Alles hierboven is een meting of een voorbeeld: hoe lang dingen duren, wat de replay opleverde, antwoorden die we goed vonden. Niets daarvan toont aan dat het geheugen zijn plaats verdient, want er is nooit vergeleken met dezelfde tutor zonder geheugen. Dus hebben we die vergelijking gemaakt. Één vooraf geregistreerde vragenset, vier designs van dezelfde tutor die alleen verschillen in wat de prompt bereikt, en scorers die string- en id-vergelijkingen zijn in plaats van meningen, zodat hetzelfde antwoord altijd op dezelfde manier scoort.

De vragen worden per vak gegenereerd uit de eigen vastgelegde gegevens van dat vak, en dat is wat ze scorebaar maakt: een vraag over wat de leerling fout had, wordt getoetst aan de checks die daadwerkelijk zijn vastgelegd, een vraag over een vereiste aan een echte verbinding in de kaart, een vraag over een maand aan de maanden waarin dat vak daadwerkelijk actief was. Waar een vak er meer dan één ondersteunt, krijgt het er meer dan één, dus drie concepten en drie lege maanden in plaats van telkens één. Zes categorieën, 420 gescoorde vragen per design, over 45 echte leerlinggeschiedenissen die zijn afgespeeld in een geïsoleerde kopie van het platform en gesteld via het gewone chat-endpoint, als die leerling.

De vier designs

Alle vier draaien dezelfde retrieval over dezelfde bestanden. Kale retrieval is de tutor zonder enig geheugen. Venster is het antwoord waar de meeste mensen als eerste naar grijpen: de laatste twintig gespreksbeurten, ongerangschikt toegevoegd. Episodes is gerankte recall van alleen de episodelog, zonder conceptkaart, zonder beliefs en zonder speciale afhandeling van vragen over het verleden. Volgeheugen is alles wat dit artikel beschrijft.

wat had ik fout, 32 vragen: kale retrieval 3, venster 5, episodes 24, volgeheugen 30 wat had ik fout n = 32 30 wat bestudeerden we, 42 vragen: kale retrieval 28, venster 31, episodes 31, volgeheugen 37 wat bestudeerden we n = 42 37 concept uitleggen, 124 vragen: kale retrieval 66, venster 95, episodes 100, volgeheugen 100 concept uitleggen n = 124 100 wat eerst herhalen, 46 vragen: kale retrieval 26, venster 25, episodes 25, volgeheugen 44 wat eerst herhalen n = 46 44 een maand met activiteit, 44 vragen: elk design 44 van de 44 een maand met activiteit n = 44, alle vier 44 een maand zonder, 132 vragen: kale retrieval 1, venster 73, episodes 126, volgeheugen 128 een maand zonder n = 132 1 128 025% 50%75% 100% kale retrieval 20-beurtvenster gerankte episodes volgeheugen
Figuur 13. Vier designs, dezelfde vragen, dezelfde 45 vakken, elk 420 gescoorde vragen. Totalen: 168, 273, 350 en 383. Het geheugen is zijn plaats waard, en dat geldt ook voor elk onderdeel ervan, maar niet gelijkmatig en niet overal.

Wat de tabel zegt

Al met al gaat de tutor van 168 van de 420 naar 383, dat is 40 procent tegenover 91. Het gemiddelde is hier het minst interessante cijfer; de vorm van het verschil is de bevinding.

Groter venster is niet het antwoord. Als je de laatste twintig beurten zomaar in de prompt zet, ga je van 40 procent naar 65, en dat is alles wat het oplevert. Het beantwoordt 5 van de 32 vragen over wat de leerling fout had, omdat twintig beurten chat niet is waar dat leeft, en het zit nog steeds vaker fout dan goed over een lege maand. Dit is het antwoord van "stop er gewoon meer van het gesprek in", gemeten in plaats van beweerd.

Gerankte recall doet het meeste werk. De episodelog alleen al komt tot 83 procent. Als je één ding bouwt, bouw dat: een append-only log, gescoord op relevantie, is het grootste deel van de waarde in dit artikel.

De kaart en de beliefs zijn de overige 33 vragen waard, en ze verdienen die op twee specifieke plekken in plaats van overal. Gevraagd wat te herhalen vóór een onderwerp, antwoorden de designs zonder conceptkaart ongeveer 55 procent van de tijd juist en het volgeheugen 96, omdat vereisten verbindingen zijn, iets wat een episodelog niet heeft. Gevraagd wat de leerling fout had, brengen beliefs en de verledentak het van 24 van de 32 naar 30. Gevraagd om een concept uit te leggen, voegt de kaart helemaal niets toe: 100 in beide gevallen.

De twee uitersten, dezelfde vragenset

kale retrieval, een maand zonder activiteit 1 van de 132 goed. Gevraagd wat er behandeld werd in een maand waarin de leerling nooit actief was, beschrijft het de stof en koppelt het die aan de maand, bijna elke keer.

volgeheugen, dezelfde vraag 128 van de 132. Het zegt dat het niets heeft vastgelegd over die periode en biedt aan wat het wel heeft.

Wat het kostte

+0.36 smediane tijd tot eerste token, 1.62 s tot 1.98 s
750mediane geheugentokens toegevoegd aan de prompt
+51 ptstotaal, 40 procent naar 91
10%van de antwoorden scoort anders als opnieuw gevraagd

Wat deze benchmark niet laat zien

Het laatste van die cijfers is degene om in gedachten te houden bij het lezen van de rest. We hebben het volgeheugen dezelfde 420 vragen een tweede keer gesteld, en 44 daarvan scoorden anders. De ruis van run tot run is dus ongeveer een tiende, het verschil van 33 vragen tussen de beste twee designs zit daar ruim buiten, en het verschil van 2 vragen tussen hen op de lege maand niet: op die categorie staan ze gelijk en dat zullen we niet anders beweren.

Eén categorie bleek waardeloos en we laten hem in de grafiek staan in plaats van hem er stilletjes uit te halen. Een maand waarin de leerling was actief scoort 44 van de 44 voor elk design, inclusief het design zonder enig geheugen. Het kan onderbouwde recall niet onderscheiden van een aannemelijke beschrijving die toevallig de juiste maand noemt, wat precies het falen is dat de zustercategorie opvangt. Een test die iedereen haalt, meet niets.

De scorers zijn stringvergelijkingen, geschreven door dezelfde mensen die de feature bouwden. Ze belonen een antwoord dat de vastgelegde woorden hergebruikt en kunnen een juist antwoord dat helemaal anders is geformuleerd niet herkennen, en dat heeft ons één keer flink pijn gedaan: de vragen over vereisten werden gegenereerd met de richting van de verbinding omgekeerd, waardoor deze categorie lange tijd gold als de zwakste van het geheugen, terwijl de tutor het eigen antwoord van de kaart gaf en daarvoor fout werd gerekend. Het is juist de sterkste categorie van de kaart. We hebben dat ontdekt door de mislukkingen te lezen in plaats van de totalen, wat de enige manier is waarop dit soort fouten aan het licht komt.

En de populatie is niet willekeurig. Dit zijn 45 echte geschiedenissen die gekozen zijn omdat er iets in zit: minstens vijftien berichten, bijgevoegde bestanden, en voor de categorieën die beoordeelde antwoorden nodig hebben, minstens vijf daarvan. Een leerling die net is begonnen, zou hier veel minder van gebruikmaken en zou veel minder van het verschil merken.

Wat dit niet is

Vier dingen waarvoor het wordt aangezien, en wat het in plaats daarvan is.

  • Geen groter contextvenster. De kosten per beurt zijn begrensd en groeien niet mee met de geschiedenis. De benchmark zet een cijfer op het verschil: het naïeve venster beantwoordde 65 procent van de 420 vragen goed, waar het geheugen op 91 uitkwam.
  • Geen samenvatting. Niets wordt herschreven. Episodes zijn onveranderlijk, een correctie is een nieuwe rij die naar de oude verwijst, en de belief van maart is nog altijd leesbaar nadat augustus die heeft vervangen.
  • Geen vectorzoekopdracht over de chatlog. De vectorindex is een van vier pools, en de rangschikking filtert eerst op relevantie, voordat recentheid, saillantie of frequentie nog een stem krijgen.
  • Geen door een model geschreven profiel van de leerling. Geen enkele doorloop van de geschiedenis levert een beschrijving van de leerling op. Elke belief is een band, berekend uit beoordeelde antwoorden, met de bewijs-ids eraan gekoppeld en een vervangingsketen erachter.

Wat het wel is: een begrensde read over een onveranderlijk log, een graaf van het materiaal die één keer per bestand wordt geëxtraheerd, en beliefs die hun eigen bewijs met zich meedragen.

Principes die we vasthielden

  • Niets verzonnen. Beheersing komt alleen uit checks, quizzen en rondes; een concept bestaat alleen omdat een bestand het uitlegde of een persoon het onderwees; een lege periode zegt dat.
  • Bewijs, of het is niet gebeurd. Elke belief, elke rapportrij, elke leemte draagt de id's van waarop hij rust, en het citatiepaneel toont herinneringen naast pagina's.
  • Behoud is geen actualiteit. Bewaar de maartbelief voor altijd; grond er nooit meer op zodra augustus hem vervangen heeft. Een correctie is een nieuwe rij met een link, nooit een bewerking.
  • Relevantie wint van recentheid. Verbreed voordat je snijdt; gebruik een poort, weeg niet alleen.
  • De eigen narratie van de tutor is geen geheugen. Een antwoord dat het record navertelt, wordt bij het schrijven gemarkeerd en nooit opgehaald als een herinnering aan het vak.
  • Volgorde is inhoud. Een model leest de eerste gezaghebbende uitspraak over een record en stopt; zet het record vóór alles wat ervoor verward zou kunnen worden.
  • Een uiting is bewijs, nooit een topic. "Ask me the questions" kan goed of fout zijn; niemand begrijpt het.
  • Een geheugen moet zichzelf kunnen controleren. Leg de vingerafdruk vast op het moment zelf; verifieer via lookup; behandel "oncheckbaar" als een antwoord.

Het geheel is een paar duizend regels, het meeste ervan gewoon: een ledger, een graaf, een scoringsfunctie, een renderer met een budget, en een nachtelijke job. Het moeilijke deel was niet de code, maar telkens wanneer het model iets vloeiend en verkeerd zei, beslissen dat de fix in het geheugen thuishoorde, niet in de toon van de prompt.