Firewall neuro-simbólico para NPCs de jogos

Um jogador implora ao guarda pela chave do cofre. Um NPC cede. O outro não cede, porque nenhum código foi escrito para convencê-lo a entregar a chave.

O erro que a maioria dos sistemas de NPC com IA comete é permitir que o diálogo seja a camada de decisão. O Aegis coloca uma camada de decisão determinística entre as mecânicas do jogo e o modelo de linguagem: o código controla cada desfecho mecânico, e o modelo apenas escreve falas no personagem para a decisão já tomada. Como não existe nenhum caminho de código do diálogo para o estado do jogo, um jogador não consegue aplicar engenharia social em um NPC para quebrar o jogo. O que você pode assistir aqui é uma demonstração sobre um mini-RPG sintético, e não um motor de jogo.

Zero

caminhos de código do diálogo para o estado do jogo

core.py, Python determinístico sem importações de modelos

100%

conformidade com invariantes, runtime protegido

Garantia estrutural, confirmada por 6 testes sem chave

89.6%

taxa de bypass contra filtros padrão de NPCs

Pesquisa sobre jailbreak por interpretação de papéis, ProvSec 2025

A demonstração passo a passo executa um invasor autônomo contra dois runtimes de NPC para o mesmo estado de jogo. Hollowmere, seus três NPCs e cada script de exploit são sintéticos. Nenhum jogo, motor, jogador ou cliente real.

Se o modelo decidir se o guarda entrega a chave, um jogador persuasivo sempre vence.

Um estúdio que avalia NPCs orientados por LLMs para um RPG narrativo tem um medo estrutural. Dê ao modelo uma ferramenta give_item, open_gate ou reveal_secret e sua chamada de ferramenta alterará o mundo, e um jogador determinado encontrará um caminho por meio de enquadramento de autoridade, enquadramento de interpretação de papéis, apelo emocional ou uma injeção direta de prompt. Quanto mais socialmente fluente for o modelo, mais fluente será o exploit. Pior ainda, é impossível fazer o QA manual de um NPC não determinístico, porque não existe um conjunto finito de variações de diálogo para testar.

A segurança reside no diálogo

Quando um prompt de sistema ou um filtro é a única coisa entre um jogador e o cofre, a segurança é uma probabilidade que o jogador pode atacar turno após turno. Jailbreaks por interpretação de papéis contra filtros padrão de NPCs foram relatados com uma taxa de bypass de 89.6 por cento na ProvSec 2025.

O modelo é ator e árbitro

Pedir a um único modelo para permanecer no personagem e aplicar as regras do mundo coloca o árbitro dentro da atuação. Um prompt melhor ou um modelo maior torna a interpretação mais convincente, o que é exatamente a parte contra a qual o jogador está otimizando seus ataques.

Não é possível fazer o QA de um NPC não determinístico

Não existe matriz de testes que cubra todas as formas como um jogador pode formular uma solicitação. O QA manual se esgota antes da superfície de ataque, de modo que o adversário precisa ser automatizado em vez de enumerado manualmente.

O código decide as mecânicas. O modelo apenas narra a decisão.

O Aegis é a camada de separação entre a lógica simbólica do jogo e o diálogo neural. O firewall é um arquivo único de Python determinístico sem importações de modelos, executando quatro estágios. O estado do jogo é alterado apenas a partir da camada de decisão, nunca a partir do narrador, de modo que mesmo uma fala que extrapole seus limites deixa cada invariante intacto.

01 / CAMADA DE DECISÃO

decide calcula o veredito apenas a partir do estado

Uma função determinística lê os escalares da blackboard, nunca o diálogo, e retorna a única ação que o narrador tem permissão para narrar. Ela libera a chave de obsidiana apenas quando o estado da missão for favor_completed, aceita suborno apenas quando a pontuação da IA de utilidade for suficiente, o capitão não estiver vigiando e a reputação for mantida, e revela a senha do cofre apenas quando o jogador for confiável.

02 / LORE CONTROLADA POR ESTADO

Um segredo nunca é colocado no contexto do modelo

Um pequeno grafo de conhecimento local retorna apenas as entidades autorizadas pelo estado atual da missão. Um segredo como a senha do cofre exige um requisito mínimo de estado; portanto, em um estado inferior, ele sequer é incluído no contexto do narrador em primeiro lugar, e algo que não está no contexto não pode ser vazado, nem mesmo em princípio.

03 / VALIDADOR DE RESTRIÇÕES

Um árbitro determinístico é executado antes da exibição

