Um assistente de conversação baseado em documentos (RAG), implementado com LangChain, Google Gemini e Busca Híbrida.
Este repositório é um projeto pessoal de aprendizado focado na exploração do framework LangChain. O objetivo principal foi construir uma aplicação de RAG (Retrieval-Augmented Generation) robusta, capaz de ler documentos PDF e responder a perguntas sobre eles com base em contexto, mantendo o histórico da conversa.
Diferente de implementações simples, este projeto explora conceitos avançados como Busca Híbrida (Hybrid Search) e persistência de memória conversacional.
Para quem está chegando agora: o LangChain é um framework poderoso projetado para simplificar o desenvolvimento de aplicações que utilizam Grandes Modelos de Linguagem (LLMs). Ele atua como uma "cola", permitindo conectar LLMs (como GPT ou Gemini) a fontes de dados externas (PDFs, Bancos de Dados, Web) e criar fluxos de trabalho complexos (Chains e Agentes).
O sistema foi modularizado em pipelines para facilitar o entendimento e a manutenção:
- Ingestão de Dados (ETL):
- Carrega PDFs de um diretório local (
docs/). - Realiza a quebra do texto em pedaços menores (Chunks) para otimizar o contexto.
- Gera Embeddings utilizando o modelo do Google.
- Carrega PDFs de um diretório local (
- Armazenamento Vetorial:
- Utiliza o ChromaDB para armazenar os vetores semânticos dos documentos.
- Retrieval (Recuperação) Híbrido:
- Este é o diferencial do projeto. Utilizamos um
EnsembleRetrieverque combina:- Busca Semântica (Vector Store): Entende o significado e o contexto da pergunta (peso 0.6).
- Busca por Palavras-chave (BM25): Garante precisão em termos técnicos ou nomes específicos (peso 0.4).
- Este é o diferencial do projeto. Utilizamos um
- Geração de Resposta:
- Utiliza o modelo Google Gemini (via API) para gerar respostas naturais baseadas nos documentos recuperados e no histórico da conversa.
- Python 3.12+
- LangChain: Orquestração do fluxo de IA.
- Google Generative AI (Gemini): LLM e Embeddings.
- ChromaDB: Banco de dados vetorial local.
- Rank_BM25: Algoritmo de busca baseada em frequência de termos.
- Python-Dotenv: Gerenciamento de variáveis de ambiente.
- Python instalado.
- Uma API Key do Google AI Studio (Gemini).
-
Clone o repositório:
git clone [https://github.com/seu-usuario/seu-repositorio.git](https://github.com/seu-usuario/seu-repositorio.git) cd seu-repositorio -
Crie e ative um ambiente virtual:
python3 -m venv venv source venv/bin/activate # Linux/Mac # ou venv\Scripts\activate # Windows
-
Instale as dependências:
pip install -r requirements.txt
(Caso não tenha o arquivo requirements.txt, instale manualmente):
pip install langchain langchain-community langchain-google-genai langchain-chroma chromadb rank_bm25 pypdf python-dotenv
-
Configure as Variáveis de Ambiente: Crie um arquivo
.envna raiz do projeto e adicione sua chave:GOOGLE_API_KEY=sua_chave_aqui_cola_ela_inteira
-
Adicione seus Documentos: Crie uma pasta chamada
docsna raiz do projeto e coloque seus arquivos PDF lá. -
Execute a Aplicação:
python main.py
📁 projeto/
│
├── 📄 main.py # Ponto de entrada (Entry point) da aplicação
├── 📄 pipeline_etl.py # Carregamento de PDFs, Chunking e Criação do VectorDB
├── 📄 retriever.py # Configuração da busca Híbrida (BM25 + Chroma)
├── 📄 conversation_chain.py # Configuração da memória e da cadeia de conversação
├── 📄 .env # Arquivo de segredos (NÃO COMMITAR)
└── 📁 docs/ # Coloque seus PDFs aqui
Durante o desenvolvimento deste projeto, foram consolidados os seguintes conhecimentos:
- Como estruturar um projeto de IA modular.
- A importância do Chunking correto para não estourar a janela de contexto do modelo.
- A diferença entre busca vetorial (significado) e busca lexical (palavra exata) e como a união das duas (Hybrid Search) melhora a precisão.
- Gerenciamento de memória em conversas contínuas com LLMs.
Sinta-se à vontade para fazer um fork deste projeto, abrir issues ou enviar Pull Requests. Este é um ambiente de aprendizado!
Desenvolvido por Kauê Cruz 🚀