/zen-ai

Namaste! 🙏 Eu sou Zen AI, um assistente virtual de inteligência artificial dedicado ao bem-estar e à prática do Yoga. 🧘‍♀️

Primary LanguageTypeScript

Netlify Status

Imagem do projeto

Zen AI

Namaste! 🙏 Eu sou Zen AI, um assistente virtual de inteligência artificial dedicado ao bem-estar e à prática do Yoga. 🧘‍♀️

Acessar Zen AI

Video/Demo

Feito com ❤️ por Diego Siena

Conteúdo

🧘 Sobre o Zen AI

Meu objetivo é te guiar em sua jornada de autoconhecimento e saúde, respondendo suas dúvidas sobre Yoga, meditação, mindfulness e tudo que envolve o bem-estar físico e mental. Sou como um instrutor de Yoga virtual, sempre pronto para compartilhar dicas, curiosidades e inspirações para te ajudar a encontrar equilíbrio e paz interior. ✨ Lembre-se, estou aqui para te auxiliar no caminho do Yoga e do bem-estar. 😄 Namastê! 🙏

EI! Você! Avaliador do Desafio Alura... o Zen AI tem um recadinho pra você:

Chat

O chat Zen AI está pronto para responder as suas perguntas e fazer coisas incríveis por você. Quer ver um exemplo?

Criar aulas de yoga, com tempo e objetivos determinados

Veja alguns exemplos, com o que foi solicitado e o retorno:

"Olá. Crie uma aula de yoga, de 30 minutos, para gestantes."

"Olá. Crie uma aula de yoga, de 30 minutos, para crianças, com foco em alongamento"

Lista e busca de FAQs (Perguntas ferquentes)

Na página de Perguntas Frequentes, você pode buscar utilizando texto, fazendo perguntas ou por termos que possam estar presentes nas respostas.

O Zen AI app vai gerar o embedding da sua busca, e comparar com os embeddings dos conteúdos, calcular a distância euclidiana, e retornar os mais relevantes.

Veja um exemplo (repare no "Score" ao lado da pergunta):

🧠 Conceitos de IA

Detalhes sobre os conceitos de IA utilizados no projeto e como foram utilizados para obter melhores resultados.

Embedding de conteúdo

O embedding de cada pergunta frequente (e sua resposta) foi calculado e salvo na lista da faqs, evitando a necessidade de recalcular a cada nova chamada da API.

O embed foi feito através da função embedRetrievalFaqs. Clique para ver mais. Aqui está o exemplo de como ficou a lista de FAQs.

export const faqs: Faq[] = [
  {
    question: 'O que é Yoga? 🤔',
    answer:
      'Yoga é uma prática milenar que une corpo, mente e espírito através de posturas físicas (asanas), técnicas de respiração (pranayamas), meditação e princípios éticos. ✨',
    values: [0.015996197, -0.0033414727, ..., -0.02644008]
  }
  //...
];

Na chamada da api /api/faq passando uma query, executamos a função performQuery que calcula o embedding do texto de busca (query), calcula a distância com o embedding das FAQs e retorna as 3 "melhores" correspondências.

Chat/Conversação com o modelo

Para a conversação com o modelo, basicamente utilizamos as funções model.startChat({...}); e chat.sendMessage(message);, passando os parâmetros de history, model, generationConfig, entre outros.

Veja o arquivo chat.ts, responsável pela função de chat/conversação.

Prompt Engineering/System Instructions

A engenharia de prompt foi muito relevante para o desenvolvimento do Zen AI. Com o objetivo de:

  • Limitar o assistente a assuntos de Yoga e bem-estar.
  • Definir o tom e formatação das repostas.
  • Definir o formato de resposta das aulas/sequências de yoga.
  • A mensagem inicial (boas-vindas e instruções).

Note

Aparentemente, o parâmetro systemInstructions ainda não é suportado pela SDK JS do Google. Portanto, resolvi enviar uma primeira mensagem pro modelo, com as instruções.

Veja as instruções enviadas ao modelo:

message =
	'Você é um assistente de Yoga chamado Zen AI. Você deve recusar educadamente a responder perguntas que não sejam relacionadas a Yoga ou saúde de modo geral.\
    Você deve responder sempre de forma gentil, e quando possível utilizar emojis e frases/termos relacionados ao tema Yoga. \
    Quando for solicitada uma aula, responda a aula contendo Objetivo, Nivel, Materiais, Instruções e dicas. \
    Responda com uma mensagem de boas vindas contendo uma curiosidade sobre Yoga ou bem-estar e exemplos de \
    como você pode ajudar e/ou perguntas das quais você poderia responder.';

👨‍💻 Tech stack

Developing

Once you've created a project and installed dependencies with npm install (or pnpm install or yarn), start a development server:

npm run dev

# or start the server and open the app in a new browser tab
npm run dev -- --open