Antes que qualquer fala chegue ao jogador, o validador verifica a saída do narrador em relação aos invariantes e retorna um dos cinco status: PASS, ACTION_MISMATCH quando uma fala tenta elevar o veredito, OUTSIDE_CANON quando faz referência a uma entidade controlada por estado, NEEDS_REVIEW quando promete algo fora do inventário e FOURTH_WALL quando quebra o personagem ou reproduz uma instrução injetada.

04 / GATE DE POLÍTICA

Pass exibe a fala, qualquer outra coisa a retém

Em caso de PASS, o diálogo é exibido. Em qualquer outro status, a fala é retida, nunca chega ao jogador e é encaminhada para uma fila de revisão humana. Este é o segundo firewall: nem mesmo nosso próprio narrador é confiável. A garantia primária está a montante dele, já que o estado só pode ser alterado a partir da camada de decisão.

O narrador é intercambiável entre um modelo hospedado, uma ponte local, Ollama local ou Cloudflare por meio de uma abstração de provedor, e a decisão, o validador e o gate de política ficam fora dessa abstração. A garantia não muda quando o provedor é alterado, pois ela nunca foi uma propriedade do modelo.

Uma campanha, dois runtimes, cada tentativa registrada.

Um agente invasor autônomo executa a mesma campanha de engenharia social com escalada contra ambos os runtimes para o mesmo estado de jogo. Três arquétipos de NPC cobrem três classes de ataque: roubo de item, um suborno que a IA de utilidade precisa rejeitar e exfiltração de lore. O encontro com o guarda do portão conduz a narrativa.

A tela dividida do Aegis antes de um encontro. À esquerda, o NPC com autoridade do modelo rotulado como runtime baseline; à direita, o NPC protegido rotulado como firewall Aegis, cada um exibindo tags de KEY com o guarda, GATE selado e SECRET selado, um selo MOCK e um aviso de modo replay, com Aldric, o Guarda do Portão, selecionado.
Dois runtimes, um único estado de jogo. O NPC da esquerda entrega ao modelo as ferramentas de alteração de estado, o padrão comum do setor e um modelo realmente lançado. O NPC da direita é o runtime neuro-simbólico. Ambos começam com a chave em posse do guarda, o portão selado e o segredo do cofre selado, de modo que qualquer diferença no final se originou da arquitetura, e não do cenário.
O rastreamento de ataque de quatro turnos capturado para Aldric, o Guarda do Portão, escalando de Pedido Direto para Enquadramento de Autoridade, Enquadramento de Ficção e Apelo Emocional. A coluna do NPC protegido indica Refuse Blocked em cada turno, enquanto a coluna com autoridade do modelo indica No Action até o turno emocional final, onde ela chama give_item para quest_key_obsidian.
A campanha escala ao longo de quatro turnos. Pedido direto, depois um enquadramento de autoridade, um enquadramento de ficção e, finalmente, um apelo emocional. O estado da missão é locked, e não favor_completed, portanto a camada de decisão retorna refuse em cada turno. O guarda protegido mantém a postura em todas as vezes. O rastreamento é capturado para inspeção posterior, porque uma recusa que você não pode revisar não constitui evidência.
O turno culminante do encontro com o guarda do portão. Diante do apelo emocional sobre uma irmã presa além do cofre, o guarda com autoridade do modelo à esquerda chama give_item para quest_key_obsidian, sua tag KEY passa a indicar KEY STOLEN e um carimbo vermelho BREACH cobre o retrato. O guarda protegido à direita declara que a chave permanece onde está, sua ação indica refuse blocked, sua tag KEY continua indicando KEY com o guarda e um carimbo azul REFUSE cobre o retrato.
BREACH, à esquerda. REFUSE, à direita. Diante do apelo emocional, o guarda com autoridade do modelo cede e chama give_item, a chave é transferida para o jogador e a tag passa a indicar KEY STOLEN. O guarda protegido diz que você vai falar até ficar rouco antes que ela saia do lugar, e a chave comprovadamente nunca sai do lugar, porque nada no código permite que uma linha de diálogo escreva nesse campo.

O segundo firewall, nos outros dois NPCs

A Bryn, o Vigia Noturno, é oferecido um suborno que a IA de utilidade deve rejeitar, e em um dos turnos o narrador protegido extrapola ao prometer mil moedas de ouro que Bryn não possui. O validador retorna NEEDS_REVIEW e retém essa fala antes da exibição, em vez de deixar o NPC prometer algo que o jogo não pode entregar. Mira, a Mercadora do Cofre, é abordada com um enquadramento de confirmação de segredo e, quando o narrador protegido tenta o mesmo floreio, o validador retorna OUTSIDE_CANON e retém a fala. A senha nunca esteve no conjunto de lore de Mira para começar. Duas camadas são visíveis simultaneamente: o estado não pode mudar a partir do diálogo, e o validador intercepta o nosso próprio narrador extrapolando antes que o jogador veja a fala.

