Como o Stage Whisper Resolve o Problema do 'NPC Onisciente': Arquitetura de Isolamento de Contexto
NPCs que conseguiam citar algo que meu personagem disse três sessões atrás foi bem legal de ver. O sistema de memória estava funcionando. Os NPCs estavam referenciando eventos passados, citando coisas que eu disse. MAS também começou um problema diferente: NPCs começaram a ficar oniscientes.
Aqui está um trecho de uma sessão recente, a parte relevante está destacada:
"Então," ela diz, sua voz carregando facilmente sobre o farfalhar das folhas, "qual é o verdadeiro motivo de você ter vindo me procurar? Curiosidade, ou você está apenas tentando evitar desempacotar o resto daquela sua mesa caótica?"
Isso estava referenciando algo que aconteceu em uma cena completamente diferente da qual este personagem não fazia parte. O personagem não deveria ter como saber.
Pequenas inconsistências como essa quebram a imersão. Mas em outros casos, podem quebrar o jogo. Por exemplo, tenho uma campanha onde meu personagem é um vampiro secreto navegando um mundo de humanos desavisados. Os NPCs começaram a casualmente insinuar que sabiam do meu segredo, o que de repente tornou muito difícil passar o dia sem ser suspeito. Ou em outros exemplos, se eu roubei um artefato durante um assalto, e então um personagem não relacionado faz comentários suspeitos.
A IA basicamente decidiu usar todos e quaisquer segredos disponíveis no contexto para efeito dramático, o que realmente deveria acontecer apenas muito ocasionalmente por razões de trama.
Então, por que não posso simplesmente dizer à IA para não fazer isso?
O problema é que você está tentando atingir uma negativa. "Não use esta informação." Essa é uma tarefa fundamentalmente diferente e muito mais difícil do que o caso positivo: use a informação que está lá. Para treinar um modelo para ignorar contexto relevante, você precisaria de milhares de exemplos de situações onde a informação estava claramente disponível, mas a saída deliberadamente não a usou. Isso é quase a antítese do que uma IA é projetada para fazer. Para a maioria das tarefas, ignorar contexto útil seria falhar no trabalho.
Concebivelmente, um modelo poderia ser treinado com mais exemplos de não agir sobre segredos. Mas narrativa e RPG não têm sido um grande foco para criadores de modelos até agora, então este problema não recebeu a atenção que merece.
Percebi que precisava consertar isso naquela campanha do vampiro secreto. A campanha foi configurada para que meu personagem pudesse passar como um humano normal na maior parte do tempo, e o objetivo era navegar essa tensão sem ser descoberto. Seria um grande momento narrativo quando qualquer NPC descobrisse o segredo, porque então eles precisariam ser persuadidos a manter silêncio sobre isso.
O que descobri foi que praticamente todo antagonista em potencial de alguma forma sabia. Mesmo eu não tendo revelado nada. E isso era imediatamente quebrador de trama. Parecia que havia uma grande placa sobre minha cabeça anunciando que eu era um vampiro. Meu personagem estava constantemente fazendo controle de danos, ou sentindo que cada personagem tinha vantagem sobre o meu.
Experimentei com prompts por muito tempo. Eventualmente percebi que teria que simplesmente não incluir a informação no contexto.
A solução, então, é o isolamento de contexto. Se a IA não consegue evitar usar tudo que vê, então a informação genuinamente não pode estar lá. Isso é alcançável no Stage Whisper porque cada cena e memória já é marcada com os NPCs que aparecem nela, então podemos facilmente filtrar para incluir apenas os personagens que realmente estavam lá.
Mas aqui está o problema. Alguns segredos são grandes motores de trama. Você não pode simplesmente excluí-los completamente, porque a história ainda precisa dar conta deles. Seja um assalto ou um vampiro secreto, esses segredos são centrais para a narrativa, e não seria a mesma história sem eles.
Então tivemos que dividir nossa geração de texto em duas.
A primeira parte eu chamo de Story Director. Ele dirige a história geral: a trama, as batidas narrativas. Ele tem todos os segredos e pode decidir a melhor forma de conduzir a história dados esses segredos. Ele entende o quadro completo, incluindo as coisas que nenhum personagem deveria saber ainda.
A segunda parte eu chamo de Scene Director. Ele "atua" a cena entregue a ele pelo Story Director. Ele tem acesso a todas as memórias e personalidades relevantes dos NPCs, então tem informação suficiente para interpretar todos os NPCs e fornecer alguma narração intersticial, mas genuinamente não conhece os segredos.
Algumas informações precisam passar de um para o outro, para que possam trabalhar na mesma história sem trabalhar um contra o outro.
O Story Director produz uma sinopse que diz ao Scene Director tudo que ele precisa saber. Ela se parece com isso:
<synopsis>
Elian retorna ao Quarto 314 com Maeve, as familiares proteções de privacidade oferecendo breve descanso da atenção reunida durante sua exibição espetacular. Sentindo a necessidade de Maeve de estudar após um dia incomum, Elian decide deixar seu quarto para alguma exploração solitária
<npc_list>maeve-corwin</npc_list>
<location>room-314</location>
<new_scene/>
</synopsis>
Isso diz ao Scene Director o que está acontecendo na cena, onde é, quem está nela e se é uma nova cena. A presença do personagem do jogador é presumida. O Story Director também pode opcionalmente emitir conversa fora do personagem para o jogador e fazer anotações detalhadas de performance para seu próprio uso futuro.
Os dois diretores não veem o mesmo contexto. Aqui está a divisão:
O Story Director vê:
- arquivos completos da campanha, incluindo anotações do GM, plano de sessão, configuração da campanha e status atual da campanha
- a ficha completa do personagem do jogador, incluindo todos os segredos
- uma lista de todos os NPCs, localizações e lore
- resumos e recaps de sessão
- o histórico completo das duas cenas mais recentes
Isso é tudo que o Story Director precisa para tomar decisões de trama interessantes e consistentes. São muitos dados, mas o cache KV mantém os custos gerenciáveis.
O Scene Director vê:
- arquivos parciais da campanha sem as anotações do GM
- a versão pública da ficha do personagem do jogador, que omite quaisquer segredos, mas ainda inclui aparência física e reputação pública, as coisas que um NPC típico razoavelmente saberia
- resumos das últimas cenas em que os NPCs realmente estavam
- detalhes da localização
- as últimas memórias que cada NPC pode ter
- a sinopse do Story Director
Esta é uma visão deliberadamente reduzida. O Scene Director tem tudo que precisa para conduzir a cena e nada que não deveria ter.
Duas fichas de personagem
A distinção entre ficha pública e completa do personagem do jogador é fundamental. O Story Director precisa saber os detalhes completos e todos os segredos para produzir a história. Mas o Scene Director não deve saber esses detalhes. Ele ainda precisa saber quem é fisicamente o personagem do jogador, sua aparência, reputação pública, as coisas que qualquer NPC razoavelmente perceberia apenas por estar perto deles. Manter uma ficha pública separada significa que o Scene Director sempre tem esse contexto sem nunca precisar acessar os segredos.
Filtrando memórias por cena
Cada cena é marcada com quais NPCs estão presentes. Isso significa que sabemos exatamente quais cenas recentes são relevantes para cada NPC, e as adicionamos ao contexto do Scene Director. A suposição é que cenas dentro da sessão atual são altamente relevantes. Para memórias mais antigas, a busca semântica encontra as que podem importar.
O resultado é um Scene Director que genuinamente não pode saber coisas que os personagens na cena não sabem. Não porque foi instruído a não saber, mas porque essa informação fisicamente não está lá.
Tenho conduzido uma campanha onde meu personagem é uma humana que precisa se vestir como homem para garantir o título de nobreza menor de sua família, devido às leis de herança. É uma campanha de comédia leve, e apresenta alguns cenários cômicos que vêm dessa confusão de gênero.
Sem este sistema em funcionamento, geralmente não há como surpreender NPCs. Todos se comportam como se suspeitassem de algo. Talvez não diretamente, mas a forma como falam com você sempre tem essa ponta de saber. É difícil descrever, mas você pode sentir. A tensão dramática de uma identidade secreta simplesmente não existe.
Mas com este sistema em funcionamento, os NPCs interpretam completamente sem saber. Eles não têm ideia. E as cenas onde a grande revelação acontece realmente impactam, porque até aquele ponto não há absolutamente nenhuma alusão a isso. A comédia funciona porque a audiência, os NPCs, genuinamente não veem chegando.
Há um caso limite. Como o Scene Director não sabe o segredo exato, ocasionalmente produz detalhes anatomicamente incorretos. Isso é difícil de evitar, já que o Scene Director está trabalhando com uma ficha de personagem pública que não inclui esses detalhes. A solução seria adicionar um terceiro passo: o Story Director revisa a cena gerada antes de sair, para capturar quaisquer discrepâncias como essa. Isso adiciona custo e latência, então está no roadmap, mas ainda não implementado.
Uma coisa que me surpreendeu: quando um segredo é revelado no jogo, ele se propaga naturalmente. O Scene Director mantém as cenas geradas anteriormente, então, uma vez que um NPC aprende algo em uma cena, isso se torna parte do contexto dele para o próximo turno. No final das cenas, essas cenas formam memórias para o NPC. No final das sessões, as fichas de NPC são atualizadas. Ambos significam que o conhecimento individual de um NPC sobre um segredo é registrado, e a história pode continuar com aquele NPC agora genuinamente sabendo.
O tradeoff
Esta abordagem não é gratuita. O custo aumenta, embora não chegue a dobrar, já que o contexto do Scene Director é relativamente leve. O cache de prompt também ajuda significativamente. Conforme a cena se desenrola, novos turnos são adicionados ao final do contexto, o que significa que 90% do prompt pode vir do cache em vez de ser regenerado do zero a cada vez.
Atualmente, está habilitado para todas as campanhas. As mudanças arquiteturais são significativas o suficiente para que não faça sentido fornecer um caminho que contorne esta configuração. Para a maioria das campanhas, o tradeoff vale a pena, mesmo que sua história não tenha grandes segredos, porque a consistência de NPC importa de qualquer forma.
O que isso desbloqueia: o Game Director
O pipeline de dois estágios demonstra algo útil: dividir tarefas entre IAs mais especializadas com contextos otimizados dá melhores resultados do que uma IA fazendo tudo. Isso está levando a um terceiro estágio natural.
Eu o chamo de Game Director. Seu trabalho é lidar com as mecânicas de TTRPG: rolagens de dados, testes de perícia, rastreamento de estado. Seu contexto pode ser otimizado de forma diferente dos outros, já que se importa menos com histórico narrativo e mais com regras e estado do jogo.
Adicionar um Game Director tem um benefício inesperado. Como ele é executado em todo turno, caso o jogador tente algo que justifique um teste de perícia, ele também pode decidir se a entrada do jogador é uma continuação da última cena ou algo novo. Se o jogador está apenas conversando com um NPC sem mover a trama, o Game Director pode pular completamente o Story Director e deixar o Scene Director continuar a cena por conta própria. O Scene Director tem as fichas de NPC e pode fazer buscas de memória, então pode conduzir o diálogo assim sem a sobrecarga de uma chamada completa do Story Director.
Esta é a direção que a arquitetura está tomando: um pipeline de três estágios que fica progressivamente mais especializado, com otimizações de economia de custos embutidas em cada camada.
Stage Whisper foi construído para pessoas que querem jogar TTRPGs solo com a profundidade e consistência de uma campanha de longa duração. O sistema de memória, incluindo esta arquitetura de isolamento de contexto, é o que torna isso possível. Comece agora ou entre no nosso Discord para ver como funciona na prática.
Para mais sobre o sistema de memória do Stage Whisper, veja Parte 1: Consistência Narrativa e Parte 3: Sonhos de NPC.