Este projeto implementa um sistema completo de Geração Aumentada por Recuperação (RAG) que permite conversar com seus próprios documentos PDF.
Python1 Estrelas17 Commits
Chatbot RAG com Documentos PDF usando Gemini e LangChain
Este projeto implementa um sistema completo de Geração Aumentada por Recuperação (RAG) que permite conversar com seus próprios documentos PDF. A solução extrai conteúdo de PDFs, incluindo textos, tabelas e imagens, utiliza a IA do Google (Gemini) para limpar e refinar o conteúdo extraído, o indexa em um banco de dados vetorial e fornece uma interface de chat através de uma API web modular construída com FastAPI.
✨ Principais Funcionalidades
Extração Abrangente de PDFs: Converte PDFs (tanto digitais quanto escaneados) em Markdown. Utiliza OCR (Tesseract) para páginas baseadas em imagem.
Refinamento com IA: Emprega um modelo generativo (Gemini) para limpar e reestruturar o Markdown extraído, corrigindo parágrafos quebrados, formatando títulos e removendo artefatos indesejados.
Banco de Dados Vetorial: Cria embeddings do texto processado usando os modelos da Google e os armazena localmente no ChromaDB para recuperação rápida de informações.
Chat Conversacional com Memória: Mantém o histórico da conversa para responder a perguntas de acompanhamento de forma contextual.
Citação de Fontes: As respostas da API indicam os documentos de origem que foram usados para gerar a resposta.
API Web Modular: Oferece uma API robusta e escalável construída com FastAPI, com endpoints claros para chat e verificação de saúde do sistema.
Interface de Linha de Comando: Inclui um script para interagir diretamente com o sistema RAG pelo terminal.
🚀 Fluxo de Trabalho do Projeto
O projeto é estruturado em uma pipeline sequencial de processamento de dados e interação:
📥 Ingestão de PDFs: Você coloca seus arquivos .pdf na pasta PDFs/.
📄 Conversão para Markdown: O script 1_converter_pdfs.py processa cada PDF, extrai textos, tabelas e imagens, e salva o resultado como arquivos .md na pasta arquivos_markdown_pdfs/.
🧹 Refinamento com IA: O script 2.5_refinar_markdown_com_ia.py lê os arquivos Markdown brutos, os envia para a API do Gemini para limpeza e formatação, e salva a versão final em markdown_final_limpo_ia/.
🧠 Criação do Banco Vetorial: O script 2_criar_banco_vetorial.py segmenta os documentos limpos, gera embeddings para cada segmento e os armazena no diretório banco_de_dados_vetorial/ usando o ChromaDB.
💬 Interação:
Via API: A aplicação FastAPI (app/main.py) carrega o banco vetorial e o modelo de linguagem para responder a perguntas através do endpoint /chat.
Via Terminal: O script 3_perguntar_ao_rag.py permite que você faça perguntas diretamente no seu terminal.
🛠️ Tecnologias Utilizadas
Linguagem: Python 3
IA e LLMs: Google Gemini (para geração, refinamento e embeddings)
Framework de Orquestração: LangChain
Framework da API: FastAPI
Banco de Dados Vetorial: ChromaDB
Processamento de PDF: PyMuPDF (fitz)
OCR: Pytesseract
Validação de Dados: Pydantic
📂 Estrutura de Pastas
.
├── PDFs/ # 1. Coloque seus PDFs de entrada aqui
├── arquivos_markdown_pdfs/ # 2. Saída intermediária dos Markdowns brutos (ignorado pelo Git)
├── markdown_final_limpo_ia/ # 3. Saída dos Markdowns limpos pela IA (ignorado pelo Git)
├── banco_de_dados_vetorial/ # 4. Banco de dados vetorial ChromaDB (ignorado pelo Git)
├── app/ # Código-fonte da aplicação FastAPI
│ ├── endpoints/ # Módulos com os endpoints da API
│ │ ├── chat.py # Lógica do endpoint /chat
│ │ └── health.py # Lógica do endpoint /health
│ ├── models.py # Modelos Pydantic para a API
│ └── main.py # Ponto de entrada e configuração da API FastAPI
├── 1_converter_pdfs.py # Script para converter PDFs em Markdown
├── 2.5_refinar_markdown_com_ia.py # Script para limpar o Markdown com IA
├── 2_criar_banco_vetorial.py # Script para criar o banco de dados vetorial
├── 3_perguntar_ao_rag.py # Script para fazer perguntas via CLI
├── .env.example # Arquivo de exemplo para variáveis de ambiente
├── .gitignore # Arquivos e pastas a serem ignorados pelo Git
└── README.md # Este arquivo
⚙️ Configuração e Instalação
Pré-requisitos
Python 3.8 ou superior
Uma chave de API do Google AI Studio.
Tesseract OCR: Para processar PDFs escaneados, você precisa instalar o Tesseract em seu sistema.
Windows: Siga as instruções do Tesseract at UB Mannheim e adicione o caminho do executável ao PATH do sistema.
Linux (Debian/Ubuntu): sudo apt-get install tesseract-ocr tesseract-ocr-por
macOS: brew install tesseract
Passos de Instalação
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:
python -m venv .venv
source .venv/bin/activate # No Windows: .venv\Scripts\activate
Instale as dependências:
(Nota: Um arquivo requirements.txt seria ideal. Com base nos scripts, as dependências são as seguintes)
Faça sua pergunta no campo question do corpo da requisição e envie. O histórico da conversa (chat_history) será preenchido e retornado automaticamente pela API.
📚 Documentação da API
A API expõe dois endpoints principais:
GET /health
Verifica o status da API. Retorna uma resposta de sucesso se a API estiver em execução.
Resposta de Sucesso (200 OK):
{"status":"ok","version":"3.3.0"}
POST /chat
O endpoint principal para interagir com o chatbot RAG. Ele recebe uma pergunta e o histórico da conversa e retorna a resposta, as fontes e o histórico atualizado.
Corpo da Requisição (QueryRequest):
{"question":"Qual é a principal recomendação sobre governança corporativa?","chat_history":[{"question":"Olá","answer":"Olá! Tudo bem? Como posso ajudar você hoje? 😊","sources":[]}]}
Resposta de Sucesso (QueryResponse):
{"answer":"A principal recomendação é a implementação de um conselho de administração diversificado e independente para garantir a tomada de decisões imparcial e estratégica.","sources":[{"source_file":"meu_documento_de_governanca.md"}],"chat_history":[{"question":"Olá","answer":"Olá! Tudo bem? Como posso ajudar você hoje? 😊","sources":[]},{"question":"Qual é a principal recomendação sobre governança corporativa?","answer":"A principal recomendação é a implementação de um conselho de administração diversificado e independente para garantir a tomada de decisões imparcial e estratégica.","sources":
📝 .gitignore
O arquivo .gitignore está configurado para excluir:
Arquivos de ambiente e de IDE (.env, .idea, .venv).
Pastas de dados gerados (arquivos_markdown_pdfs, markdown_final_limpo_ia, banco_de_dados_vetorial, PDFsOLD).
Caches do Python (__pycache__).
Isso garante que apenas o código-fonte seja versionado, mantendo o repositório limpo e leve.