Hvordan Stage Whisper løser problemet med 'allvitende biroller': Kontekstisoleringsarkitektur

Biroller som kan sitere noe karakteren min sa for tre økter siden, var ganske kult å se. Hukommelsessystemet fungerte. Biroller refererte til tidligere hendelser, siterte ting jeg sa. MEN, det startet også et annet problem: biroller ble allvitende.

Her er et utdrag fra en nylig økt, den relevante delen er uthevet:

«Så,» sier hun, stemmen bærer lett over løvraslingen, «hva er den virkelige grunnen til at du kom for å finne meg? Nysgjerrighet, eller prøver du bare å unngå å pakke ut resten av det kaotiske skrivebordet ditt

Det refererte til noe som skjedde i en helt annen scene som denne karakteren ikke var en del av. Karakteren skulle ikke ha hatt noen måte å vite dette på.

Små inkonsekvenser som dette er innlevelsesbrytende. Men i andre tilfeller kan det være spillødeleggende. For eksempel har jeg en kampanje der karakteren min er en hemmelig vampyr som navigerer en verden av intetanende mennesker. Biroller begynte uformelt å antyde at de visste hemmeligheten min, noe som plutselig gjorde det veldig vanskelig for meg å komme gjennom dagen uten å bli mistenkt. Eller i andre eksempler: hvis jeg stjal en gjenstand under et innbrudd, og en urelatert karakter kom med mistenkelige kommentarer.

AI-en bestemte seg i utgangspunktet for å bruke alle hemmeligheter tilgjengelig i konteksten for dramatisk effekt, noe som egentlig bare burde skje svært sjelden av plottmessige årsaker.

Så hvorfor kan jeg ikke bare fortelle AI-en å ikke gjøre dette?

Problemet er at du prøver å oppnå et negativt. «Ikke bruk denne informasjonen.» Det er en fundamentalt annerledes og mye vanskeligere oppgave enn det positive tilfellet: bruk informasjonen som er der. For å trene en modell til å ignorere relevant kontekst, ville du trenge tusenvis av eksempler på situasjoner der informasjonen var tydelig tilgjengelig, men AI-en bevisst ikke brukte den. Det er nesten antitesen av hva en AI er designet for å gjøre. For de fleste oppgaver ville det å ignorere nyttig kontekst være å mislykkes i jobben.

En modell kunne muligens trenes med flere eksempler på å ikke handle på hemmeligheter. Men narrativt og rollespill har ikke vært et stort fokus for modellskapere så langt, så dette problemet har ikke fått den oppmerksomheten det fortjener.


Jeg innså at jeg måtte fikse dette på den hemmelige vampyrkampanjen. Kampanjen var satt opp slik at karakteren min kunne passere som et vanlig menneske mesteparten av tiden, og hele poenget var å navigere i den spenningen uten å bli tatt. Det ville være et stort narrativt øyeblikk når en birolle fant ut hemmeligheten, for da måtte de overtales til å tie om det.

Det jeg oppdaget, var at stort sett hver potensielle antagonist på en eller annen måte visste det. Selv om jeg ikke hadde avslørt noe. Og det var umiddelbart plottødeleggende. Det føltes som om det hang et stort skilt over hodet mitt som kunngjorde at jeg var en vampyr. Karakteren min var konstant i skadebegrensningsmodus, eller følte at alle karakterer hadde pressmidler mot min.

Jeg eksperimenterte med prompter i lang tid. Til slutt innså jeg at jeg bare måtte ikke inkludere informasjonen i konteksten i det hele tatt.

Løsningen er da kontekstisolering. Hvis AI-en ikke kan la være å bruke alt den ser, så må informasjonen virkelig ikke være der. Dette er oppnåelig i Stage Whisper fordi hver scene og hvert minne allerede er merket med birollene som vises i dem, så vi kan enkelt filtrere for bare å inkludere karakterene som faktisk var der.

Men her er haken. Noen hemmeligheter er store plottdrivere. Du kan ikke bare slette dem helt, fordi historien fortsatt må ta hensyn til dem. Enten det er et innbrudd, eller en hemmelig vampyr, de hemmelighetene er kjernen i narrativet, og det ville ikke vært den samme historien uten dem.

Så vi måtte dele tekstgenereringen i to.

Den første delen kaller jeg Story Director. Den styrer den overordnede historien: plottet, de narrative elementene. Den har alle hemmelighetene, og kan bestemme hvordan den best kan spinne historien gitt disse hemmelighetene. Den forstår helhetsbildet, inkludert tingene ingen karakter burde vite ennå.

Den andre delen kaller jeg Scene Director. Den «spiller ut» scenen som er gitt den av Story Director. Den har tilgang til alle relevante birolleminner og personligheter, så den har nok informasjon til å spille alle birollene og gi litt fortellertekst, men den vet faktisk ikke hemmelighetene.

Noe informasjon må overføres fra den ene til den andre, slik at de kan jobbe på samme historie uten å jobbe mot hverandre.


Story Director produserer et sammendrag som forteller Scene Director alt den trenger å vite. Det ser omtrent slik ut:

<synopsis>
  Elian vender tilbake til rom 314 med Maeve, de kjente personvernsbarrierene gir et kort pusterom fra oppmerksomheten samlet under deres spektakulære oppvisning. Merker Maeves behov for å studere etter en uvanlig dag, bestemmer Elian seg for å forlate rommet for litt ensom utforskning
  <npc_list>maeve-corwin</npc_list>
  <location>room-314</location>
  <new_scene/>
</synopsis>

Dette forteller Scene Director hva som foregår i scenen, hvor den er, hvem som er i den, og om det er en ny scene. Spillerfigurens tilstedeværelse antas. Story Director kan også valgfritt sende ut av-karakter-snakk til spilleren, og lage detaljerte ytelsesnotater for egen fremtidig bruk.

De to direktørene ser ikke den samme konteksten. Her er splitten:

Story Director ser:

Dette er alt Story Director trenger for å ta interessante, konsistente plottbeslutninger. Det er mye data, men KV-bufferen holder kostnadene overkommelige.

Scene Director ser:

Dette er en bevisst redusert visning. Scene Director har alt den trenger for å kjøre scenen, og ingenting den ikke burde ha.

To karakterark

Skillet mellom offentlig og fullt spillerfigurark er nøkkelen. Story Director trenger å vite de fullstendige detaljene og alle hemmeligheter for å produsere historien. Men Scene Director bør ikke vite disse detaljene. Den trenger fortsatt å vite hvem spillerfiguren er fysisk, hvordan de ser ut, deres offentlige rykte, tingene en birolle rimeligvis ville plukke opp bare fra å være rundt dem. Å opprettholde et separat offentlig ark betyr at Scene Director alltid har den konteksten uten noen gang å trenge tilgang til hemmelighetene.

Filtrering av minner etter scene

Hver scene er merket med hvilke biroller som er til stede. Dette betyr at vi vet nøyaktig hvilke nylige scener som er relevante for hver birolle, og vi legger dem til Scene Director sin kontekst. Antagelsen er at scener innenfor den nåværende økten er svært relevante. For eldre minner, overflater semantisk søk de som måtte bety noe.

Resultatet er en Scene Director som faktisk ikke kan vite ting karakterene i scenen ikke vet. Ikke fordi den ble fortalt å ikke gjøre det, men fordi den informasjonen fysisk ikke er der.


Jeg har kjørt en kampanje der karakteren min er en menneskelig kvinne som må kle seg som en fyr for å sikre familiens tittel som mindre adel, på grunn av arvelovene. Det er en lettbent komediekampanje, og den har noen komediescenarier som kommer fra den kjønnsforvirringen.

Uten dette systemet på plass er det generelt ingen måte å overraske biroller på. De oppfører seg alle som om de mistenker noe. Kanskje ikke direkte, men måten de snakker til deg på har alltid denne kanten av å vite. Det er vanskelig å beskrive, men du kan føle det. Den dramatiske spenningen ved en hemmelig identitet er rett og slett ikke der.

