Segue o link do repositório com a implementação da atividade:
Link do Git: https://github.com/Moquiuti/tecnicas_avancadas_rag
Nesta etapa, procurei colocar em prática os conteúdos abordados sobre DocLoaders, estratégias de chunking, embeddings e armazenamento vetorial, mantendo a mesma linha da atividade anterior: preservar o objetivo técnico do curso, mas adaptando a solução para um ambiente local e sem custo, já que a utilização da OpenAI havia retornado erro de quota/crédito insuficiente.
A proposta original envolve o uso de OpenAI Embeddings e também menciona integrações com ferramentas externas, como Pinecone. Como optei por não depender de serviços pagos ou de APIs com crédito, adaptei a implementação utilizando HuggingFaceEmbeddings, InMemoryVectorStore e FAISS local. O Pinecone ficou documentado no código como referência conceitual, mas não foi utilizado na execução prática por decisão de manter a atividade 100% local e sem custo.
O objetivo principal foi validar a esteira completa de preparação e recuperação de documentos dentro de uma pipeline RAG:
documentos de diferentes fontes
→ carregamento com loaders
→ unificação das fontes
→ chunking por diferentes estratégias
→ embeddings locais
→ armazenamento vetorial
→ busca por similaridade
→ validação com score e filtros
Nesta entrega foram implementados e validados:
- carregamento de arquivo .txt com TextLoader;
- carregamento de PDF com PyPDFLoader, incluindo extração de metadados como página, fonte e total de páginas;
- carregamento de página web com WebBaseLoader;
- carregamento de múltiplos arquivos de um diretório com DirectoryLoader;
- união de diferentes fontes com MergedDataLoader;
- chunking simples por caracteres;
- chunking recursivo com RecursiveCharacterTextSplitter;
- chunking por tokens com tiktoken;
- chunking semântico com SemanticChunker;
- embeddings locais com HuggingFaceEmbeddings, usando modelo multilíngue;
- armazenamento vetorial em memória com InMemoryVectorStore;
- armazenamento vetorial local com FAISS;
- buscas por similaridade com retorno de score;
- busca com filtro por metadados;
- bloco conceitual comentado para Pinecone, sem execução por decisão de custo zero.
Durante a execução, também surgiram alguns avisos e ajustes naturais de ambiente, como instalação do tiktoken, avisos do Hugging Face por uso sem autenticação, aviso de USER_AGENT no WebBaseLoader e mensagens sobre chunk maior que o tamanho configurado. Esses pontos não impediram a execução e serviram para entender melhor como cada componente se comporta na prática.
Um ponto que achei interessante foi a validação dos scores de similaridade. As buscas retornaram resultados coerentes com as perguntas feitas: perguntas sobre cartão corporativo recuperaram a política de cartão; perguntas sobre reembolso trouxeram 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 visualizar melhor como a recuperação semântica funciona antes mesmo da resposta final do modelo.
Arquivos principais para validação
Para facilitar a análise, os arquivos mais importantes criados ou atualizados nesta etapa são:
atividade_docloaders_chunking_embeddings.py
Arquivo principal da atividade. Ele concentra os testes com loaders, chunking, embeddings, vector stores, busca por similaridade, scores, filtros e o bloco conceitual do Pinecone.
gerar_pdf_exemplo.py
Script usado para gerar um PDF simples de exemplo e permitir o teste do PyPDFLoader com metadados.
dados/politica_cartao.txt
Documento TXT utilizado para testar o TextLoader.
dados/manual_compras.pdf
PDF gerado para testar o PyPDFLoader.
dados/diretorio/politica_reembolso.txt
Arquivo usado no teste com DirectoryLoader.
dados/diretorio/politica_viagens.txt
Segundo arquivo usado no teste com DirectoryLoader.
requirements.txt
O commit referente a esta entrega pode ser identificado como:* Implementa loaders, chunking e busca vetorial com alternativas locais*
De forma geral, procurei ir além de apenas executar os exemplos isoladamente. A ideia foi montar uma base prática para entender como uma pipeline RAG começa de verdade: lendo documentos de origens diferentes, preparando esses dados com boas estratégias de divisão e validando se a recuperação vetorial realmente encontra os trechos corretos.
A implementação ainda é um laboratório de estudo, mas ela já demonstra os principais blocos que aparecem em aplicações reais de RAG, principalmente quando precisamos trabalhar com diferentes fontes de conhecimento e alternativas locais para reduzir custo e dependência de APIs externas.