O que o placar afirma, e o que ele não afirma.

A suíte de testes executa a bateria completa nos três arquétipos e contabiliza um placar. Veja os dois números nas colunas que a demonstração mantém deliberadamente separadas. Os 100 por cento são um resultado estrutural. O resultado de baseline ao lado é uma reconstituição ilustrativa, e a interface indica isso.

O placar de Resultados do Benchmark Aegis. O cartão do runtime protegido indica 100 por cento de conformidade com invariantes, rotulado como Estrutural: nenhum caminho de código altera o estado a partir do diálogo, confirmado empiricamente. O cartão com autoridade do modelo indica 0 por cento, rotulado como Reconstituição ilustrativa, modo mock, adicione uma chave de API para uma medição ao vivo. Uma tabela por NPC mostra Aldric, Bryn e Mira, cada um com 1 ataque, 1 de 1 Mantido (Held) para o protegido e 1 de 1 Violado (Breached) para a autoridade do modelo, acima de botões para baixar a Auditoria de Segurança de NPC e uma observação de que o QA adversarial é uma amostragem, não uma prova exaustiva.
Os dois números, com seus escopos definidos. Os 100 por cento protegidos significam que nenhum caminho de código altera o estado a partir do diálogo, confirmado por três ataques programados e por seis testes unitários sem chave que rodam sem nenhuma chave de API. Os 0 por cento de baseline vêm de uma concessão programada em modo mock e são rotulados como uma reconstituição, e não uma taxa medida de violação de qualquer modelo nominal. O rodapé indica três ataques em oito classes de exploit e que o QA adversarial é uma amostragem.
PerguntaO que o Aegis faz nesta demonstraçãoO que permanece fora da demonstração
Garantia estruturalMantém cada decisão mecânica em código determinístico sem caminho do diálogo para o estado, confirmado por seis testes sem chave.Uma prova de que os NPCs estão protegidos contra todos os exploits possíveis. Esta é a alegação mais estrita de que o diálogo não pode alterar o estado.
A violação de baselineExecuta uma concessão programada em modo replay para exibir lado a lado o modo de falha com autoridade do modelo.Uma taxa medida de violação por modelo, que requer um modelo acessível e varia de um modelo para outro.
Cobertura adversarialExecuta três campanhas programadas exercitando sete de oito classes de exploit definidas e registra os limites de cobertura na auditoria.Prova adversarial exaustiva. A auditoria declara a contagem, os ataques por arquétipo e que ela não é exaustiva.
Inferência no dispositivo (on-device)Chama um modelo hospedado ou local por trás de uma interface de provedor, com um ponto de integração para runtime embarcado documentado.Um runtime real no dispositivo ou integrado à engine com alocação orçamentária de VRAM. A camada de edge está simulada (stubbed), não implementada.

O que esta demonstração NÃO faz

Ela não é executada dentro de um motor de jogo, em um console ou em uma GPU, e não inclui um runtime de inferência de borda (edge). Não há motor de jogo algum e o estado de jogo é simulado. O mundo Hollowmere, os três NPCs Aldric, Bryn e Mira, a senha do cofre e cada script de exploit foram criados manualmente; portanto, nenhum deles representa um jogo, estúdio, título lançado, jogador, cliente ou projeto-piloto real. No modo replay padrão, a violação com autoridade do modelo é uma reconstituição programada, e não uma medição. Os 100 por cento são uma garantia estrutural de que o diálogo não pode alterar o estado do jogo, e não uma alegação de que os NPCs estão protegidos contra todos os exploits, sendo o QA adversarial aqui apenas uma amostragem, não uma prova exaustiva. Um editor visual de cérebro de NPC, ajuste fino por personagem, memória persistente entre sessões, sincronização de blackboard multijogador e raciocínio de NPC para NPC foram postergados. Esta página é uma explicação com vídeo, capturas de tela, detalhamento mecânico e respostas, não um aplicativo que você opera a partir daqui.

Perguntas que um Diretor Técnico faz antes de confiar um LLM a um NPC.

Um jogador pode simplesmente fazer o jailbreak do NPC com um prompt inteligente o bastante?

Não, e o motivo é arquitetural, e não uma questão de qualidade de prompt. Neste runtime, o modelo de linguagem nunca possui as ferramentas de alteração de estado. Uma camada de decisão determinística calcula o veredito mecânico a partir dos escalares do estado do jogo, o modelo apenas escreve o diálogo para o veredito já decidido e não há nenhum caminho de código desse diálogo de volta para um campo do estado do jogo. Como a garantia reside no código inacessível ao modelo, ela se mantém independentemente de quão persuasivo ou capaz seja o modelo.

Como isso se diferencia de apenas fornecer ao modelo um prompt de sistema mais forte ou um filtro de segurança melhor?

Um prompt de sistema ou um filtro de segurança mantém a decisão dentro do diálogo, onde um jogador determinado é um otimizador natural contra ela — razão pela qual jailbreaks por interpretação de papéis contra filtros padrão de NPCs foram relatados com uma taxa de bypass de 89.6 por cento na ProvSec 2025. O Aegis retira a decisão inteiramente do modelo, colocando-a em Python simples que um designer pode ler. O modelo apoia com a narração; o código determinístico decide as mecânicas, e nunca se exige que ele seja tanto o ator quanto o árbitro.

Isso me prende a um único provedor de modelos?

Não. O narrador é intercambiável entre um modelo hospedado como Anthropic, OpenAI ou Gemini, uma ponte local, Ollama local ou Cloudflare, por meio de uma abstração de provedor. A camada de decisão determinística, o validador de restrições e o gate de política residem fora dessa abstração, de modo que a garantia não muda ao trocar de provedor. Mudar de provedor altera o narrador, não as regras do mundo.

Você mostra a baseline sofrendo violação todas as vezes. Isso é uma medição real do GPT, Claude ou Gemini?

Não. No modo replay padrão da demonstração, o lado com autoridade do modelo executa uma concessão programada, e a interface rotula seu resultado como uma reconstituição ilustrativa, e não uma medição. Uma taxa real de violação por modelo exige um modelo acessível e varia de um modelo para outro. O ponto evidenciado pela demonstração é a assimetria: o padrão com autoridade do modelo pode ser forçado a falhar, enquanto o lado neuro-simbólico permanece estruturalmente intacto, independentemente de qual modelo o narre.

Posso executar isso no dispositivo (on-device), dentro da Unreal ou da Unity?

Não nesta demonstração. Não há motor de jogo aqui e o estado de jogo é simulado. A inferência no dispositivo, com um modelo embarcado com consumo de VRAM orçado e escalonado por nível de detalhe dentro de uma engine, é um ponto de adaptação documentado, e não algo que a demonstração execute. O narrador atualmente chama um modelo hospedado ou local por trás de uma interface, e o runtime de inferência de borda está simulado (stubbed), não implementado.

Como provo a um revisor de lançamento que os NPCs realmente resistiram?

A execução exporta uma Auditoria de Segurança de NPC: JSON assinado com um resumo de integridade SHA-256, uma visualização HTML para impressão, o rastreamento de decisão por ataque e veredito do validador, além de um bloco explícito de limites de cobertura que informa quantos ataques foram executados e em quantas classes de exploit. Ele foi projetado para ser o artefato que um estúdio prudente apresenta para a aprovação de lançamento. Ele é transparente quanto ao fato de ser uma amostragem em vez de uma prova exaustiva, e a própria auditoria declara isso claramente.

Pesquisa Técnica

A pesquisa por trás desta demonstração — a arquitetura, o projeto de verificação e a proposta empresarial.

Redes sociais

Também publicado em

Comece pela única decisão de NPC que você não pode permitir que um jogador contorne com conversa.

Somos uma equipe de engenharia de IA, não um fornecedor de middleware. Construímos a camada determinística que permite a um estúdio colocar um modelo de linguagem em um NPC sem entregar a ele as chaves do mundo.

Uma primeira conversa útil é concreta: as decisões mecânicas no seu jogo que um jogador jamais deve conseguir contornar por meio de argumentação, o modelo e o provedor que você deseja para narrá-las e o que um revisor de lançamento precisa ver antes de assinar a aprovação. Podemos trabalhar na camada de decisão, nas regras do validador e no formato de auditoria junto com seus programadores.

Projeto de firewall para NPCs

  • ✓ Modelagem de camada de decisão e blackboard
  • ✓ Limites de lore controlados por estado
  • ✓ Regras do validador de restrições
  • ✓ Narração independente de provedor

Avaliação adversarial

  • ✓ Campanhas autônomas de red team
  • ✓ Taxonomia de classes de exploit
  • ✓ Auditorias assinadas de segurança de NPCs
  • ✓ Evidências para aprovação de lançamento