Bienvenue dans Arcadia, le simulateur de drame médiéval AI. Ce projet est une expérience d'utilisation des technologies d'IA générative pour créer une expérience narrative, tout en servant également, espérons-le, d'exemple à la communauté plus large des meilleures pratiques sur la façon d'utiliser diverses API d'IA générative.
Notez que la dernière version stable est toujours hébergée sur https://www.generativestorytelling.ai
Arcadia met en avant l'utilisation des LLM pour générer des récits animés, détaillant le drame d'une cour royale de votre choix. Listez les noms de vos amis et de votre famille et regardez-les se trahir, s'empoisonner, se marier et se poignarder pour prendre le contrôle du Royaume !
La narration est fournie par GPT 3.5
L'arrière-plan 3D provient de Blockadelabs
Les portraits des personnages sont générés par Dalle
Les fonctionnalités à venir incluent la narration synthèse vocale, la musique, les effets sonores et la possibilité d'enregistrer, de partager et de rejouer des histoires.
Pour m'assurer que cela puisse servir d'exemple aux gens, j'ai tenté de minimiser les dépendances tierces dans le code et de garder le système de construction aussi simple que possible. Lorsqu'il y a le choix entre faire les choses d'une manière sophistiquée (par exemple Sass, OpenAPI) ou d'une manière simple (répertoire partagé de fichiers TypeScript), la manière la plus simple a été choisie.
Idéalement, si vous êtes familier avec TypeScript, Express et HTML, vous devriez être capable de comprendre la base de code.
Svelte est utilisé sur le front-end, si vous n'êtes pas familier avec Svelte, il s'agit d'un ensemble d'outils très minimal pour effectuer la liaison de données en HTML, les bases peuvent être apprises en moins d'une heure avec le didacticiel complet prenant 2 ou 3 heures. heures au maximum. Même si vous ne connaissez pas Svelte, nous espérons que le code frontal pourra toujours être facilement compris.
Le code est divisé en trois dossiers :
Le dossier shared
est lié symboliquement aux dossiers backend
et frontend
, une astuce astucieuse qui permet de partager des types et des modules TypeScript entre projets sans avoir à configurer un mono-dépôt complet. Si vous utilisez une ancienne version de Windows (avant Windows 10), vous devrez peut-être activer manuellement les liens symboliques pour les comptes non-administrateurs sur votre système.
Le backend est un serveur Express.js minimal qui montre comment inviter GPT afin qu'il donne des réponses structurées, puis analyse ces réponses. Deux exemples de récupération à partir de GPT sont inclus, l'un atteignant le point de terminaison REST pour le chat et le second affichant les réponses en continu pour le chat. Dans les deux cas, les résultats sont envoyés depuis le serveur via un socket Web vers le client Web frontal.
Pour faire fonctionner le backend, vous devrez créer votre propre fichier .env
contenant votre clé OPENAI_API_KEY
. Si vous souhaitez enregistrer des histoires, vous devrez également ajouter AWS_ACCESS_KEY_ID et AWS_SECRET_ACCESS_KEY. Notez que malheureusement, vultr est codé en dur en tant que fournisseur s3, et doit également être extrait dans le fichier env à un moment donné.
Le front-end est une application Web Svelte qui rassemble le nom des membres de la cour royale, l'envoie au backend et, lorsqu'une histoire est récupérée, l'anime sur le composant Dialogue.svelte
.
Les types courants et les fonctions utilitaires sont shared
. Principalement utilisé pour les types de données partagés par le front-end et le back-end.
En raison de problèmes de construction sur certains systèmes d'exploitation, malheureusement, le backend dispose désormais d'une copie papier des types partagés, il faut comprendre pourquoi les liens symboliques ne sont pas récupérés sur MacOS.
Pour exécuter le projet, procédez comme suit :
backend
créez un fichier .env
et remplissez-le avec OPENAI_API_KEY=
et remplissez votre clé.shared
, backend
et frontend
effectuez npm install
et npm build
frontend
et entrez npm run dev
qui démarrera vite, et vous pouvez vous connecter à http://localhost:5173/
, cochez les deux cases en haut et alors make some drama
. un. Pour modifier quelle histoire prégénérée est affichée, vous pouvez modifier l'index sur la ligne 14 de StoryFetcherws.ts
`const events = parseOutEvents(pregenStories[2].story);`
backend
et entrez npm run dev
. Le frontend, lorsqu'il est exécuté localement, tentera automatiquement de se connecter au backend sur localhost.npm run debug
est pris en charge sur le backend pour exécuter node --inspect
Fonctionnalités à venir :