Sistema de RAG (Retrieval-Augmented Generation) que permite fazer perguntas em linguagem natural sobre documentos PDF, usando embeddings locais com HuggingFace, Neo4j como vector store e LLM via OpenRouter.
PDFs → chunks → embeddings (local) → Neo4j
↓
Pergunta → similaritySearch → contexto → LLM → resposta
- Os PDFs são carregados e divididos em chunks de texto
- Cada chunk é convertido em um vetor (embedding) localmente via HuggingFace Transformers
- Os vetores são armazenados no Neo4j
- Na consulta, a pergunta é vetorizada e os chunks mais similares são recuperados
- Os chunks relevantes são enviados como contexto para o LLM gerar a resposta
- Node.js 22+
- Docker
git clone https://github.com/JeisonSilva/chat-document-response.git
cd chat-document-response
npm installCopie o .env.example e preencha as variáveis:
NEO4J_URI=bolt://localhost:7687
NEO4J_USER=neo4j
NEO4J_PASSWORD=password123
EMBEDDING_MODEL=Xenova/all-MiniLM-L6-v2
OPENROUTER_API_KEY=sua-chave-aqui
OPENROUTER_SITE_URL=http://localhost:3000
OPENROUTER_SITE_NAME=MeuProjetoRAG
NLP_MODEL=nvidia/nemotron-3-nano-30b-a3b:freeA chave da API pode ser obtida em openrouter.ai/keys
npm run infra:upColoque os arquivos .pdf na pasta pdfs/ e execute:
npm run devO script carrega todos os PDFs da pasta, divide em chunks, gera os embeddings e salva no Neo4j. A cada execução, os dados anteriores são removidos e reinseridos.
npm run consultar "sua pergunta aqui"Exemplo:
npm run consultar "O que é o ato penitencial?"src/
├── index.ts # Ingestão: carrega PDFs e popula o Neo4j
├── consultarPdf.ts # Consulta: recebe pergunta e retorna resposta
├── LeitorPdfLoader.ts # Carrega os PDFs da pasta pdfs/
├── ProcessadorDadosLlm.ts # Divide os documentos em chunks
├── EmbeddingsTransformers.ts # Geração de embeddings com HuggingFace
├── StoreDataBase.ts # Persiste os documentos no Neo4j
└── RagConsulta.ts # Busca por similaridade + chamada ao LLM
| Tecnologia | Uso |
|---|---|
| LangChain | Orquestração do pipeline RAG |
| HuggingFace Transformers | Embeddings locais (sem custo de API) |
| Neo4j | Vector store para busca por similaridade |
| OpenRouter | Gateway para LLMs (suporta modelos gratuitos) |
| pdf-parse | Extração de texto dos PDFs |