Skip to content

volokasse/mj-ia

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 

Repository files navigation

🎲 Projet MJ-IA — Maître du Jeu intelligent local

🧩 Résumé du projet

Le projet consiste à créer une petite application web locale où une intelligence artificielle joue le rôle de Maître du Jeu (MJ) pour des parties de jeu de rôle. L’interface web, construite avec Nuxt 3, permettra aux joueurs d’échanger avec l’IA via un chat en direct et d’afficher des panneaux contenant les personnages, lieux, objets et notes du monde.

Le backend Express gérera :

  • les échanges avec le LLM local exécuté par Ollama,
  • les jets de dés,
  • et la base de données SQLite (gérée via Prisma) pour conserver l’état de la partie.

À la fin du projet, tu disposeras d’un MJ-IA fonctionnel, jouable depuis ton navigateur, capable de générer des scènes cohérentes, de demander des jets de dés, et de maintenir un monde persistant entre les sessions.


⏱ Durée estimée

Étape Temps estimé
Installation & configuration de base 2 – 3 h
Backend (API, dés, JSON strict, LLM) 5 – 7 h
Frontend (chat, panneaux, streaming) 4 – 6 h
Tests, ajustements & polissage 2 – 3 h
Total estimé 12 – 18 heures

🪜 Plan de réalisation

1) Initialiser l’app Nuxt

Nuxt 3 : framework Vue pour créer rapidement un front SSR/SPA, parfait pour un chat avec streaming et une UI modulaire.

1.1 Créer le projet (npx nuxi init mj-front) et installer les dépendances. 1.2 Mettre en place une page unique : zone Chat (gauche) + Panneaux (droite). 1.3 Ajouter un composant ChatInput et un store léger (Pinia ou composables). 1.4 Gérer les variables d’environnement (.env) pour l’URL du backend.


2) Créer l’API backend (Express)

Express : micro-framework HTTP Node.js, simple pour exposer des routes REST et SSE.

2.1 Initialiser mj-back (npm init -y) et installer express, cors, dotenv. 2.2 Créer les routes /health, /chat (SSE), /roll, /state/* (CRUD minimal). 2.3 Activer CORS et logs basiques. 2.4 Structurer le projet (src/server.ts|js, src/routes/*).


3) Base de données locale (SQLite + Prisma)

SQLite : base fichier, zéro config, idéale pour un proto. Prisma : ORM type-safe, migrations et seed rapides.

3.1 Installer prisma et @prisma/client ; npx prisma init (provider = sqlite). 3.2 Définir un schéma minimal : Campaign, Session, Character{data Json}, Location, Item{data Json}, Note, EventLog, Quest{log Json}, PartyInventory{data Json}. 3.3 npx prisma migrate dev + script de seed (jeu “Valmora”). 3.4 Créer des services de lecture/écriture d’état.


4) Installer le LLM local (Ollama)

Ollama : exécute des modèles LLM en local et expose une API compatible OpenAI.

4.1 Installer Ollama (Windows OK). 4.2 Télécharger un modèle : ollama pull qwen2.5:7b-instruct-q4_K_M (ou llama3.1:8b-instruct-q4_K_M). 4.3 Tester en ligne de commande : ollama run qwen2.5:7b-instruct-q4_K_M. 4.4 Configurer un client OpenAI-like dans le backend (http://localhost:11434/v1).


5) Validation stricte (Zod)

Zod : validation de schémas runtime pour s’assurer que les réponses du LLM respectent le contrat JSON.

5.1 Définir le schéma : { narration, dm_actions[], roll_requests[], choices[], next_state_hint }. 5.2 Valider chaque réponse ; en cas d’échec : reprompt “JSON strict uniquement”. 5.3 Journaliser les erreurs et tronquer les sorties trop longues.


6) Prompt système & boucle de tour

(Pas de nouvel outil.)

6.1 Implémenter le prompt système finalisé (MJ concis, JSON-only, PEGI 12). 6.2 Composer state côté backend (résumé + extraits persos/lieux/notes). 6.3 Appeler le LLM, parser/valider, puis streamer la réponse via SSE au front.


7) Moteur de dés côté serveur

(Pas de nouvel outil.)

7.1 Parser XdY±Z et retourner { result, detail } avec seed/log. 7.2 Exécuter roll_requests renvoyés par le LLM et insérer un EventLog. 7.3 Exposer /roll et raccourcis UI (/roll d20+5).


8) État persistant & actions MJ

(Pas de nouvel outil.)

8.1 Appliquer dm_actions validées : add_note, update_character, add_item_to_inventory, add_location, advance_quest. 8.2 Mettre à jour la BDD, puis rafraîchir les panneaux front. 8.3 Garder un EventLog propre (qui, quoi, quand).


9) Streaming côté front (SSE)

SSE (Server-Sent Events) : flux texte unidirectionnel simple pour afficher la narration au fil de l’eau.

9.1 Ouvrir un EventSource sur /chat. 9.2 Construire le texte incrémentalement (buffer + affichage). 9.3 Les boutons choices renvoient des messages structurés au backend.


10) Données de départ (seed)

(Pas de nouvel outil.)

10.1 Importer le JSON “Valmora” (campagne, persos, lieux, notes, quêtes). 10.2 Ajouter une commande npm run seed. 10.3 Vérifier l’affichage initial (panneaux peuplés).


11) Qualité de vie & garde-fous

express-rate-limit : limite les requêtes, utile même en local pour éviter les boucles.

11.1 Installer et configurer express-rate-limit basique. 11.2 Définir maxTokens/stop pour couper les réponses trop longues. 11.3 Filtrer le contenu sensible côté serveur (contrôles simples).


12) (Optionnel) RAG plus tard (Postgres + pgvector)

Postgres + pgvector : même base pour relationnel + recherche sémantique top-k.

12.1 Migrer vers Postgres ; installer pgvector. 12.2 Créer facts(text, tags, embedding vector). 12.3 Pipeline : embed requêteSELECT ... ORDER BY embedding <-> $vec LIMIT k → injecter ces faits dans le prompt.


13) Lancement & scripts

(Pas de nouvel outil.)

13.1 Scripts npm run dev (front/back). 13.2 Fichier .env propre (URL backend, modèle). 13.3 README court avec commandes clés (init, seed, run).


📘 Résultat final attendu : Une application locale complète, composée d’un front Nuxt 3, d’un backend Express, d’une BDD SQLite/Prisma, et d’un LLM local via Ollama, permettant de jouer à un jeu de rôle interactif dirigé par une IA, avec persistance de l’univers et jets de dés automatisés.

About

Creating an IA MJ to play with some D&D campaigns with.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors