Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Projeto] Faça como eu fiz: RAG Avançado

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.

2 respostas
solução!

Oi, Leandro! Como vai?

Agradeço por compartilhar.

Gostei da forma como você organizou a implementação da pipeline RAG, trabalhando com DocLoaders, diferentes estratégias de chunking, embeddings locais, FAISS e validação por score de similaridade. A escolha por adaptar a atividade para um ambiente local e sem custo também mostra uma boa preocupação com viabilidade prática, sem perder o foco técnico da proposta.

Sua entrega ficou bem completa e demonstra que você entendeu os principais blocos de uma aplicação RAG. Dica: continue registrando no README os avisos e decisões técnicas que surgirem durante os testes, explicando o que foi ajustado e como isso impactou a execução, pois isso facilita muito a manutenção e a análise futura do projeto.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Show, obrigado pelo feedback Lorena.