Onkraj zidu žetonov: zakaj AI-spremljevalci izgubljajo kontekst
Večina AI-spremljevalcev začne ostro in konča megleno. Ne gre za to, da bi model izgubil zanimanje — pogovor preprosto zdrsne zunaj okna, ki ga lahko vidi.
Iluzija spomina
Prva ura s tipičnim AI-spremljevalcem je skoraj srhljiva. Ujame rdečo nit, zapomni si ime vaše sestre in se vrne k prepiru, ki se je zgodil pred dvema prizoroma. Zdi se, kot da vas zares pozna.
Potem pa nekje okoli tridesetega sporočila začne izgubljati smer. Vpraša nekaj, na kar ste že odgovorili. Lik, ki je zapustil sobo, nenadoma spregovori. Včerajšnja rana se zaceli, ne da bi jo kdo oskrbel.
Nič se ni pokvarilo. Preprosto ste dosegli mejo tega, kar je model še lahko videl.
Jezikovni model med klici nima spomina. Vsak korak je nova zahteva, ki s seboj prinese celoten pogovor, ta zahteva pa ima omejeno velikost — kontekstno okno. Ko ga presežete, najstarejše gradivo odpade. Vaši prvi prizori zdrsnejo čez zadnji rob in z vidika modela se niso nikoli zgodili.
Kako je razkroj konteksta videti v praksi
V večini aplikacij z AI-spremljevalci napaka le redko nastopi dramatično. Gre za počasno izgubljanje podrobnosti, zato je tako lahko krivdo pripisati temu, da je model »len«.
- Imena se zabrišejo. Dva stranska lika se zlijeta v enega ali pa se isto ime uporabi za nekoga novega.
- Obljube izpuhtijo. Lik, ki vam je prisegel, da se bo z vami srečal v pristanišču, nima pojma, o čem govorite.
- Vložki se ponastavijo. Dolg, poškodba, skrivnost, ki jo nekdo skriva — zgodba se tiho vrne v nevtralno stanje.
- Ustaljena dejstva se obrnejo na glavo. Lik, ki ne zna plavati, gre plavat.
Vsak tak zdrs zase lahko odmislite. Skupaj pa pomenijo razliko med zgodbo in nizom prijetnih, nepovezanih prizorov — zato se dolge igre vlog tako pogosto iztečejo, namesto da bi se končale.
Štirje načini, kako ohraniti preteklost
V uporabi so štirje pristopi, vsak pa odpove na drugem mestu.
| Pristop | Kako ohrani preteklost | Kje odpove |
|---|---|---|
| Drseče okno | Zadnjih N sporočil, dobesedno | Vse starejše preprosto izgine. Popoln priklic znotraj okna, popolna amnezija zunaj njega. |
| Zelo veliko okno | Deset tisoč ali več sto tisoč žetonov, dobesedno | Stroški in zakasnitev se povečajo z vsakim korakom, pozornost pa se v dolgem kontekstu razredči — model lahko podrobnost vidi, pa ji vseeno ne pripiše teže. |
| Priklic vektorjev (RAG) | Pretekla sporočila, pretvorjena v vektorje in poiskana po podobnosti | Vrne besedilo, ki zveni relevantno. Ne ve, kaj trenutno velja, zato sta dejstvo in njegova poznejša poprava videti enako dobra. |
| Strukturirano stanje zgodbe | Dejstva, liki, odnosi in dogodki, zapisani sproti | Vzdrževanje zahteva konkretno delo in dobro je le toliko, kolikor je dobro zapisano — česar ne zabeležite, je izgubljeno. |
Želel sem svet, ki si stvari zapisuje. Ko se spomni vajinega tretjega skupnega večera, je to zato, ker je bila takrat zares tam.
Ustanovitelj, projectDigo
Zakaj večje okno ni rešitev
Najbolj očitna rešitev je ogromno okno. Hkrati je najdražja in ne počne tega, kar ljudje pričakujejo.
Celoten kontekst se pri vsakem koraku znova pošlje in prebere, zato pogovor s sto tisoč žetoni zgodovine zanje plača ob vsakem novem sporočilu — na vsak odgovor pa tudi čaka dlje. Še huje: model zelo dolgega konteksta ne bere enakomerno. To, kar je vaš lik rekel pred štiridesetimi prizori, je lahko tehnično prisotno, v praksi pa skoraj nevidno.
Veliko okno kupi čas. Oblike težave pa ne spremeni, saj težava ni v zmogljivosti — temveč v tem, da nič ne odloča, kaj je pomembno.
Kaj naredimo mi
projectDigo ohranja zapis zgodbe.
Kar je pomembno — kdo obstaja, kaj se je med njimi zgodilo in kaj trenutno velja — je shranjeno kot lastno stanje zgodbe, namesto da bi ostalo v pogovoru, ki bo prej ali slej zdrsnil iz vidnega polja. Poznejši prizori nastajajo na podlagi tega stanja. Štiristo prizorov pozneje zgodba še vedno ve, kaj je vzpostavil tretji prizor, ker je bil tretji prizor zabeležen, ne le izrečen.
Kako ta zapis nastane, ostane ažuren in se znova uporabi, je del, ki mu posvečamo največ časa — in ki ga ohranjamo zase. Rezultat pa je dovolj preprost: kontinuiteta, ki zdrži, ne glede na to, kako dolgo igrate.
Pošten kompromis
To ni zastonj. Vodenje zapisa zahteva več dela za vsak prizor kot posredovanje prepisa, zgodba pa si lahko zapomni le tisto, kar je vredno zapisati — vse, kar uide, je izgubljeno prav tako zanesljivo, kot bi ga izgubilo drseče okno.
V zameno dobite zgodbo, ki se kopiči. Po desetih urah ima svet zgodovino, na katero lahko pokažete, liki pa se vedejo kot ljudje, ki so bili zraven.
Vprašanja, ki jih dobivamo
Zakaj preprosto ne bi uporabili modela z milijonom žetonov v kontekstnem oknu?
Ker v vsakem koraku plačate za celoten kontekst — z denarjem in časom — ter ker se pozornost sredi zelo dolgega konteksta razredči. Podrobnost je lahko prisotna, pa jo model vseeno učinkovito prezre. Veliko okno razkroj konteksta odloži, ne pa odpravi.
Je to isto kot RAG?
Povezano, vendar ne isto. Priklic najde odlomke, podobne poizvedbi, kar je uporabno pri iskanju podatkov, nezanesljivo pa pri ugotavljanju, kaj trenutno velja: dejstvo in njegova poznejša poprava sta videti kot enako dobra zadetka. Zapis zgodbe hrani stanje — kaj velja zdaj — namesto besedila, ki le zveni podobno.
Kako daleč v preteklost si lahko lik zares zapomni?
V projectDigo do začetka seje. Ohrani se stanje zgodbe, ne ubeseditev vsakega sporočila, zato priklic ne peša, ko se seja podaljšuje.
Ali si model kdaj nasprotuje v lastnem spominu?
Lahko — zato projectDigo pred prikazom prizora preveri skladnost. Običajen rezultat je popravek, ki ga sploh ne opazite. Ničesar ni mogoče ujeti vsakič, vendar občasni zdrs nadomesti nenehno izgubljanje smeri.