Aller au contenu

Playground

Que doit faire le personnage ensuite ?

Que doit faire le personnage ensuite ? Santé basse : il boit une potion ; santé haute : il attaque.

Ce que montre cet exemple. L’IA de jeu regorge de décisions « choisir un coup dans une liste fixe », souvent en if-else. Ici l’état du personnage part à un modèle de décision en une seule question Choice : attaquer, boire une potion, fuir, demander une trêve ou narguer. Vous récupérez une action exécutable telle quelle par la boucle de jeu, plus la probabilité de chaque option.

Entrée et résultat d’exemple (données d’exemple, pas une exécution live). Un garde-frontière sur un pont étroit à 12 % de santé, face à 3 ennemis, 1 potion de soin, aucun allié proche. Résultat : boire une potion, 58 %. Fuir 24 %, trêve 9 %, attaque 7 %, nargue 2 %. Changez seulement la santé à 80 %. Le choix bascule sur attaque 64 %, nargue 18 %, potion 3 %.

Pourquoi les probabilités comptent. À faible santé, la potion gagne à 58 % tandis que la fuite tient 24 %. Échantillonnez cette distribution, ou revenez à une règle scriptée si l’option en tête n’est pas assez confiante — le garde ne se comporte pas toujours pareil.

Quand l’utiliser. Quand l’état tient en peu de champs, les coups sont fixes, et vous voulez une réponse exécutable plutôt qu’un paragraphe de raisonnement. La requête d’exemple utilise Decider (decider-v1.1). Si l’état inclut une capture d’écran, passez à un modèle Clef qui accepte les images.

Questions fréquentes

Les probabilités de cette page sont-elles calculées en direct ?

Non. Ce sont des données d’exemple qui ne changent pas quand vous changez de modèle. Connectez-vous pour exécuter votre propre état de jeu.

Puis-je définir mes propres actions ?

Oui. Le modèle choisit parmi ce que vous listez dans criteria. Le maximum d’options est dans Model info de chaque modèle.

Est-ce assez bon marché pour chaque frame ?

Le coût dépend de la taille de requête et du nombre de questions ; voir Tarifs. Mesurez la latence dans votre jeu avant d’appeler à chaque frame.

Les résultats d’exemple ne changent pas avec le modèle sélectionné.

Requête

state
application/json
{  "npc": "Border guard",  "hp": "12%",  "enemies": 3,  "inventory": {    "healing_potion": 1  },  "terrain": "narrow bridge",  "ally_nearby": false}

Résultats

Données d’exemple
Comparer deux exemples

Ces deux exemples ne diffèrent que d’un détail. Le résultat change avec eux.

Ce qui a changéSanté basse → santé haute

Ces résultats sont des données d’exemple, pas une exécution live. Connectez-vous pour essayer avec votre contenu.
action: attack · Attaquer → potion · Boire une potion
actionchoice
potion · Boire une potion
Confiance par option
Attaquer
7%
Boire une potion
58%
Fuir
24%
Demander une trêve
9%
Provoquer
2%

Copier le code

Définissez SYSTEM_ONE_API_KEY. L’extrait utilise un ID de modèle publié dans le catalogue.

JSON de requête
application/json
{"model":"decider-v1.1","state":{"npc":"Border guard","hp":"12%","enemies":3,"inventory":{"healing_potion":1},"terrain":"narrow bridge","ally_nearby":false},"questions":{"action":{"type":"choice","instructions":"Choose the NPC's next action given the game state.","criteria":{"attack":"Attaquer","potion":"Boire une potion","flee":"Fuir","parley":"Demander une trêve","taunt":"Provoquer"}}}}
cURL · POST /v1/systemone
sh
curl "https://system-one.dev/v1/systemone" \  -H "Authorization: Bearer $SYSTEM_ONE_API_KEY" \  -H 'Content-Type: application/json' \  -H 'Idempotency-Key: saved-operation-id' \  --data '{"model":"decider-v1.1","state":{"npc":"Border guard","hp":"12%","enemies":3,"inventory":{"healing_potion":1},"terrain":"narrow bridge","ally_nearby":false},"questions":{"action":{"type":"choice","instructions":"Choose the NPC'\''s next action given the game state.","criteria":{"attack":"Attaquer","potion":"Boire une potion","flee":"Fuir","parley":"Demander une trêve","taunt":"Provoquer"}}}}'
TypeScript
TypeScript
// npm install @system-one-ai/core@0.8.0 @system-one-ai/adapter-system-one@0.7.0 @system-one-ai/transport-fetch@0.8.0import { createSystemOne, choice, score, booleanQuestion } from '@system-one-ai/core';import { systemOneAdapter } from '@system-one-ai/adapter-system-one';import { createFetchTransport } from '@system-one-ai/transport-fetch';const client = createSystemOne({  baseURL: "https://system-one.dev/v1",  apiKey: process.env.SYSTEM_ONE_API_KEY!,  model: "decider-v1.1",  adapter: systemOneAdapter,  transport: createFetchTransport(),  timeoutMs: 30_000,  maxRetries: 0,});const result = await client.evaluate({  state: {    "npc": "Border guard",    "hp": "12%",    "enemies": 3,    "inventory": {      "healing_potion": 1    },    "terrain": "narrow bridge",    "ally_nearby": false  },  questions: {  action: choice("Choose the NPC's next action given the game state.", {    attack: "Attaquer",    potion: "Boire une potion",    flee: "Fuir",    parley: "Demander une trêve",    taunt: "Provoquer",  }),  },}, { headers: { 'Idempotency-Key': crypto.randomUUID() } });result.answers.action.choiceresult.response.requestId;