Este projeto fornece a base para um pipeline de ingestão de documentos para sistemas RAG (Retrieval-Augmented Generation). A estrutura atual inclui:
- Ingestão com Docling para PDF/Markdown, com enriquecimento de tabelas, blocos de código e imagens.
- Camada de transcrição de áudio (Whisper local ou API OpenAI) com agrupamento por tempo.
- Chunking estruturado para Markdown com limites de tokens configuráveis.
- Armazenamento simples em vetor (similaridade) e grafo (entidades/relacionamentos).
- Retrieval híbrido (denso + esparso) com expansão de consulta e re-ranking.
- CLI baseada em Typer para ingestão e busca (stub inicial).
[Documentos]
↓
Docling (parse/normalização)
↓
Chunking (texto/tabelas/áudio transcrito)
↓
Embeddings
↓
Índices: Vetorial + Grafo
↓
Retrieval + Re-ranking
↓
Resposta/Contexto para LLM
- Python 3.10+
- pip
- (Opcional) CUDA para aceleração de embeddings/ASR
- Git
Para usar GPU:
- Instale o CUDA Toolkit compatível com sua GPU.
- Instale drivers NVIDIA atualizados.
- Verifique:
nvidia-smiObservação: bibliotecas específicas (ex.: PyTorch, FAISS, Whisper) precisam da versão correta para CUDA.
Fallback CPU: se não tiver GPU/CUDA, instale o PyTorch padrão (sem
--index-urldo CUDA) ou remova as linhas detorch/torchvisionespecíficas de CUDA dorequirements.txt. Isso fará o download das wheels CPU via PyPI.
git clone <repo-url>
cd rag-document_ingestion
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtCaso use CUDA, instale também as versões GPU das bibliotecas (ex.:
torch,faiss-gpu,whisperetc.).
A CLI usa config.yaml na raiz do projeto (ou o caminho informado em --config). Campos suportados:
ingest_source: "./data"
search_top_k: 5
status_verbose: falseAs mesmas chaves podem ser sobrepostas por variáveis de ambiente em .env:
INGEST_SOURCE=./data
SEARCH_TOP_K=5
STATUS_VERBOSE=true
O chunking estruturado utiliza um JSON de configuração:
{
"max_tokens": 256,
"late_chunking": true,
"include_title_in_chunks": true
}A CLI é um esqueleto inicial, focado em leitura de config e fluxo de execução.
python -m src.cli.main ingest --source ./data --config config.yamlpython -m src.cli.main search "minha consulta" --top-k 5 --config config.yamlpython -m src.cli.main status --config config.yamlO pipeline em src/ingestion/docling_pipeline.py exporta texto, tabelas, blocos de código e imagens, com armazenamento opcional em JSONL.
O módulo src/ingestion/audio_transcription.py oferece:
- Transcrição local com Whisper (
openai-whisper). - Transcrição via API OpenAI (
openai). - Agrupamento de segmentos por duração e envio para um pipeline de chunking/embedding.
src/chunking/structure_chunker.py segmenta Markdown preservando títulos, tabelas e blocos de código, com limite de tokens e “late chunking”.
src/storage/vector_store.py: persistência simples de embeddings, com busca por similaridade.src/storage/graph_store.py: entidades/relacionamentos, com filtros para integração híbrida.
src/rag/retrieval.py implementa:
- Expansão de consulta.
- Busca híbrida (dense + sparse).
- Re-ranking e payload final de contexto.
rag-document_ingestion/
├─ config/ # chunking.json
├─ docs/
├─ scripts/
├─ src/
│ ├─ cli/
│ ├─ chunking/
│ ├─ config/
│ ├─ ingestion/
│ ├─ rag/
│ └─ storage/
└─ README.md
- Integrar pipeline de embeddings/índices (ex.: FAISS/Qdrant) com as stores atuais.
- Implementar persistência configurável para ingestão Docling (JSONL -> índice).
- Expandir CLI para aceitar tipos de documento e plugar no pipeline completo.
- Criar testes e exemplos reais de ingestão.