Como o Stage Whisper Resolve o Problema do 'NPC Omnisciente': Arquitetura de Isolamento de Contexto

NPCs que podem citar algo que a minha personagem disse três sessões antes foi bastante fixe de ver. O sistema de memória estava a funcionar. Os NPCs estavam a referenciar eventos passados, a citar coisas que eu disse. MAS, também iniciou um problema diferente: os NPCs começaram a ficar omniscientes.

Aqui está um excerto de uma sessão recente, a parte relevante está destacada:

"Então, ela diz, a sua voz transportando-se facilmente sobre o farfalhar das folhas, qual é a verdadeira razão pela qual me vieste procurar? Curiosidade, ou estás apenas a tentar evitar desempacotar o resto dessa secretária caótica tua?"

Isso estava a referenciar algo que aconteceu numa cena completamente diferente em que esta personagem não estava presente. A personagem não deveria ter forma de saber.

Pequenas inconsistências como esta quebram a imersão. Mas noutros casos, pode quebrar o jogo. Por exemplo, tenho uma campanha onde a minha personagem é uma vampira secreta a navegar um mundo de humanos desprevenidos. Os NPCs começaram a insinuar casualmente que sabiam o meu segredo, o que de repente tornou muito difícil para mim passar o dia sem ser suspeita. Ou noutros exemplos, se eu roubei um artefacto durante um assalto, e depois uma personagem não relacionada faz comentários suspeitos.

A IA basicamente decidiu usar todos os segredos disponíveis no contexto para efeito dramático, o que realmente só deveria acontecer muito ocasionalmente por razões de enredo.

Então, porque é que não posso simplesmente dizer à IA para não fazer isto?

O problema é que estás a tentar alcançar um negativo. "Não uses esta informação." Isso é uma tarefa fundamentalmente diferente e muito mais difícil do que o caso positivo: usa a informação que está lá. Para treinar um modelo a ignorar contexto relevante, precisarias de milhares de exemplos de situações onde a informação estava claramente disponível mas o output deliberadamente não a usou. Isso é quase a antítese do que uma IA foi concebida 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 roleplay não têm sido um grande foco para os criadores de modelos até agora, por isso este problema não recebeu a atenção que merece.


Percebi que tinha de resolver isto naquela campanha de vampira secreta. A campanha estava configurada para que a minha personagem pudesse passar por uma humana normal na maior parte do tempo, e o objetivo era navegar essa tensão sem ser apanhada. Seria um grande momento narrativo quando qualquer NPC descobrisse o segredo, porque então precisariam de ser persuadidos a manter silêncio sobre isso.

O que descobri foi que praticamente todos os antagonistas potenciais sabiam de alguma forma. Mesmo que eu não tivesse revelado nada. E isso foi imediatamente quebrador de enredo. Parecia que havia um grande letreiro sobre a minha cabeça a anunciar que eu era uma vampira. A minha personagem estava constantemente a fazer controlo de danos, ou a sentir que cada personagem tinha vantagem sobre a minha.

Experimentei com prompts durante muito tempo. Eventualmente percebi que teria de simplesmente não incluir a informação no contexto de todo.

A solução, então, é o isolamento de contexto. Se a IA não consegue evitar usar tudo o que vê, então a informação tem genuinamente de não estar lá. Isto é alcançável no Stage Whisper porque cada cena e memória já está etiquetada com os NPCs que nela aparecem, por isso podemos facilmente filtrar para incluir apenas as personagens que realmente estavam lá.

Mas aqui está o senão. Alguns segredos são motores principais do enredo. Não podes simplesmente apagá-los totalmente, porque a história ainda precisa de os ter em conta. Quer seja um assalto, ou uma vampira secreta, esses segredos são centrais para a narrativa, e não seria a mesma história sem eles.

Por isso tivemos de dividir a nossa geração de texto em duas.

A primeira parte chamo de Diretor de História. Ele dirige a história geral: o enredo, as batidas narrativas. Tem todos os segredos, e pode decidir a melhor forma de desenvolver a história dados esses segredos. Compreende o quadro completo, incluindo as coisas que nenhuma personagem deveria saber ainda.

A segunda parte chamo de Diretor de Cena. Ele "representa" a cena que lhe foi entregue pelo Diretor de História. Tem acesso a todas as memórias e personalidades relevantes dos NPCs, por isso tem informação suficiente para interpretar todos os NPCs e fornecer alguma narração intersticial, mas genuinamente não sabe os segredos.

Alguma informação precisa de passar de um para o outro, para que possam trabalhar na mesma história sem trabalhar um contra o outro.


O Diretor de História produz uma sinopse que diz ao Diretor de Cena tudo o que ele precisa de saber. Tem este aspeto:

<synopsis>
  Elian regressa ao Quarto 314 com Maeve, as proteções de privacidade familiares oferecendo um breve descanso da atenção reunida durante a sua exibição espetacular. Sentindo a necessidade de Maeve de estudar após um dia incomum, Elian decide deixar o quarto para alguma exploração solitária
  <npc_list>maeve-corwin</npc_list>
  <location>room-314</location>
  <new_scene/>
</synopsis>

Isto diz ao Diretor de Cena o que se passa na cena, onde é, quem está nela, e se é uma nova cena. A presença da personagem do jogador é assumida. O Diretor de História também pode opcionalmente emitir conversa fora da personagem para o jogador, e fazer notas de desempenho detalhadas para seu próprio uso futuro.

Os dois diretores não veem o mesmo contexto. Aqui está a divisão:

O Diretor de História vê:

Isto é tudo o que o Diretor de História precisa para tomar decisões de enredo interessantes e consistentes. É muita informação, mas a cache KV mantém os custos geríveis.

