Skip to content

Backend do projeto Let me ask (NLW Agents). Uma API com IA para responder perguntas em tempo real durante transmissões, usando Node.js, Fastify e busca semântica com pgvector.

License

Notifications You must be signed in to change notification settings

mathrb22/let-me-ask-server

Repository files navigation

Let me ask - Backend


Sobre   |   Objetivo   |   Tecnologias e ferramentas   |   Features   |   Instalação e execução   |   Estrutura do projeto   |   Como contribuir   |   Licença

📃 Sobre

Este repositório contém o código-fonte do backend do projeto Let me ask, desenvolvido durante a NLW Agents (Next Level Week) da Rocketseat. O projeto é uma API moderna construída com Node.js, TypeScript e Fastify, utilizando PostgreSQL com a extensão pgvector para suporte a vetores e operações de IA.

O sistema integra agentes de IA, busca semântica e processamento de dados vetoriais para fornecer respostas automáticas a perguntas de participantes durante transmissões ao vivo. Através do upload de trechos de áudio da transmissão, a IA realiza a transcrição, gera vetores semânticos do conteúdo e os armazena. Isso permite que o sistema utilize busca semântica para verificar se perguntas já foram respondidas e fornecer respostas contextualizadas automaticamente.

🎯 Objetivo

Criar uma solução inteligente para transmissões ao vivo onde perguntas dos participantes são respondidas automaticamente por uma inteligência artificial, utilizando:

  • Upload e transcrição de trechos de áudio de transmissões ao vivo.
  • Geração e processamento de dados vetoriais para armazenar o contexto semântico do que foi dito.
  • Busca semântica para identificar se perguntas já foram respondidas com base no conteúdo transcrito.
  • Agente de IA para fornecer respostas contextualmente relevantes e precisas.

🚀 Tecnologias e ferramentas

Node.js Node.js TypeScript TypeScript Fastify Fastify Drizzle ORM Drizzle ORM PostgreSQL PostgreSQL
pgvector pgvector Zod Zod Google Gemini API Google Gemini API Biome Biome Docker Docker

✨ Features

  • Gestão de Salas:

    • Criação e listagem de salas para eventos.
    • Detalhamento de informações de uma sala específica.
  • Gestão de Perguntas:

    • Envio de perguntas para uma sala.
    • Listagem de perguntas de uma sala.
  • Processamento de Áudio com IA:

    • Upload de Áudio: Endpoint para enviar trechos de áudio (chunks) de uma transmissão ao vivo para uma sala específica.
    • Transcrição Automática: O áudio enviado é automaticamente transcrito para texto utilizando a API do Google Gemini.
    • Geração de Vetores Semânticos: A transcrição é processada para gerar embeddings (vetores semânticos) que capturam o significado do texto.
    • Armazenamento: A transcrição e os vetores são salvos no banco de dados, associados à sala correspondente.
    • Busca Semântica: ao criar uma nova pergunta, o sistema usará a busca por similaridade no banco de vetores para encontrar os trechos da transcrição mais relevantes e, assim, verificar se a pergunta já foi respondida.

💿 Instalação e execução

Siga os passos abaixo para configurar e executar o projeto em seu ambiente de desenvolvimento.

Pré-requisitos:

Passos:

  1. Clone o repositório:

    git clone https://github.com/mathrb22/let-me-ask-server.git
    cd let-me-ask-server
  2. Instale as dependências:

    npm install
  3. Configure as variáveis de ambiente:

    • Crie um arquivo .env na raiz do projeto, copiando o exemplo de .env.example.

      cp .env.example .env
    • Abra o arquivo .env e preencha as variáveis:

      # Porta da aplicação
      PORT=3333
      
      # URL de conexão com o banco de dados PostgreSQL
      DATABASE_URL="postgresql://docker:docker@localhost:5432/agents"
      
      # Sua chave de API do Google Gemini
      GEMINI_API_KEY="SUA_CHAVE_DE_API_AQUI"
  4. Inicie o banco de dados com Docker:

    • O comando abaixo irá iniciar um contêiner PostgreSQL com a extensão pgvector.
    docker-compose up -d
  5. Execute as migrações do banco de dados:

    • Este comando aplicará as tabelas e configurações necessárias ao banco.
    npm run db:migrate
  6. Execute o servidor de desenvolvimento:

    npm run dev

A API estará disponível em http://localhost:3333.

Comandos úteis do banco de dados

  • Gerar uma nova migração (após alterar um schema em src/db/schema/):
    npm run db:generate
  • Abrir o Drizzle Studio (para visualizar e gerenciar o banco de dados):
    npm run db:studio

📂 Estrutura do projeto

O projeto está organizado da seguinte forma:

.
├── drizzle.config.ts   # Configuração do Drizzle ORM
├── docker-compose.yml  # Configuração do Docker para o banco de dados
├── package.json
├── biome.jsonc         # Configuração do Biome (linter e formatter)
├── tsconfig.json
└── src/
    ├── db/
    │   ├── connection.ts   # Conexão com o banco de dados (Drizzle)
    │   ├── migrations/     # Arquivos de migração do banco
    │   └── schema/         # Definições das tabelas do banco (schemas)
    │       ├── index.ts
    │       ├── rooms.ts
    │       ├── questions.ts
    │       └── audio-chunks.ts
    ├── http/
    │   ├── routes/         # Definição das rotas da API
    │   │   ├── create-room.ts
    │   │   ├── get-rooms.ts
    │   │   ├── create-question.ts
    │   │   └── upload-audio.ts
    │   └── server.ts       # Arquivo principal do servidor Fastify
    ├── services/
    │   └── gemini.ts       # Lógica de integração com a API do Gemini
    └── env.ts              # Validação de variáveis de ambiente com Zod

💡 Como contribuir

  • Faça um fork desse repositório;
  • Crie um branch para a sua feature: git checkout -b minha-feature;
  • Faça um commit com suas alterações: git commit -m 'feat: Minha nova feature';
  • Faça um push para o seu branch: git push origin minha-feature;
  • Faça um pull request com sua feature;

Pull requests são sempre bem-vindos. Em caso de dúvidas ou sugestões, crie uma issue ou entre em contato comigo.

📝 Licença

GitHub License

Esse projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.


Desenvolvido com 💚 por mathrb22

Gmail

About

Backend do projeto Let me ask (NLW Agents). Uma API com IA para responder perguntas em tempo real durante transmissões, usando Node.js, Fastify e busca semântica com pgvector.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published