Namaste! 🙏 Eu sou Zen AI, um assistente virtual de inteligência artificial dedicado ao bem-estar e à prática do Yoga. 🧘♀️
Feito com ❤️ por Diego SienaMeu 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ê! 🙏
O chat Zen AI está pronto para responder as suas perguntas e fazer coisas incríveis por você. Quer ver um exemplo?
Veja alguns exemplos, com o que foi solicitado e o retorno:
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.
Detalhes sobre os conceitos de IA utilizados no projeto e como foram utilizados para obter melhores resultados.
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.
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.
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.';
- @google/generative-ai - The Google AI JavaScript SDK
- SvelteKit - The fastest way to build Svelte apps
- Skeleton UI - The UI toolkit for Svelte and Tailwind.
- Tailwind - A utility-first CSS framework
- Typescript - TypeScript is JavaScript with syntax for types.
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