Olá! Tudo bem?
Segue o link do repositório com a implementação da atividade:
Link do Git: https://github.com/Moquiuti/tecnicas_avancadas_rag
Nesta etapa, avancei na construção de uma pipeline RAG mais completa, colocando em prática os conteúdos abordados sobre DocLoaders, chunking, embeddings, vector stores e busca por similaridade. A ideia foi ir além de um exemplo isolado e montar uma estrutura mais próxima de um cenário real, trabalhando com múltiplas fontes de documentos e estratégias diferentes de processamento.
Como já havia ocorrido na atividade anterior, mantive a decisão de não depender da OpenAI por conta da limitação de quota/crédito identificada anteriormente. Por isso, a implementação foi adaptada para uma abordagem local-first, utilizando modelos e ferramentas locais ou gratuitas, sem perder o objetivo técnico principal da atividade.
O fluxo implementado nesta entrega foi:
documentos → loaders → metadados → chunking → embeddings → vector store → busca por similaridade → validação dos resultados
O que foi implementado
Nesta atividade, implementei e validei o carregamento de documentos a partir de diferentes fontes:
arquivos .txt com TextLoader;
arquivos PDF com PyPDFLoader, incluindo extração de metadados como fonte, página e total de páginas;
páginas web com WebBaseLoader;
múltiplos arquivos dentro de diretórios com DirectoryLoader;
união de fontes diferentes com MergedDataLoader.
Depois disso, apliquei diferentes estratégias de divisão dos documentos:
chunking simples por contagem de caracteres;
chunking recursivo com RecursiveCharacterTextSplitter;
chunking por tokens com tiktoken;
chunking semântico com SemanticChunker.
Também implementei a geração de embeddings usando alternativa local ao OpenAI:
HuggingFaceEmbeddings, com modelo multilíngue;
posteriormente, avancei também para testes com bge-m3 via Ollama, buscando melhorar a qualidade dos embeddings em um cenário local.
Na parte de armazenamento vetorial, utilizei:
InMemoryVectorStore;
FAISS local.
E por fim, validei a recuperação semântica dos documentos por meio de:
busca por similaridade;
retorno de scores;
filtro por metadados;
conferência manual dos trechos recuperados.
Validação da execução
A execução foi concluída com sucesso.
No primeiro script da atividade, consegui validar:
carregamento de TXT;
carregamento de PDF com metadados;
carregamento de conteúdo web;
carregamento de diretório;
união das fontes;
chunking por caracteres;
chunking recursivo;
chunking por tokens;
chunking semântico;
criação de vector store em memória;
criação de vector store FAISS;
busca por similaridade com score;
busca com filtro por metadados.
Os resultados de similaridade foram coerentes. Por exemplo, perguntas sobre cartão corporativo recuperaram a política de cartão, perguntas sobre reembolso recuperaram a política de reembolso, perguntas sobre fornecedores localizaram o conteúdo do PDF e perguntas sobre viagens recuperaram a política de viagens. Isso ajudou a validar que a recuperação semântica estava funcionando corretamente.
Além disso, avancei em uma segunda variação mais completa da pipeline, utilizando PDFs reais em uma pasta própria, embeddings locais com bge-m3, modelo local llama3.2:3b e FAISS. Nessa execução, o pipeline carregou vários PDFs, extraiu dezenas de páginas/documentos, gerou chunks com tokenizer Hugging Face e validou a geração de embeddings locais com vetores de 1024 dimensões.
Arquivos principais para validação
rag_pdfs_ollama_faiss_langchain.ipynb
rag_pipeline_completo.py
Commit da atividade
Implementa loaders, chunking e busca vetorial com alternativas locais