Sobre | Objetivo | Tecnologias e ferramentas | Features | Instalação e execução | Estrutura do projeto | Como contribuir | Licença
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.
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.
Node.js
|
TypeScript
|
|
|
PostgreSQL
|
pgvector
|
Zod
|
|
|
|
-
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.
- Upload de Áudio: Endpoint para enviar trechos de áudio (
Siga os passos abaixo para configurar e executar o projeto em seu ambiente de desenvolvimento.
Pré-requisitos:
- Node.js (versão 20 ou superior)
- Docker e Docker Compose
- Uma chave de API do Google Gemini
Passos:
-
Clone o repositório:
git clone https://github.com/mathrb22/let-me-ask-server.git cd let-me-ask-server -
Instale as dependências:
npm install
-
Configure as variáveis de ambiente:
-
Crie um arquivo
.envna raiz do projeto, copiando o exemplo de.env.example.cp .env.example .env
-
Abra o arquivo
.enve 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"
-
-
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
- O comando abaixo irá iniciar um contêiner PostgreSQL com a extensão
-
Execute as migrações do banco de dados:
- Este comando aplicará as tabelas e configurações necessárias ao banco.
npm run db:migrate
-
Execute o servidor de desenvolvimento:
npm run dev
A API estará disponível em http://localhost:3333.
- 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
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
- 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.
Esse projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
Desenvolvido com 💚 por mathrb22