Este projeto é uma arquitetura ponta a ponta projetada para aprimorar a UX do Pokémon Go. Aqui demonstra um processo sequencial envolvendo vários agentes gpt-4
do Large Language Model (LLM), aproveitando um sistema de geração aumentada de recuperação (RAG) para fornecer respostas personalizadas.
Para uma compreensão aprofundada da arquitetura e para acessar o artigo completo, visite meu site.
Para se aprofundar na arquitetura e explorar o aplicativo, certifique-se de ter Python 3.10
instalado, junto com a biblioteca Langchain e Faiss by Meta.
Notas importantes:
Sistema - Todo o processo de configuração é projetado para sistemas baseados em Unix, então você pode usar os próximos comandos do Makefile para executar localmente seu sistema, caso contrário, você pode replicar os comandos do Makefile em seu terminal.
Variáveis de ambiente - cada um dos próximos comandos source
as variáveis definidas em seu arquivo .env
, portanto, verifique novamente se sua chave de API OpenAI está em vigor. Se quiser fazer alterações permanentes, você precisará adicionar essas variáveis ao seu script de inicialização do shell (como .bashrc
, .bash_profile
ou .zshrc
para Unix/Linux/MacOS ou variáveis de ambiente no Windows).
Crie um ambiente virtual usando o seguinte comando:
make create_venv
Ative o ambiente virtual usando o seguinte comando:
source .venv/bin/activate
Instale as dependências usando o seguinte comando:
make install_dev
Instale as dependências de teste usando o seguinte comando:
make install_test
Execute o servidor API usando o seguinte comando:
make api_server
Exiba a documentação da UI do Swagger para ver os endpoints disponíveis em: http://localhost:8000/docs
Execute o aplicativo Streamlit usando o seguinte comando:
make display_ui
A seguir estão exemplos dos diferentes tipos de interações que o sistema pode manipular, que são categorizados pelo tipo de intenção e pelo tipo de estrutura.
defense_suggestion
: Um Pokémon desconhecido apareceu e o usuário precisa de uma sugestão para usar um Pokémon contra ele. O usuário deve fornecer o nome do Pokémon como parte da entrada.
information_request
: O usuário deseja saber mais sobre um Pokémon. Na entrada, o usuário deve fornecer uma das seguintes estruturas de texto de entrada: (1) o nome do Pokémon com um pedido de informações, (2) uma descrição de um Pokémon em linguagem natural sem mencionar explicitamente o nome do Pokémon com a intenção de adivinhar o que é o Pokémon, OU (3) uma pergunta sobre o Pokémon com o nome do Pokémon mencionado explicitamente, solicitando um atributo específico como: Evolução, Dieta, Habitat, Estatísticas Base, etc.
squad_build
: O usuário deseja construir um esquadrão de Pokémon baseado nos tipos de Pokémon do oponente. O usuário deve fornecer uma lista de nomes de Pokémon como parte da entrada.
None
: Retorna a própria resposta do GPT-4. A solicitação do usuário não se enquadra em nenhuma das categorias acima.
Exemplos de prompt :
Tipo de intenção | Tipo de estrutura | Exemplo |
---|---|---|
sugestão_defesa | any | Me deparei com um Grovyle selvagem descansando no parque! Qual Pokémon devo escolher para uma batalha épica para derrotá-lo? |
solicitação_de_informações | pokemon_names | Tudo bem, Pokédex! É hora de descobrir tudo sobre Snorlax e Pikachu! |
solicitação_de_informações | natural_language_question | Você sabe em que tipo de habitat posso encontrar um Psyduck? |
solicitação_de_informações | natural_language_description | Você consegue adivinhar qual Pokémon é um Pokémon de tipo Grama/Veneno conhecido pelo bulbo de planta em suas costas, que se transforma em uma grande planta à medida que evolui? |
squad_build | any | É hora de desafiar o líder do Fire Gym! Ele tem um time difícil com Ninetales e Combusken, mas preciso da sua ajuda para montar um time |
Nenhum | any | Eu adoro pretzels |
Exemplos de respostas :
Dica: Você sabe em que tipo de habitat posso encontrar um Lucario?
Responda com JSON mode
ativado:
{
"header" : " Lucario can be found in Cave, Forest, and Mountain habitats. n " ,
"body" : [
" ### Lucario nn **ID**: 448 nn **Stats**: - HP: 70 n - Speed: 90 n - Attack: 110 n - Special-Attack: 115 n - Defense: 70 n - Special-Defense: 70 nn **Height**: 1.2m **Weight**: 54.0kg nn **Types**: fighting, steel nn **Abilities**: steadfast, inner-focus, justified nn **Damage Relations**: n - no damage to: ghost n - half damage to: flying n - double damage to: normal n - half damage from: rock n - double damage from: flying n "
],
"sprites" : {
"Lucario" : [
" https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/back/448.png " ,
" https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/back/shiny/448.png " ,
" https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/448.png " ,
" https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/shiny/448.png "
]
},
"intent_type" : " information_request " ,
"intent_structure" : " natural_language_question "
}