JEV API Tutoriel : De Game State aux décisions en temps réel

Découvrez comment concevoir une intégration JEV API avec Game State compact, Legal Actions, des questions saisies, une validation des réponses, des délais et des fallback déterministes.

Seele Editorial TeamUpdated 21 septembre 2026
Game state flowing through a typed decision API, validation step, execution, and fallback.

Une intégration JEV API utile est un petit service de décision autour d'un grand système de jeu. Le jeu possède le monde faisant autorité, le traduit en un état compact et crée les actions désormais légales. JEV évalue cette question limitée ; l'exécuteur testamentaire valide la réponse et exécute l'action.

Le pipeline d'intégration

Game State -> Legal Actions -> Typed Question -> JEV -> Validate -> Execute or Fallback

1. Conception compacte Game State

Envoyez des faits qui pourraient changer la prochaine décision : rôle, santé, menaces visibles, objectif, ressources, temps de recharge, couverture, intention actuelle et version d'état monotone. N'envoyez pas l'intégralité du graphique d'objet du moteur et ne divulguez pas d'informations cachées que NPC ne pourrait pas percevoir.

{ agentId: 'guard-07', healthRatio: 0.42, visibleThreats: 1, ammo: 3, stateVersion: 1842 }

2. Définir Legal Actions

Chaque candidat a besoin d'un nom stable, de paramètres explicites, de conditions préalables et d'un propriétaire d'exécution. Par exemple : takeCover(coverId), attack(targetId) ou holdPosition(locationId). Construisez la liste à partir d’un État faisant autorité ; ne demandez pas à JEV d'inventer des identifiants, des itinéraires, des capacités ou des paramètres.

3. Choisissez la primitive

Utilisez Choice lorsqu'un candidat doit être sélectionné, Score lorsque les candidats ont besoin d'un classement et un jugement limité par oui ou par non lorsque la question est une porte d'entrée, comme s'il faut abandonner un objectif. Utilisez la plus petite primitive qui correspond à la question.

4. Appelez et validez

const result = await jev.decide({ state, legalActions, question: 'Protect the relay' }); const current = buildLegalActions(world, npc); if (!current.some(action => sameAction(action, result))) return fallback(); return executor.run(result);

La méthode exacte SDK peut varier. Les invariants ne comparent pas les versions d'état, ne revalident pas les paramètres et ne rejettent pas les résultats qui ne sont plus légaux. Une réponse peut devenir obsolète pendant qu'une demande est en cours de traitement.

5. Gérer la confiance

Si la réponse inclut une probabilité ou une confiance, utilisez-la comme un signal politique, et non comme une autorisation pour contourner la validation. Une faible confiance peut déclencher une politique locale conservatrice ou préserver l’intention actuelle.

6. Définir la cadence et fallback

Faites appel à des événements significatifs ou à un minuteur tactique limité, pas à chaque image de rendu. Donnez à chaque demande une date limite. En cas d'expiration, conservez une action sûre ou utilisez un fallback spécifique au rôle, comme se mettre à couvert, maintenir la position, suivre ou un arbre de comportement créé. Limite d'une décision en vol par agent, sauf si l'annulation et la commande sont explicites.

7. Tester le contrat

Enregistrer l'état projeté, Legal Actions, la réponse, la latence, la version de l'état, le résultat de la validation, le résultat de l'exécution et la raison fallback. Rejouez une santé faible, pas de munitions, des menaces multiples, des cibles perdues, des actions interrompues et une panne de service. Mesurez séparément la qualité des décisions, la latence, le taux de résultats invalides et le taux fallback.

Concevoir le contrat de demande

Une demande de production doit contenir une version de schéma, une identité d'agent, une version d'état, une projection d'état autorisée, Legal Actions, une primitive de décision, un objectif, une date limite et un ID de corrélation. Gardez l’objectif court et stable. Mettez des contraintes strictes dans le code et les données plutôt que de vous fier à un paragraphe d'instructions.

{ schemaVersion: 'npc-decision-v1', agentId, stateVersion, state, legalActions, primitive: 'choice', deadlineMs, requestId }

Concevoir le contrat de réponse

La réponse doit identifier le candidat sélectionné ou Score, la version de l'état observé, la confiance ou la probabilité lorsqu'elle est disponible, et le statut de fournisseur. Traitez l'explication comme une télémétrie facultative, et non comme un champ d'exécution. L'exécuteur doit être capable de valider l'action sans analyser la prose.

Gestion des erreurs qui maintient le jeu en vie

ConditionAction _
TimeoutIgnorer la réponse et utilisez le fallback
Invalid schémaEnregistrez l'erreur du contrat et échouez fermé
Stale versionRejeter ou revalider par rapport à l'action en cours set
Fournisseur échecDéclenchez une courte pause et continuez localement
Répété échecDésactiver les décisions à distance pour l'agent et la surface télémétrie

Relecture et observabilité

Conserver suffisamment d'informations pour reproduire une décision : état projeté, Legal Actions, schéma de question, réponse du modèle, horodatages, versions d'état, résultat de validation, commande exécutée, résultat et raison fallback. Rédigez les données et les secrets des joueurs. Un harnais de relecture permet aux concepteurs de comparer une nouvelle invite ou un nouveau fournisseur aux mêmes scénarios sans charger l'intégralité du jeu.

Où le API doit s'arrêter

Le API devrait rendre une décision, pas faire muter le monde. Conservez les écritures d'inventaire, les dégâts, l'autorité de mouvement et les changements d'état multijoueur derrière le serveur ou le moteur de jeu. Cette limite rend les tentatives plus sûres et empêche qu'une requête dupliquée applique un effet de jeu deux fois.

Pour un flux complet de NPC, voir JEV tutoriel. Pour la conception de l’espace d’action, lisez JEV Legal Actions. Pour Unity, passez au JEV Unity tutoriel.