BookSelfStudy é uma plataforma educacional desenvolvida para explorar e entender a mecânica interna de Retrieval-Augmented Generation (RAG). Inspirado no Google NotebookLM, ele permite que os usuários façam upload de documentos e interajam com eles através de um assistente de IA fundamentado (grounded).
Este projeto é uma iniciativa de estudo pessoal focada na implementação de todo o ciclo de vida do RAG — desde a ingestão de documentos até a busca semântica e geração local com LLMs — sem depender de abstrações de alto nível.
O projeto é dividido em uma arquitetura cliente-servidor, focada em isolamento de contexto (Notebooks) e processamento local.
- Ingestão e Extração:
- PDF: Utiliza
PyMuPDFpara extração de texto. - OCR Fallback: Se uma página de PDF contém pouco texto (indicando um documento escaneado), o sistema utiliza automaticamente
Tesseract OCRpara extrair o conteúdo. - Markdown: Extração direta de texto.
- PDF: Utiliza
- Fragmentação (Chunking):
- Os textos são divididos em chunks de ~1000 caracteres com 200 caracteres de sobreposição (overlap) para manter o contexto semântico entre fragmentos.
- Vetorização e Armazenamento:
- Utiliza o ChromaDB para armazenar os embeddings e metadados (como nome do arquivo e página).
- Cada "Notebook" possui sua própria coleção isolada no banco vetorial.
- Recuperação e Geração:
- Busca semântica recupera os 5 fragmentos mais relevantes.
- O contexto é injetado em um prompt estruturado para o Ollama.
- Grounding: O assistente é instruído a responder apenas com base no contexto e a citar as fontes (arquivo e página).
- Processamento Assíncrono: O upload de arquivos inicia uma
Background Taskpara processamento e indexação, permitindo que a UI continue responsiva. - Gestão de Metadados: Um registro JSON persistente (
notebooks_metadata.json) gerencia o histórico de chat, status de processamento de arquivos e configurações de cada notebook. - Local-First: Projetado para rodar inteiramente no hardware do usuário.
- Interface Reativa: Desenvolvida com React 19 e Vite para máxima performance.
- Estilização Moderna: Utiliza Tailwind CSS 4 para um design limpo e focado em leitura.
- Gerenciamento de Estado: Interface consciente do estado de processamento dos arquivos em tempo real.
- Linguagem: Python 3.10+
- Framework API: FastAPI
- Banco Vetorial: ChromaDB
- LLM Engine: Ollama
- Processamento de PDF: PyMuPDF (fitz)
- OCR: Tesseract OCR & Pillow
- Framework: React 19
- Build Tool: Vite
- Styling: Tailwind CSS 4
- Ícones: Lucide React
- Comunicação: Axios
O projeto inclui um script especializado (backend/ingest_expert.py) para "destilar" documentos. Ele utiliza o LLM para ler cada página e criar resumos técnicos densos, salvando-os de volta no banco vetorial. Isso melhora a precisão do RAG e economiza tokens.
Como usar:
cd backend
python ingest_expert.py <notebook_id> [modelo]
# Exemplo: python ingest_expert.py 123-abc llama3.2:3b- Ollama: Instale o Ollama e baixe os modelos desejados:
ollama pull llama3.2:1b ollama pull qwen2.5:1.5b
- Tesseract OCR (Opcional, para suporte a PDFs escaneados):
- Linux:
sudo apt install tesseract-ocr - macOS:
brew install tesseract - Windows: Instalar via binário.
- Linux:
- Node.js v18+ e Python 3.10+.
- Navegue até a pasta
backend:cd backend - Crie e ative um ambiente virtual:
python -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate
- Instale as dependências:
pip install -r requirements.txt
- Inicie o servidor:
O servidor estará disponível em
python -m uvicorn app.main:app --reload
http://localhost:8000.
- Navegue até a pasta
frontend:cd frontend - Instale as dependências:
npm install
- Inicie o servidor de desenvolvimento:
Acesse
npm run dev
http://localhost:5173no seu navegador.
Este projeto é estritamente para fins educacionais. Sinta-se à vontade para explorar e adaptar para seus próprios estudos.