Cum rezolvă Stage Whisper problema 'NPC-urilor omnisciente': Arhitectura de izolare a contextului
NPC-urile care pot cita ceva ce personajul meu a spus cu trei sesiuni în urmă a fost destul de tare de văzut. Sistemul de memorie funcționa. NPC-urile făceau referire la evenimente trecute, citau lucruri pe care le-am spus. DAR a început și o problemă diferită: NPC-urile au început să devină omnisciente.
Iată un fragment dintr-o sesiune recentă, partea relevantă este evidențiată:
„Deci," spune ea, vocea purtându-se ușor peste foșnetul frunzelor, „care e motivul real pentru care ai venit să mă cauți? Curiozitate sau doar încerci să eviți să despachetezi restul acelui birou haotic al tău?"
Asta făcea referire la ceva ce s-a întâmplat într-o scenă complet diferită, din care acest personaj nu făcea parte. Personajul n-ar fi trebuit să aibă nicio modalitate de a ști.
Mici inconsistențe ca aceasta sparg imersiunea. Dar în alte cazuri, poate fi game-breaking. De exemplu, am o campanie în care personajul meu este un vampir secret care navighează o lume de oameni nebănuitori. NPC-urile au început să sugereze ocazional că știu secretul meu, ceea ce a făcut brusc foarte dificil să trec ziua fără a fi suspectat. Sau în alte exemple, dacă am furat un artefact în timpul unui jaf, jucătorul a fost cel care a furat artefactul în timpul jafului, iar apoi un personaj fără legătură face comentarii suspecte.
AI-ul a decis practic să folosească toate secretele disponibile în context pentru efect dramatic, ceea ce ar trebui să se întâmple doar foarte ocazional din motive de intrigă.
Deci de ce nu pot pur și simplu să-i spun AI-ului să nu facă asta?
Problema este că încerci să obții un negativ. „Nu folosi aceste informații." Aceasta este o sarcină fundamental diferită și mult mai dificilă decât cazul pozitiv: folosește informațiile care sunt acolo. Pentru a antrena un model să ignore contextul relevant, ai avea nevoie de mii de exemple de situații în care informația era clar disponibilă, dar rezultatul în mod deliberat nu a folosit-o. Asta este aproape antiteza a ceea ce un AI este conceput să facă. Pentru majoritatea sarcinilor, ignorarea contextului util ar fi un eșec.
Teoretic, un model ar putea fi antrenat cu mai multe exemple de a nu acționa pe baza secretelor. Dar narațiunea și roleplay-ul nu au fost un mare focus pentru creatorii de modele până acum, așa că această problemă nu a primit atenția pe care o merită.
Am realizat că trebuia să repar asta în acea campanie cu vampirul secret. Campania era configurată astfel încât personajul meu să poată trece drept om normal de cele mai multe ori, iar întregul scop era să navighez acea tensiune fără a fi prins. Ar fi fost un mare moment narativ când orice NPC afla secretul, pentru că atunci ar fi trebuit să fie convins să păstreze tăcerea.
Ce am descoperit a fost că aproape fiecare antagonist potențial știa cumva. Chiar dacă nu dezvăluisem nimic. Și asta a fost imediat distrugător pentru intrigă. Se simțea de parcă era un mare semn deasupra capului meu anunțând că sunt vampir. Personajul meu făcea constant damage control sau simțea că fiecare personaj avea un avantaj asupra mea.
Am experimentat cu prompturi mult timp. În cele din urmă, am realizat că va trebui pur și simplu să nu includ deloc informațiile în context.
Soluția, așadar, este izolarea contextului. Dacă AI-ul nu se poate abține să nu folosească orice vede, atunci informația trebuie într-adevăr să nu fie acolo. Acest lucru este realizabil în Stage Whisper pentru că fiecare scenă și amintire este deja etichetată cu NPC-urile care apar în ea, așa că putem filtra ușor pentru a include doar personajele care au fost efectiv acolo.
Dar iată capcana. Unele secrete sunt motoare majore ale intrigii. Nu le poți șterge pur și simplu complet, pentru că povestea tot trebuie să țină cont de ele. Fie că e vorba de un jaf sau de un vampir secret, acele secrete sunt nucleul narațiunii și n-ar fi aceeași poveste fără ele.
Așa că a trebuit să împărțim generarea noastră de text în două.
Prima parte o numesc Story Director. Conduce povestea generală: intriga, ritmurile narative. Are toate secretele și poate decide cum să țeasă cel mai bine povestea având în vedere acele secrete. Înțelege imaginea completă, inclusiv lucrurile pe care niciun personaj n-ar trebui să le știe încă.
A doua parte o numesc Scene Director. El „joacă" scena care îi este înmânată de Story Director. Are acces la toate amintirile și personalitățile NPC relevante, deci are suficiente informații pentru a juca toate NPC-urile și a oferi o narațiune interstițială, dar într-adevăr nu cunoaște secretele.
Unele informații trebuie să treacă de la unul la altul, pentru a putea lucra la aceeași poveste fără a lucra unul împotriva celuilalt.
Story Director produce o sinopsă care îi spune Scene Director-ului tot ce are nevoie să știe. Arată cam așa:
<synopsis>
Elian se întoarce în Camera 314 cu Maeve, vrăjile familiare de intimitate oferind un scurt răgaz de la atenția adunată în timpul spectaculoasei lor demonstrații. Simțind nevoia lui Maeve de a studia după o zi neobișnuită, Elian decide să părăsească camera pentru o explorare solitară
<npc_list>maeve-corwin</npc_list>
<location>room-314</location>
<new_scene/>
</synopsis>
Asta îi spune Scene Director-ului ce se întâmplă în scenă, unde este, cine e în ea și dacă e o scenă nouă. Prezența personajului jucător este presupusă. Story Director poate, de asemenea, să emită opțional discuții out-of-character către jucător și să facă notițe detaliate de performanță pentru uz propriu viitor.
Cei doi directori nu văd același context. Iată împărțirea:
Story Director vede:
- fișiere complete de campanie, inclusiv notițele GM, planul de sesiune, configurarea campaniei și starea curentă a campaniei
- fișa completă a personajului jucător, inclusiv toate secretele
- o listă a tuturor NPC-urilor, locațiilor și lore-ului
- rezumate și recapitulări de sesiune
- istoricul complet al celor mai recente două scene
Asta este tot ce are nevoie Story Director pentru a lua decizii de intrigă interesante și consecvente. Sunt multe date, dar cache-ul KV menține costurile gestionabile.
Scene Director vede:
- fișiere parțiale de campanie fără notițele GM
- versiunea publică a fișei personajului jucător, care omite orice secrete, dar include în continuare aspectul fizic și reputația publică, lucrurile pe care un NPC obișnuit le-ar ști în mod rezonabil
- rezumate ale ultimelor scene în care NPC-urile au fost efectiv prezenți
- detalii despre locație
- ultimele amintiri pe care fiecare NPC le-ar putea avea
- sinopsa de la Story Director
Aceasta este o vedere deliberat redusă. Scene Director are tot ce are nevoie pentru a rula scena și nimic din ce n-ar trebui să aibă.
Două fișe de personaj
Distincția dintre fișa publică și cea completă a personajului jucător este cheia. Story Director trebuie să cunoască detaliile complete și toate secretele pentru a produce povestea. Dar Scene Director nu ar trebui să cunoască acele detalii. Tot are nevoie să știe cine este personajul jucător fizic, cum arată, reputația sa publică, lucrurile pe care orice NPC le-ar percepe în mod rezonabil doar fiind în preajma lui. Menținerea unei fișe publice separate înseamnă că Scene Director are întotdeauna acel context fără a avea vreodată nevoie de acces la secrete.
Filtrarea amintirilor pe scenă
Fiecare scenă este etichetată cu ce NPC-uri sunt prezenți. Asta înseamnă că știm exact ce scene recente sunt relevante pentru fiecare NPC și le adăugăm în contextul Scene Director-ului. Presupunerea este că scenele din sesiunea curentă sunt foarte relevante. Pentru amintirile mai vechi, căutarea semantică aduce la suprafață cele care ar putea conta.
Rezultatul este un Scene Director care într-adevăr nu poate ști lucruri pe care personajele din scenă nu le știu. Nu pentru că i s-a spus să nu o facă, ci pentru că acea informație fizic nu este acolo.
Rulez o campanie în care personajul meu este o femeie umană care trebuie să se îmbrace ca bărbat pentru a-și asigura titlul familiei ca nobilime minoră, din cauza legilor de moștenire. Este o campanie de comedie ușoară și prezintă câteva scenarii comice care vin din acea confuzie de gen.
Fără acest sistem în funcțiune, în general nu există nicio modalitate de a surprinde NPC-urile. Toți se comportă de parcă bănuiesc ceva. Poate nu direct, dar modul în care îți vorbesc are întotdeauna această notă de a ști. Este greu de descris, dar o poți simți. Tensiunea dramatică a unei identități secrete pur și simplu nu există.
Dar cu acest sistem în funcțiune, NPC-urile o joacă complet pe bune. Habar n-au. Iar scenele în care marea dezvăluire se întâmplă chiar au impact, pentru că până în acel punct nu există absolut nicio aluzie la asta. Comedia funcționează pentru că publicul, NPC-urile, chiar nu o văd venind.
Există un caz limită. Pentru că Scene Director nu știe secretul exact, ocazional face detalii anatomic incorecte. Acest lucru este greu de evitat, deoarece Scene Director lucrează dintr-o fișă publică de personaj care nu include acele detalii. Soluția ar fi adăugarea unui al treilea pas: Story Director revizuiește scena generată înainte de a ieși, pentru a prinde orice discrepanțe de acest fel. Asta adaugă cost și latență, așa că este pe foaia de parcurs, dar nu e încă implementat.
Un lucru care m-a surprins: când un secret este dezvăluit în joc, se propagă natural. Scene Director păstrează scenele generate anterior, deci odată ce un NPC află ceva într-o scenă, asta devine parte din contextul său pentru tura următoare. La sfârșitul scenelor, acele scene formează amintiri pentru NPC. La sfârșitul sesiunilor, fișele NPC-urilor sunt actualizate. Ambele înseamnă că cunoașterea unui NPC despre un secret este înregistrată, iar povestea poate continua cu acel NPC acum într-adevăr la curent.
Compromisul
Această abordare nu este gratuită. Costul crește, deși nu chiar dublu, deoarece contextul Scene Director-ului este relativ ușor. Cache-ul de prompt ajută, de asemenea, semnificativ. Pe măsură ce scena se desfășoară, ture noi sunt adăugate la sfârșitul contextului, ceea ce înseamnă că 90% din prompt poate veni din cache, mai degrabă decât regenerat proaspăt de fiecare dată.
În prezent, este activat pentru toate campaniile. Schimbările arhitecturale sunt suficient de semnificative încât nu are sens să oferim o cale care ocolește această configurare. Pentru majoritatea campaniilor, compromisul merită, chiar dacă povestea ta nu are secrete majore, pentru că consistența NPC-urilor contează oricum.
Ce deblochează asta: Game Director
Pipeline-ul în două etape demonstrează ceva util: împărțirea sarcinilor între AI-uri mai specializate, cu contexte optimizate, oferă rezultate mai bune decât un AI care face totul. Asta duce la o a treia etapă naturală.
O numesc Game Director. Treaba sa este să gestioneze mecanicile TTRPG: aruncări de zaruri, teste de abilitate, urmărirea statusurilor. Contextul său poate fi optimizat diferit față de celelalte, deoarece îi pasă mai puțin de istoria narativă și mai mult de regulile și starea jocului.
Adăugarea unui Game Director are un beneficiu neașteptat. Deoarece rulează la fiecare tură în caz că jucătorul încearcă ceva care justifică un test de abilitate, poate decide, de asemenea, dacă inputul jucătorului este o continuare a ultimei scene sau ceva nou. Dacă jucătorul doar vorbește cu un NPC fără a muta intriga, Game Director poate sări complet peste Story Director și să lase Scene Director să continue scena singur. Scene Director are fișele NPC-urilor și poate face căutări de memorie, deci poate continua dialogul astfel fără overhead-ul unui apel complet Story Director.
Aceasta este direcția în care se îndreaptă arhitectura: un pipeline în trei etape care devine progresiv mai specializat, cu optimizări de economisire a costurilor integrate la fiecare nivel.
Stage Whisper este construit pentru oameni care vor să joace TTRPG-uri solo cu profunzimea și consistența unei campanii de lungă durată. Sistemul de memorie, inclusiv această arhitectură de izolare a contextului, este ceea ce face asta posibil. Începe sau alătură-te Discord-ului nostru pentru a vedea cum funcționează în practică.
Pentru mai multe despre sistemul de memorie Stage Whisper, vezi Partea 1: Consistența narativă și Partea 3: Visarea NPC-urilor.