O Diretor de Cena vê:

Esta é uma visão deliberadamente reduzida. O Diretor de Cena tem tudo o que precisa para gerir a cena, e nada que não deveria ter.

Duas fichas de personagem

A distinção entre ficha de personagem pública e completa é fundamental. O Diretor de História precisa de saber os detalhes completos e todos os segredos para produzir a história. Mas o Diretor de Cena não deve saber esses detalhes. Ele ainda precisa de saber quem é a personagem do jogador fisicamente, como é, a sua reputação pública, as coisas que qualquer NPC razoavelmente captaria apenas por estar perto dela. Manter uma ficha pública separada significa que o Diretor de Cena tem sempre esse contexto sem nunca precisar de aceder aos segredos.

Filtrar memórias por cena

Cada cena é etiquetada com quais NPCs estão presentes. Isto significa que sabemos exatamente quais cenas recentes são relevantes para cada NPC, e adicionamos essas ao contexto do Diretor de Cena. O pressuposto é que as cenas dentro da sessão atual são altamente relevantes. Para memórias mais antigas, a pesquisa semântica revela aquelas que podem interessar.

O resultado é um Diretor de Cena que genuinamente não pode saber coisas que as personagens na cena não sabem. Não porque lhe foi dito para não saber, mas porque essa informação fisicamente não está lá.


Tenho gerido uma campanha onde a minha personagem é uma humana que tem de se vestir como um rapaz para garantir o título da sua família como nobreza menor, devido às leis de herança. É uma campanha de comédia ligeira, e apresenta alguns cenários de comédia que vêm dessa confusão de género.

Sem este sistema em funcionamento, geralmente não há forma de surpreender os NPCs. Todos eles se comportam como se suspeitassem de algo. Talvez não diretamente, mas a forma como te falam tem sempre esta margem de saber. É difícil de descrever, mas sente-se. A tensão dramática de uma identidade secreta simplesmente não está lá.

Mas com este sistema em funcionamento, os NPCs interpretam-no completamente a sério. Eles não fazem ideia. E as cenas onde a grande revelação acontece realmente batem forte, porque até esse ponto não há absolutamente nenhuma alusão a isso. A comédia funciona porque a audiência, os NPCs, genuinamente não a veem chegar.

Há um caso extremo. Como o Diretor de Cena não sabe o segredo exato, ocasionalmente faz detalhes anatomicamente incorretos. Isto é difícil de evitar, já que o Diretor de Cena está a trabalhar a partir de uma ficha de personagem pública que não inclui esses detalhes. A solução seria adicionar um terceiro passo: o Diretor de História revê a cena gerada antes de ela sair, para detetar quaisquer discrepâncias como esta. Isso adiciona custo e latência, por isso está no roadmap mas ainda não implementado.

Uma coisa que me surpreendeu: quando um segredo é revelado no jogo, ele propaga-se naturalmente. O Diretor de Cena guarda as cenas anteriormente geradas, por isso quando um NPC aprende algo numa cena, isso torna-se parte do seu contexto para o próximo turno. No final das cenas, essas cenas formam memórias para o NPC. No final das sessões, as fichas dos NPCs são atualizadas. Ambos significam que o conhecimento individual de um NPC sobre um segredo fica registado, e a história pode continuar com esse NPC agora genuinamente a saber.


O tradeoff

Esta abordagem não é gratuita. O custo aumenta, embora não duplique, já que o contexto do Diretor de Cena é relativamente leve. A cache de prompt também ajuda significativamente. À medida que a cena se desenrola, novos turnos são adicionados ao fim do contexto, o que significa que 90% do prompt pode vir da cache em vez de ser regenerado de fresco a cada vez.

Atualmente está ativo para todas as campanhas. As mudanças arquitetónicas são suficientemente significativas que não faz sentido fornecer um caminho que contorne esta configuração. Para a maioria das campanhas, o tradeoff vale a pena, mesmo que a tua história não tenha grandes segredos, porque a consistência dos NPCs importa de qualquer forma.

O que isto desbloqueia: o Diretor de Jogo

O pipeline de duas etapas demonstra algo útil: dividir tarefas entre IAs mais especializadas com contextos otimizados dá melhores resultados do que uma IA a fazer tudo. Isso está a levar a uma terceira etapa natural.

Chamo-lhe Diretor de Jogo. O seu trabalho é lidar com as mecânicas de TTRPG: lançamentos de dados, testes de perícia, acompanhamento de estado. O seu contexto pode ser otimizado de forma diferente dos outros, já que se preocupa menos com histórico narrativo e mais com regras de jogo e estado de jogo.

Adicionar um Diretor de Jogo tem um benefício inesperado. Como ele corre em todos os turnos caso o jogador tente algo que justifique um teste de perícia, também pode decidir se o input do jogador é uma continuação da última cena ou algo novo. Se o jogador está apenas a conversar com um NPC sem mover o enredo, o Diretor de Jogo pode saltar o Diretor de História totalmente e deixar o Diretor de Cena continuar a cena sozinho. O Diretor de Cena tem as fichas dos NPCs e pode fazer pesquisas de memória, por isso pode continuar o diálogo assim sem a sobrecarga de uma chamada completa do Diretor de História.

Esta é a direção que a arquitetura está a tomar: um pipeline de três etapas que fica progressivamente mais especializado, com otimizações de redução de custos incorporadas em cada camada.


O Stage Whisper é construído para pessoas que querem jogar TTRPGs a 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. Começa ou junta-te ao nosso Discord para ver como funciona na prática.

Para mais sobre o sistema de memória do Stage Whisper, vê a Parte 1: Consistência Narrativa e a Parte 3: Sonhos de NPC.