Bem-vindo ao Arcadia, o Simulador de Drama Medieval de IA. Este projeto é um experimento no uso de tecnologias de IA generativa para criar uma experiência narrativa, ao mesmo tempo que também serve como um exemplo para a comunidade maior de melhores práticas sobre como usar várias APIs de IA generativa.
Observe que a versão estável mais recente está sempre hospedada em https://www.generativestorytelling.ai
Arcadia destaca o uso de LLMs para gerar narrativas animadas, detalhando o drama na corte real de sua escolha. Liste os nomes de seus amigos e familiares e observe como eles traem, envenenam, casam e esfaqueiam uns aos outros para assumir o controle do Reino!
A narração é fornecida pelo GPT 3.5
O fundo 3D é da Blockadelabs
Retratos de personagens são gerados por Dalle
Os próximos recursos incluem narração de texto em fala, música, efeitos sonoros e a capacidade de salvar, compartilhar e reproduzir histórias.
Para garantir que isso sirva de exemplo para as pessoas, tentei minimizar as dependências de terceiros no código e também manter o sistema de compilação o mais simples possível. Quando há uma escolha entre fazer as coisas de uma maneira sofisticada (por exemplo, Sass, OpenAPI) ou de uma maneira simples (diretório compartilhado de arquivos TypeScript), a maneira simples foi escolhida.
Idealmente, se você estiver familiarizado com TypeScript, Express e HTML, deverá ser capaz de entender a base do código.
Svelte é usado no front-end, se você não estiver familiarizado com Svelte, é um conjunto mínimo de ferramentas para fazer vinculação de dados em HTML, o básico pode ser aprendido em menos de uma hora com o tutorial completo levando 2 ou 3 horas no máximo. Mesmo que você não conheça o Svelte, esperamos que o código do front end ainda possa ser facilmente compreendido.
O código está dividido em três pastas:
A pasta shared
é vinculada simbolicamente às pastas backend
e frontend
, um truque bacana que permite compartilhar tipos e módulos TypeScript entre projetos sem a necessidade de configurar um repositório mono completo. Se você estiver usando uma versão antiga do Windows (anterior ao Windows 10), talvez seja necessário ativar manualmente os links simbólicos para contas que não sejam de administrador em seu sistema.
O back-end é um servidor Express.js mínimo que demonstra como solicitar ao GPT para fornecer respostas estruturadas e, em seguida, analisar essas respostas. Dois exemplos de busca do GPT estão incluídos, um atingindo o endpoint REST para bate-papo e um segundo mostrando respostas de streaming para bate-papo. Em ambos os casos, os resultados são enviados do servidor por meio de um soquete da Web para o cliente da Web front-end.
Para que o back-end funcione, você precisará criar seu próprio arquivo .env
com sua chave OPENAI_API_KEY
. Se quiser salvar histórias, você também precisará adicionar AWS_ACCESS_KEY_ID e AWS_SECRET_ACCESS_KEY. Observe que, infelizmente, o vultr é codificado como o provedor s3, que também precisa ser extraído para o arquivo env em algum momento.
O front-end é um aplicativo web Svelte que reúne os nomes dos membros da corte real, envia-os para o back-end e, quando uma história é obtida, anima-a no componente Dialogue.svelte
.
Tipos comuns e funções utilitárias estão em shared
. Usado principalmente para tipos de dados compartilhados pelo front-end e back-end.
Devido a problemas de construção em alguns sistemas operacionais, infelizmente o back-end agora tem uma cópia impressa dos tipos compartilhados, é necessário descobrir por que o link simbólico não está sendo utilizado no MacOS.
Para executar o projeto, faça o seguinte:
backend
crie um arquivo .env
e preencha-o com OPENAI_API_KEY=
e preencha sua chave.shared
, backend
e frontend
faça npm install
e npm build
frontend
e digite npm run dev
que iniciará o vite, e você pode se conectar a http://localhost:5173/
, marque ambas as caixas de seleção na parte superior e então make some drama
. um. Para alterar qual história pré-gerada é exibida, você pode alterar o índice na linha 14 de StoryFetcherws.ts
`const events = parseOutEvents(pregenStories[2].story);`
backend
e digite npm run dev
. O frontend, quando executado localmente, tentará conectar-se automaticamente ao backend no localhost.npm run debug
é suportado no back-end para executar node --inspect
Próximos recursos: