PNJ AI : comment fonctionnent les personnages non-joueurs pilotés par AI (et comment en créer un)
Créez votre propre PNJ AI
Les PNJ AI peuvent parler, se souvenir et réagir. Découvrez comment fonctionnent les PNJ AI, puis créez-en un en une phrase et déposez-le dans un monde 3D explorable.
Un PNJ AI est un personnage non-joueur dont les dialogues et l'intention sont produits par un modèle de langage à l'exécution, tandis que les déplacements et les collisions restent sur un chemin déterministe. L'AI détermine ce que le personnage dit et veut ; le moteur détermine où va le corps. Sur Neta Studio, vous décrivez un personnage en une phrase, l'Agent Sprite Forge génère un composant low-poly, et ce composant se dépose dans un monde 3D explorable construit avec Three.js.
Cette séparation est importante car elle vous indique où se cachent les bugs. Quand un PNJ traverse un mur, le pathfinding est en cause. Quand un PNJ insulte le joueur sans raison, le contrat d'invite est en cause. Cette page traite la seconde catégorie : comment les systèmes de PNJ AI génèrent des répliques, conservent des paramètres de personnalité, se souviennent d'une session, et échouent quand le modèle planifie et que le moteur ne peut pas exécuter.
Réponse rapide : ce qu'est réellement un PNJ AI
Décomposez l'expression. « AI » signifie ici qu'un modèle produit du texte et une intention de haut niveau. « PNJ » désigne un contrôleur de personnage, un collider et une machine à états d'animation. Les deux tournent sur des horloges différentes : le modèle répond en quelques centaines de millisecondes, le contrôleur se met à jour à chaque image à 60 Hz. Ils communiquent par une interface étroite, généralement un petit objet JSON que le contrôleur interroge.
En pratique, l'interface ressemble à ceci : le modèle renvoie {line, intent, target}. Le contrôleur lit l'intention, vérifie si la cible est atteignable sur le navmesh, puis soit joue la réplique avec une animation correspondante, soit substitue une réplique de repli. Si vous fusionnez ces deux couches, vous obtenez des PNJ qui se téléportent, glissent, ou restent immobiles au milieu d'une phrase pendant que le modèle finit de générer.
Donc la définition de travail : un PNJ AI est un PNJ dont la sortie parlée et la sélection de la prochaine action proviennent d'un modèle génératif, borné par un ensemble fixe d'intentions légales que le moteur peut réellement exécuter.
- Couche dialogueAppel au modèle. Latence de 200 à 900 ms. Peut échouer, être limité en débit, ou renvoyer un JSON mal formé.
- Couche intentionUne courte énumération : saluer, suivre, fuir, commercer, attaquer, inactif. Tout ce qui sort de l'énumération est rejeté.
- Couche déplacementPathfinding sur navmesh, collider, mélange d'animations. S'exécute à chaque image. N'appelle pas le modèle.
- Couche mémoireUn magasin clé-valeur des faits que le PNJ est autorisé à rappeler, plafonné par un budget de tokens.
PNJ à règles vs PNJ pilotés par AI
Un PNJ à règles choisit dans une table. Vous rédigez les états, les transitions et les répliques à la main. C'est exact, peu coûteux et reproductible : la même entrée produit toujours la même sortie, ce qui le rend trivial à tester et à déboguer. Le plafond est votre temps d'écriture, et le mode de défaillance est un joueur qui tape quelque chose que vous n'avez pas prévu et reçoit un regard vide.
Un PNJ piloté par AI génère la réplique. Vous rédigez un contrat et un ensemble d'intentions légales, et le modèle remplit l'espace entre eux. Il gère avec grâce les entrées imprévues, mais la même entrée peut produire une sortie différente d'une exécution à l'autre, ce qui casse les tests de relecture naïfs. Le coût évolue avec la longueur de la conversation plutôt qu'avec le nombre de personnages, donc une scène bavarde coûte plus cher qu'une scène silencieuse.
Ni l'un ni l'autre n'est strictement meilleur. La comparaison honnête :
| Dimension | PNJ à règles | PNJ piloté par AI |
|---|---|---|
| Source du comportement | Machine à états et table de répliques rédigées | Sortie du modèle contrainte par une énumération d'intentions |
| Rejouabilité | Identique bit à bit d'une exécution à l'autre | Non déterministe, sauf si vous fixez la graine et la température |
| Forme du coût | Fixe à la construction | Par token à l'exécution, croît avec la longueur de la conversation |
| Débogabilité | Tracez la transition ; le journal est le code | Journalisez séparément l'invite, la réponse brute, l'intention analysée et le repli |
| Mode de défaillance | Réponse vide ou mauvaise branche | Réplique hors contrat, pic de latence, ou JSON non analysable |
| Effort de rédaction | Élevé par réplique, faible par état | Faible par réplique, élevé par contrainte |
Dialogue dynamique
Un arbre de dialogue est un graphe avec des nœuds rédigés. L'auteur contrôle chaque mot, c'est pourquoi les quêtes, les contrats et les révélations cruciales pour l'intrigue utilisent encore des arbres. L'entrée du joueur est associée à l'une des N branches ; tout ce qui sort de ces N branches n'est pas géré. Les arbres évoluent linéairement avec le contenu : doubler la conversation double l'écriture.
Le dialogue généré est différent par nature, pas seulement en volume. Le modèle lit la phrase réelle du joueur, plus le contexte que vous injectez — nom du PNJ, objectif actuel, trois derniers échanges — et écrit une réponse qui convient. Il peut gérer une question que vous n'avez jamais anticipée. Il peut aussi gérer cette question mal, avec assurance et dans le personnage, ce qui est pire qu'un échec.
Là où un arbre reste correct : toute réplique qui porte un état dont le reste du jeu dépend. « Le code de la porte est 4417. » Ne laissez pas un modèle inventer cela. Le schéma fiable est hybride — l'arbre possède les faits et les points de branchement, le modèle possède la formulation et les bavardages. Dans Neta Studio, quand vous créez un PNJ AI à partir d'une description, le composant généré expose une énumération d'intentions ; les faits que vous voulez garantir vont dans le composant sous forme de chaînes fixes, pas dans l'invite sous forme d'instructions.
Une forme d'invite qui survit au contact des joueurs
Gardez l'invite système sous environ 300 tokens. Rôle, ton, trois contraintes et le schéma de sortie. Tout le reste — inventaire, état de quête, faits du monde — va dans un bloc de contexte séparé que le moteur injecte à chaque tour. Si vous mettez tout le monde dans l'invite système, la latence grimpe et le modèle commence à ignorer les instructions suivantes.
Demandez toujours une sortie structurée. Demandez un objet JSON avec line et intent. Analysez-le. Si l'analyse échoue, abandonnez la réplique et jouez le repli. Ne rendez jamais le texte brut du modèle directement dans la boîte de dialogue sans vérification de longueur ; une génération emportée produira un monologue de 400 mots qui casse votre interface.
Personnalité procédurale
Une personnalité n'est pas un paragraphe de biographie. Un paragraphe de biographie est une donnée d'entraînement pour l'imagination du modèle, et il se dégrade avec la longueur : au-delà de quelques centaines de mots, le modèle commence à le traiter comme du décor et dérive vers une serviabilité générique. Traitez plutôt la personnalité comme trois ou quatre paramètres, dont chacun modifie un comportement observable.
L'objectif est ce que le PNJ veut maintenant. Le ton est sa manière de parler : sec, formel, moqueur. La contrainte est ce qu'il ne fera pas : ne mentira pas, ne parlera pas de la guerre, ne commercera pas. Ces trois tiennent sur une seule ligne d'invite et sont testables individuellement. N'ajoutez un quatrième que si vous pouvez décrire ce qui change quand vous le faites varier.
Dans Neta Studio, l'Agent Sprite Forge accepte une description et renvoie un composant low-poly avec ces paramètres exposés comme champs sur le composant. Vous pouvez modifier l'objectif sans toucher à l'invite du modèle, et vous pouvez cloner un composant et ne changer que le ton pour obtenir un second PNJ. Deux PNJ avec le même maillage et un ton différent se lisent comme des personnages différents dans une scène, ce qui coûte moins cher que de rédiger deux sprites.
- ObjectifUne phrase, au présent. « Amener le joueur à quitter le sanctuaire. »
- TonDeux à quatre adjectifs. « Sec, archaïque, impatient. »
- ContrainteRègles négatives. « Ne nomme jamais la rivière. N'accepte jamais d'objet. »
- Limite de connaissanceCe que le PNJ peut référencer. Tout ce qui en sort doit produire une esquive en personnage, pas une invention.
Comportement adaptatif
La mémoire au sein d'une session est peu coûteuse et efficace. Vous gardez un tampon glissant des N derniers échanges, plus un petit magasin clé-valeur des faits qui ont été dits au PNJ. Un N de 8 à 12 fonctionne pour la plupart des scènes ; au-delà, l'invite grandit plus vite que la patience du joueur, et les tours plus anciens cessent de toute façon d'influencer la sortie.
Ce qu'un PNJ peut retenir de manière fiable : le nom du joueur tel qu'énoncé, si un objet précis a été donné ou refusé, si une interaction précédente s'est terminée par de l'hostilité, et le dernier objectif énoncé. Ce qu'il ne peut pas retenir de manière fiable : la formulation exacte d'il y a vingt tours, les faits qui n'ont jamais été écrits dans le magasin clé-valeur, et tout ce qui traverse un rechargement de page, sauf si vous le persistez. Une mémoire qui ne vit que dans l'invite est une mémoire qui s'évapore.
La réaction est la seconde moitié. Le moteur surveille les changements d'état — baisse de vie, transfert d'objet, franchissement d'un seuil de distance — et pousse un événement dans le contexte du PNJ. Le modèle choisit alors une intention dans l'énumération. C'est pourquoi l'énumération d'intentions existe : le modèle propose, le moteur dispose. Un PNJ qui « décide » d'attaquer doit tout de même passer le test d'atteignabilité. S'il échoue, il joue une réplique d'avertissement et reste sur place.
Ce que la persistance coûte réellement
Écrire la mémoire dans le stockage, c'est une ligne de code et une décision de schéma. Gardez les clés courtes et plates : playerName, gaveItem, hostility. Les objets imbriqués gonflent et pourrissent. Versionnez le schéma dès le départ ; un renommage ultérieur fera silencieusement disparaître les anciennes sauvegardes, sauf si vous écrivez une migration.
D'une session à l'autre, n'essayez pas de rejouer tout l'historique de la conversation dans le contexte. C'est coûteux et cela rend le PNJ répétitif. Persistez le résumé — trois à cinq faits — et repartez à zéro avec la transcription.
Créez un PNJ AI en une phrase
Le pipeline dans Neta Studio est délibérément court. Vous écrivez une description. L'Agent Sprite Forge génère un composant low-poly avec un maillage, une palette et un mode de comportement. Vous le déposez dans une scène explorable construite avec le 3D Game Builder, et il apparaît avec collision, pathfinding et un point d'accroche de dialogue déjà câblés.
Une description qui fonctionne est précise sur le rôle, le ton et une contrainte. « Un gardien de phare méfiant, sec et du Nord, qui ne parlera pas de l'épave. » Cela produit un composant dont l'invite inclut exactement ces trois paramètres. Quelque chose comme « un personnage cool » produit un résultat générique, parce qu'il n'y a rien à contraindre.
Vous pouvez tester le résultat à deux endroits : The Cyclops' Island, qui est la scène explorable longue, et Mini World, plus petite et plus rapide pour itérer. Les deux tournent dans le navigateur avec Three.js. Déposez le composant, approchez-vous, tapez une réplique et lisez la réponse. Si le ton ne va pas, modifiez le champ de ton sur le composant plutôt que de réécrire l'invite depuis zéro.
01
Écrivez une phrase : rôle, ton, une contrainte.
02
Passez-la dans l'Agent Sprite Forge pour générer un composant low-poly.
03
Ouvrez Mini World ou The Cyclops' Island dans le 3D Game Builder.
04
Déposez le composant dans la scène ; il apparaît avec collision et un point d'accroche de dialogue.
05
Approchez-vous et tapez une réplique. Lisez la réponse et l'intention qu'il a sélectionnée.
06
Modifiez le ton ou la contrainte sur le composant, pas l'invite système.
07
Testez le chemin de défaillance : tapez quelque chose hors sujet et confirmez que le repli se déclenche.
08
Déplacez le composant vers la scène plus grande une fois qu'il se comporte bien.
Ce que les PNJ AI ne savent toujours pas faire
La planification à long terme ne fonctionne pas. Un modèle à qui l'on demande de planifier trente étapes à travers une scène produira un plan plausible puis perdra le fil dès la sixième étape, car rien ne maintient l'état entre les étapes hormis l'invite, et l'invite devient plus longue et plus bruitée. Si vous avez besoin d'une quête à plusieurs étapes, rédigez les étapes et laissez le modèle remplir les dialogues à l'intérieur de chaque étape. Ne lui demandez pas de tenir l'arc.
Les objectifs vraiment ouverts ne fonctionnent pas non plus. « Fais ce que tu veux » produit soit une paralysie, soit une boucle de serviabilité générique, car le modèle n'a aucun signal de ce qui compte comme un progrès. Un objectif n'est utilisable que si le moteur peut vérifier s'il a été satisfait. Si vous ne pouvez pas écrire cette vérification, vous n'avez pas un objectif, vous avez une humeur.
Le contrôle des coûts est la vraie lacune. Le coût par tour est faible ; la défaillance réside dans la discussion qui ne finit jamais. Un joueur qui continue de parler continue de générer de la facturation. Vous avez besoin d'un plafond strict du nombre de tours par interaction, d'un plafond de tokens de contexte et d'un chemin de dégradation — après le plafond, le PNJ passe à des réponses plus courtes et préfabriquées. Sans ces trois éléments, un seul testeur curieux peut brûler plus de budget que tout le reste de votre scène réuni.
Et les plus petites défaillances : une latence au-dessus d'environ 1,5 seconde est perçue comme un jeu cassé, pas comme un personnage réfléchi. Le non-déterminisme casse les tests de relecture, sauf si vous fixez la graine et la température. Et toute réplique générée peut contredire quelque chose que l'arbre a déjà établi, c'est pourquoi les faits restent dans l'arbre.
- Horizon de planificationFiable sur 1 à 2 étapes. Se dégrade fortement au-delà.
- Vérification de l'objectifDoit être vérifiable par le moteur. Sinon l'objectif est décoratif.
- Plafond de coûtNécessite un plafond de tours par interaction, plus un plafond de tokens, plus un mode de repli.
- Budget de latenceSous 1,5 s pour une sensation conversationnelle ; au-delà, les joueurs supposent un gel.
- DéterminismeNon déterministe par défaut. Fixez la graine et la température si vous testez par relecture.
Entrez dans le monde auquel il appartient
Un sprite est un personnage sans endroit où se tenir. La dernière étape est celle que personne d'autre n'offre : prenez la planche que vous venez de créer et placez-la dans un monde où l'on peut se promener — une petite île, une planète, un coin de rue pluvieux. Chaque monde de ce site a été créé à partir d'une seule description écrite et publié comme une page jouable.
FAQ
Les PNJ sont-ils de l'AI ? +
Traditionnellement, non. Un PNJ classique est une machine à états avec des répliques rédigées, et c'est encore la norme dans la plupart des jeux commercialisés. Le terme « PNJ AI » désigne précisément les personnages dont le dialogue ou la sélection d'intention est produit par un modèle à l'exécution plutôt que choisi dans une table.
Qu'est-ce qu'un PNJ AI ? +
Un personnage non-joueur dont la sortie parlée et le choix de la prochaine action proviennent d'un modèle génératif, contraint par un ensemble fixe d'intentions que le moteur peut exécuter. Les déplacements, les collisions et les animations restent déterministes ; le modèle ne remplit que le dialogue et propose une intention.
Les PNJ AI peuvent-ils se souvenir des choses ? +
Au sein d'une session, oui — un tampon glissant des 8 à 12 derniers échanges plus un petit magasin clé-valeur de faits couvre la plupart des scènes. Au-delà d'un rechargement de page, seulement si vous persistez les faits dans le stockage. Une mémoire qui ne vit que dans l'invite disparaît quand le contexte disparaît.
Puis-je en créer un gratuitement ? +
L'Agent Sprite Forge et le 3D Game Builder tournent dans le navigateur et vous permettent de générer un composant à partir d'une phrase sans chaîne d'outils locale. Les appels au modèle à l'exécution sont la partie qui porte un coût, et ce coût dépend du modèle vers lequel vous vous dirigez et de la durée de vos conversations.
Ai-je besoin d'un moteur de jeu pour créer un PNJ AI ? +
Pas pour une scène dans le navigateur. Le 3D Game Builder gère le rendu avec Three.js et donne au composant généré collision, pathfinding et un point d'accroche de dialogue, ce qui vous évite l'étape de configuration d'un moteur. Vous n'avez besoin d'un moteur complet que si vous visez une compilation native.
Les PNJ AI fonctionnent-ils dans un navigateur ? +
Oui. L'appel au modèle est une requête réseau et le rendu est du WebGL, donc les deux côtés tournent dans le navigateur. La contrainte pratique est la latence : gardez l'invite système courte et le bloc de contexte séparé, sinon les réponses commencent à arriver après que le joueur a déjà supposé que le jeu s'était figé.
Combien coûte l'exploitation d'un PNJ AI ? +
Cela évolue avec la longueur de la conversation, pas avec le nombre de personnages que vous placez. Un PNJ silencieux est presque gratuit ; un PNJ bavard facture par tour. Le contrôle qui compte est un plafond strict de tours par interaction, plus un plafond de tokens, avec un repli en réponses préfabriquées une fois le plafond atteint.
Retour au 3D Game Builder
Les 31 mondes 3D, jeux et scènes terminés vivent sur une seule page — tous jouables.