Este projeto é uma implementação modular de um sistema RAG (Retrieval-Augmented Generation) utilizando LangChain e Ollama. A aplicação permite interagir via terminal com uma base de conhecimento formada por documentos PDF, utilizando modelos de LLM rodando localmente.
O projeto foi refatorado seguindo princípios de Engenharia de Software, focando em separação de responsabilidades (SoC), manutenibilidade e eficiência.
- RAG Local: Utiliza modelos open-source rodando na sua própria máquina via Ollama (sem custos de API).
- Arquitetura Modular: Código desacoplado em módulos de ingestão, banco vetorial, configuração e pipeline de IA.
- Persistência de Vetores: O índice FAISS é salvo em disco (
faiss_index/). O processamento pesado dos documentos só ocorre na primeira execução; nas seguintes, o carregamento é instantâneo. - Streaming de Resposta: A resposta é gerada token por token no terminal, proporcionando uma experiência de chat fluida.
- Observabilidade (Opcional): Integração pronta para o LangSmith para tracing e debugging das cadeias de execução.
- Linguagem: Python 3.10+
- Orquestração: LangChain
- LLM & Embeddings: Ollama (Gemma 3 & BGE-M3)
- Vector Store: FAISS
- Tokenização: HuggingFace Transformers
- Ter o Python instalado.
- Ter o Ollama instalado e rodando.
- Baixar os modelos necessários via terminal:
# Modelo de LLM (Gemma 3 - 4B)
ollama pull gemma3:4b
# Modelo de Embeddings (BGE-M3)
ollama pull bge-m3Nota: Se desejar alterar os modelos, edite o arquivo
src/config.pyou utilize variáveis de ambiente.
git clone [https://github.com/seu-usuario/seu-repositorio.git](https://github.com/seu-usuario/seu-repositorio.git)
cd seu-repositorio# Windows
python -m venv venv
venv\Scripts\activate
# Linux/Mac
python3 -m venv venv
source venv/bin/activatepip install -r requirements.txtPara monitorar o funcionamento interno da IA, crie um arquivo .env na raiz do projeto com as chaves abaixo. Se não quiser usar, o projeto rodará normalmente sem ele.
# Arquivo .env
LANGCHAIN_TRACING_V2=true
LANGCHAIN_ENDPOINT="[https://api.smith.langchain.com](https://api.smith.langchain.com)"
LANGCHAIN_API_KEY="sua-api-key-aqui"
LANGCHAIN_PROJECT="rag-local-ollama"Coloque os arquivos PDF que deseja consultar dentro da pasta:
documents/
python main.py.
├── documents/ # Coloque seus PDFs aqui
├── faiss_index/ # Banco vetorial salvo (gerado automaticamente)
├── src/ # Código fonte
│ ├── config.py # Configurações globais
│ ├── ingestor.py # Leitura e chunking de PDFs
│ ├── vector_db.py # Gerenciamento do índice FAISS
│ └── rag_chain.py # Definição do Prompt e Chain
├── main.py # Arquivo principal (CLI)
├── requirements.txt # Dependências
├── .env # Variáveis de ambiente (não versionado)
└── README.md # Documentação
O sistema verifica se a pasta faiss_index/ existe para carregar o banco rapidamente.
Para adicionar ou remover documentos:
- Adicione/remova os PDFs na pasta
documents/. - Apague a pasta
faiss_index/. - Rode o
python main.pynovamente. O sistema irá reprocessar os arquivos e criar um índice atualizado.
Sinta-se à vontade para abrir issues e pull requests para melhorias no código ou na documentação.