https://github.com/mathrb22/let-me-ask-server
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.
https://github.com/mathrb22/let-me-ask-server
ai api audio-processing audio-transcription backend docker drizzle-orm fastify gemini-api let-me-ask nlw nlw-agents nodejs pgvector postgresql rocketseat semantic-search semantic-vector-evaluation typescript zod
Last synced: 3 months ago
JSON representation
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.
- Host: GitHub
- URL: https://github.com/mathrb22/let-me-ask-server
- Owner: mathrb22
- License: mit
- Created: 2025-07-09T19:15:45.000Z (3 months ago)
- Default Branch: main
- Last Pushed: 2025-07-18T04:51:00.000Z (3 months ago)
- Last Synced: 2025-07-18T08:19:39.243Z (3 months ago)
- Topics: ai, api, audio-processing, audio-transcription, backend, docker, drizzle-orm, fastify, gemini-api, let-me-ask, nlw, nlw-agents, nodejs, pgvector, postgresql, rocketseat, semantic-search, semantic-vector-evaluation, typescript, zod
- Language: TypeScript
- Homepage:
- Size: 59.6 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
Let me ask - Backend
[**Sobre**](#-sobre) **|**
[**Objetivo**](#-objetivo) **|**
[**Tecnologias e ferramentas**](#-tecnologias-e-ferramentas) **|**
[**Features**](#-features) **|**
[**Instalação e execução**](#-instalação-e-execução) **|**
[**Estrutura do projeto**](#-estrutura-do-projeto) **|**
[**Como contribuir**](#-como-contribuir) **|**
[**Licença**](#-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](https://github.com/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
![]()
TypeScript
![]()
Fastify
![]()
Drizzle ORM
![]()
PostgreSQL
![]()
pgvector
![]()
Zod
![]()
Google Gemini API
![]()
Biome
![]()
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:**
- [Node.js](https://nodejs.org/en/) (versão 20 ou superior)
- [Docker](https://www.docker.com/get-started) e [Docker Compose](https://docs.docker.com/compose/install/)
- Uma chave de API do [Google Gemini](https://aistudio.google.com/app/apikey)**Passos:**
1. **Clone o repositório:**
```bash
git clone https://github.com/mathrb22/let-me-ask-server.git
cd let-me-ask-server
```2. **Instale as dependências:**
```bash
npm install
```3. **Configure as variáveis de ambiente:**
- Crie um arquivo `.env` na raiz do projeto, copiando o exemplo de `.env.example`.
```bash
cp .env.example .env
```
- Abra o arquivo `.env` e preencha as variáveis:```env
# 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`.
```bash
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.
```bash
npm run db:migrate
```6. **Execute o servidor de desenvolvimento:**
```bash
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/`):
```bash
npm run db:generate
```
- **Abrir o Drizzle Studio** (para visualizar e gerenciar o banco de dados):
```bash
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
Esse projeto está sob a licença **MIT**. Veja o arquivo _**LICENSE**_ para mais detalhes.
---
Desenvolvido com 💚 por mathrb22