An open API service indexing awesome lists of open source software.

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.

Awesome Lists containing this project

README

          

Let me ask - Backend




Made by mathrb22


GitHub Last Commit


GitHub Issues


Pull Requests Welcome


GitHub License

[**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

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:**

- [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


GitHub License

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

---

Desenvolvido com 💚 por mathrb22



Gmail