Men med dette systemet på plass, spiller birollene det helt rett. De har ingen anelse. Og scenene der den store avsløringen finner sted, treffer virkelig, fordi det frem til det punktet ikke er noen som helst hentydning til det. Komedien fungerer fordi publikum, birollene, faktisk ikke ser det komme.

Det er ett unntakstilfelle. Fordi Scene Director ikke vet den eksakte hemmeligheten, gjør den av og til anatomisk unøyaktige detaljer. Dette er vanskelig å unngå, siden Scene Director jobber fra et offentlig karakterark som ikke inkluderer disse detaljene. Løsningen ville være å legge til et tredje steg: Story Director gjennomgår den genererte scenen før den sendes ut, for å fange opp eventuelle slike avvik. Det legger til kostnad og ventetid, så det er på veikartet, men ikke implementert ennå.

En ting som overrasket meg: når en hemmelighet blir avslørt i spillet, sprer den seg naturlig. Scene Director har de tidligere genererte scenene, så når en birolle lærer noe i en scene, blir det en del av konteksten deres for neste tur. På slutten av scener blir disse scenene til minner for birollen. På slutten av økter blir birolleark oppdatert. Begge disse betyr at en individuell birolles kunnskap om en hemmelighet blir registrert, og historien kan fortsette med den birollen nå faktisk i kunnskap.


Avveiningen

Denne tilnærmingen er ikke gratis. Kostnadene øker, men ikke helt dobbelt, siden Scene Director sin kontekst er relativt lett. Prompt-bufferen hjelper også betydelig. Etter hvert som scenen utspiller seg, legges nye turer til slutten av konteksten, noe som betyr at 90% av prompten kan komme fra bufferen i stedet for å regenereres fersk hver gang.

For øyeblikket er det aktivert for alle kampanjer. De arkitektoniske endringene er betydelige nok til at det ikke gir mening å tilby en vei som omgår dette oppsettet. For de fleste kampanjer er avveiningen verdt det, selv om historien din ikke har store hemmeligheter, fordi birolle-konsistens betyr noe uansett.

Hva dette låser opp: Game Director

To-stegs rørledningen demonstrerer noe nyttig: å dele oppgaver mellom mer spesialiserte AI-er med optimaliserte kontekster gir bedre resultater enn én AI som gjør alt. Det fører til et naturlig tredje steg.

Jeg kaller det Game Director. Jobben dens er å håndtere TTRPG-mekanikken: terningkast, ferdighetssjekker, statussporing. Konteksten kan optimaliseres annerledes enn de andre, siden den bryr seg mindre om narrativ historie og mer om spilleregler og spilltilstand.

Å legge til en Game Director har en uventet fordel. Siden den kjører hver tur i tilfelle spilleren prøver noe som fortjener en ferdighetssjekk, kan den også bestemme om spillerens innspill er en fortsettelse av den siste scenen eller noe nytt. Hvis spilleren bare chatter med en birolle uten å flytte plottet, kan Game Director hoppe over Story Director helt og la Scene Director fortsette scenen på egen hånd. Scene Director har birollearkene og kan gjøre minnesøk, så den kan fortsette slik dialog uten overhead av et fullt Story Director-kall.

Dette er retningen arkitekturen går: en tre-stegs rørledning som blir gradvis mer spesialisert, med kostnadsbesparende optimaliseringer innebygd på hvert nivå.


Stage Whisper er bygget for folk som vil spille solo-TTRPG med dybden og konsistensen til en langvarig kampanje. Hukommelsessystemet, inkludert denne kontekstisoleringsarkitekturen, er det som gjør det mulig. Kom i gang eller bli med på Discord for å se hvordan det fungerer i praksis.

For mer om Stage Whisper sitt hukommelsessystem, se Del 1: Narrativ konsistens og Del 3: Birolledrømming.