Добро пожаловать в Аркадию, симулятор средневековой драмы с искусственным интеллектом. Этот проект представляет собой эксперимент по использованию технологий генеративного ИИ для создания повествовательного опыта, а также, мы надеемся, послужит примером для более широкого сообщества передового опыта использования различных API-интерфейсов генеративного ИИ.
Обратите внимание, что последняя стабильная версия всегда размещается по адресу https://www.generativestorytelling.ai.
Аркадия подчеркивает использование LLM для создания анимированных повествований, подробно описывающих драму в королевском дворе по вашему выбору. Перечислите имена своих друзей и родственников и наблюдайте, как они предают, отравляют, женятся и наносят друг другу ножевые ранения, чтобы захватить контроль над Королевством!
Повествование обеспечивается GPT 3.5.
3D-фон от Blockadelabs.
Портреты персонажей созданы Dalle.
Будущие функции включают в себя текстовое речевое повествование, музыку, звуковые эффекты, а также возможность сохранять, делиться и воспроизводить истории.
Чтобы это могло служить примером для людей, я постарался свести к минимуму сторонние зависимости в коде, а также сделать систему сборки максимально простой. Когда есть выбор между необычным способом (например, Sass, OpenAPI) или простым способом (общий каталог файлов TypeScript), выбирается простой способ.
В идеале, если вы знакомы с TypeScript, Express и HTML, вы должны быть в состоянии понять базу кода.
Svelte используется во внешнем интерфейсе. Если вы не знакомы со Svelte, это очень минимальный набор инструментов для привязки данных в HTML, основы можно освоить менее чем за час, а полное руководство займет 2 или 3 часа. часы на макс. Даже если вы не знаете Svelte, надеюсь, код внешнего интерфейса вам будет легко понять.
Код разделен на три папки:
shared
папка связана с символическими ссылками на backend
и frontend
папки — изящный трюк, который позволяет совместно использовать типы и модули TypeScript между проектами без необходимости настройки полного монорепозитория. Если вы используете старую версию Windows (до Windows 10), вам, возможно, придется вручную включить символические ссылки для учетных записей без прав администратора в вашей системе.
Бэкэнд — это минимальный сервер Express.js, который демонстрирует, как запрашивать GPT, чтобы он давал структурированные ответы, а затем анализировал эти ответы. Включены два примера получения данных из GPT: один касается конечной точки REST для чата, а второй показывает потоковые ответы для чата. В обоих случаях результаты пересылаются с сервера через веб-сокет на внешний веб-клиент.
Чтобы серверная часть работала, вам нужно будет создать собственный файл .env
с вашим ключом OPENAI_API_KEY
в нем. Если вы хотите сохранять истории, вам также необходимо добавить AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY. Обратите внимание, что, к сожалению, vultr жестко запрограммирован как поставщик s3, и в какой-то момент его также необходимо извлечь в файл env.
Интерфейсная часть — это веб-приложение Svelte, которое собирает имена членов королевского двора, отправляет их на серверную часть, а когда история извлекается, анимирует ее в компоненте Dialogue.svelte
.
Общие типы и служебные функции находятся в shared
. В основном используется для типов данных, которые являются общими для внешнего и внутреннего интерфейса.
К сожалению, из-за проблем со сборкой в некоторых ОС бэкэнд теперь имеет бумажную копию общих типов, поэтому необходимо выяснить, почему символические ссылки не поддерживаются в MacOS.
Чтобы запустить проект, сделайте следующее:
backend
создайте файл .env
, заполните его OPENAI_API_KEY=
и введите свой ключ.shared
, backend
и frontend
выполните npm install
и npm build
frontend
и введите npm run dev
, который запустит Vite, и вы можете подключиться к http://localhost:5173/
, установите оба флажка вверху и тогда make some drama
. а. Чтобы изменить отображаемую предварительно созданную историю, вы можете изменить индекс в строке 14 файла StoryFetcherws.ts.
`const events = parseOutEvents(pregenStories[2].story);`
backend
и введите npm run dev
. Интерфейс при локальном запуске автоматически попытается подключиться к серверу на локальном хосте.npm run debug
для запуска node --inspect
Будущие функции: