Bienvenido a Arcadia, el simulador de drama medieval con IA. Este proyecto es un experimento en el uso de tecnologías de IA generativa para crear una experiencia narrativa y, con suerte, también sirve como ejemplo para la comunidad más amplia de mejores prácticas sobre cómo utilizar varias API de IA generativa.
Tenga en cuenta que la última versión estable siempre está alojada en https://www.generativestorytelling.ai
Arcadia destaca el uso de LLM para generar narrativas animadas, detallando el drama en una corte real de su elección. ¡Enumera los nombres de tus amigos y familiares y observa cómo se traicionan, envenenan, se casan y se apuñalan entre sí para tomar el control del Reino!
La narración es proporcionada por GPT 3.5.
El fondo 3d es de Blockadelabs.
Los retratos de personajes son generados por Dalle.
Las próximas funciones incluyen narración de texto a voz, música, efectos de sonido y la capacidad de guardar, compartir y reproducir historias.
Para garantizar que esto pueda servir como ejemplo para las personas, he intentado minimizar las dependencias de terceros en el código y también mantener el sistema de compilación lo más simple posible. Cuando hay que elegir entre hacer las cosas de una manera elegante (por ejemplo, Sass, OpenAPI) o de una manera simple (directorio compartido de archivos TypeScript), se ha elegido la forma simple.
Idealmente, si está familiarizado con TypeScript, Express y HTML, debería poder comprender el código base.
Svelte se usa en el front-end, si no está familiarizado con Svelte, es un conjunto mínimo de herramientas para realizar enlace de datos en HTML, los conceptos básicos se pueden aprender en menos de una hora y el tutorial completo toma 2 o 3 horas al máximo Incluso si no conoce Svelte, es de esperar que el código frontal pueda entenderse fácilmente.
El código se divide en tres carpetas:
La carpeta shared
tiene un enlace simbólico a las carpetas backend
y frontend
, un truco ingenioso que permite compartir tipos y módulos de TypeScript entre proyectos sin tener que configurar un repositorio mono completo. Si está utilizando una versión anterior de Windows (anterior a Windows 10), es posible que deba habilitar manualmente los enlaces simbólicos para cuentas que no sean de administrador en su sistema.
El backend es un servidor Express.js mínimo que demuestra cómo solicitar GPT para que proporcione respuestas estructuradas y luego analizar esas respuestas. Se incluyen dos ejemplos de obtención de GPT: uno que llega al punto final REST para el chat y el segundo que muestra la transmisión de respuestas para el chat. En ambos casos, los resultados se envían desde el servidor a través de un socket web al cliente web front-end.
Para que el backend funcione, deberá crear su propio archivo .env
con su clave OPENAI_API_KEY
. Si desea guardar historias, también deberá agregar AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY. Tenga en cuenta que, lamentablemente, vultr está codificado como proveedor s3, que también debe extraerse al archivo env en algún momento.
El front-end es una aplicación web Svelte que recopila el nombre de los miembros de la corte real, lo envía al backend y, cuando se recupera una historia, la anima en el componente Dialogue.svelte
.
Los tipos comunes y las funciones de utilidad están shared
. Se utiliza principalmente para tipos de datos compartidos por el front-end y el back-end.
Debido a problemas de compilación en algunos sistemas operativos, lamentablemente el backend ahora tiene una copia impresa de los tipos compartidos, es necesario descubrir por qué los enlaces simbólicos no se detectan en MacOS.
Para ejecutar el proyecto, haga lo siguiente:
backend
cree un archivo .env
y rellénelo con OPENAI_API_KEY=
y complete su clave.shared
, backend
y frontend
realice npm install
y npm build
frontend
e ingrese npm run dev
que iniciará vite, y puede conectarse a http://localhost:5173/
, seleccione ambas casillas de verificación en la parte superior y Luego make some drama
. a. Para modificar qué historia pregenerada se muestra, puede cambiar el índice en la línea 14 de StoryFetcherws.ts
`const events = parseOutEvents(pregenStories[2].story);`
backend
e ingrese npm run dev
. La interfaz, cuando se ejecuta localmente, intentará conectarse automáticamente al backend en localhost.npm run debug
es compatible con el backend para ejecutar node --inspect
Próximas funciones: