Un sistema completo de Retrieval-Augmented Generation (RAG) que permite consultar documentos PDF utilizando inteligencia artificial completamente gratis. Este proyecto utiliza Groq (LLM gratuito) y HuggingFace (embeddings locales gratuitos) para crear un asistente conversacional que responde preguntas basándose en tus documentos.
- 🆓 100% Gratuito - Sin costos de API (Groq + HuggingFace)
- 🌐 Interfaz Web Moderna - App web con Streamlit (además de CLI)
- 💬 Chat Interactivo - Haz múltiples preguntas en una sesión
- 📄 Citación de Fuentes - Muestra páginas exactas y relevancia porcentual
- 🔒 Privacidad - Embeddings locales, tus documentos no salen de tu PC
- ⚡ Rápido - Groq ofrece una de las inferencias más rápidas del mercado
- 🎯 Preciso - Respuestas basadas SOLO en tus documentos
- ⚙️ Configurable - Ajusta modelo, temperatura y fuentes desde la interfaz
- ❌ Eliminado: OpenAI (embeddings + LLM de pago)
- ✅ Agregado: Groq (LLM gratuito con llama-3.3-70b)
- ✅ Agregado: HuggingFace (embeddings locales con all-MiniLM-L6-v2)
- Interfaz conversacional en terminal
- Historial de preguntas en una sola sesión
- Comandos de salida:
exit,quit,salir,q
📚 Information retrieved from:
📄 Tu_Documento.pdf - Page 23 (85.2% relevance to your question)
📄 Tu_Documento.pdf - Page 45 (78.6% relevance to your question)
📄 Tu_Documento.pdf - Page 67 (72.3% relevance to your question)
Retrieval-Augmented Generation es una técnica que mejora las respuestas de los modelos de lenguaje (LLMs) al combinar su conocimiento interno con información extraída de documentos externos. En lugar de depender únicamente del conocimiento con el que fue entrenado el modelo, RAG permite:
- ✅ Acceder a información actualizada y específica de tu dominio
- ✅ Generar respuestas basadas en documentos internos (políticas, manuales, reportes, etc.)
- ✅ Reducir alucinaciones al fundamentar las respuestas en datos reales
- ✅ Crear asistentes especializados sin necesidad de reentrenar modelos
┌─────────────────────────────────────────────────────────────────┐
│ FLUJO DE DATOS RAG │
└─────────────────────────────────────────────────────────────────┘
1. PROCESAMIENTO DE DOCUMENTOS (Offline)
┌──────────────┐ ┌─────────────────┐ ┌──────────────┐
│ PDFs en │ ──> │ file_processor │ ──> │ Chunks │
│ /documents │ │ .chunk_pdfs()│ │ (fragmentos)│
└──────────────┘ └─────────────────┘ └──────────────┘
│
▼
┌──────────────┐ ┌─────────────────┐ ┌──────────────┐
│ Base de datos│ <── │ chroma_db │ <── │ HuggingFace │
│ vectorial │ │.save_to_chroma()│ │ Embeddings │
│ (ChromaDB) │ └─────────────────┘ │ (LOCAL) │
└──────────────┘ └──────────────┘
2. CONSULTA Y GENERACIÓN (Runtime)
┌──────────────┐ ┌─────────────────┐ ┌──────────────┐
│ Usuario │ ──> │ Búsqueda │ ──> │ Documentos │
│ pregunta │ │ semántica │ │ relevantes │
│ │ │ (ChromaDB) │ │ + páginas │
└──────────────┘ └─────────────────┘ └──────────────┘
│
▼
┌──────────────┐ ┌─────────────────┐ ┌──────────────┐
│ Respuesta │ <── │ Groq LLM │ <── │ Prompt │
│ + Fuentes │ │ (llama-3.3) │ │ + Contexto │
└──────────────┘ └─────────────────┘ └──────────────┘
RAG-app-python/
├── main.py # Chat interactivo con RAG
├── .env.example # Template para configuración
├── .env # Tu API key (NO se sube a GitHub)
├── src/
│ ├── file_processor.py # Procesamiento y chunking de PDFs
│ └── chroma_db.py # Gestión de la base de datos vectorial
├── documents/ # 📁 Coloca tus PDFs aquí
├── chroma/ # Base de datos vectorial (se genera automáticamente)
├── requirements.txt # Dependencias del proyecto
└── README.md # Este archivo
- Python 3.8 o superior
- Cuenta gratuita en Groq (console.groq.com)
-
Clonar el repositorio
git clone https://github.com/francoSW99/RAG-app-python.git cd RAG-app-python -
Crear entorno virtual
python -m venv venv # Windows venv\Scripts\activate # Linux/Mac source venv/bin/activate
-
Instalar dependencias
pip install -r requirements.txt
-
Configurar API Key de Groq (Gratis)
a. Obtén tu API key gratuita en: https://console.groq.com/
b. Copia el archivo de configuración:
# Windows copy .env.example .env # Linux/Mac cp .env.example .env
c. Edita
.envy agrega tu API key:GROQ_API_KEY=gsk_tu_api_key_aqui -
Agregar tus documentos PDF
# Copia tus archivos PDF a la carpeta documents/ -
Ejecutar el chatbot
Opción A: Interfaz Web (Recomendado)
streamlit run app.py
Se abrirá automáticamente en tu navegador en
http://localhost:8501Opción B: Interfaz de Terminal
python main.py
La forma más fácil e intuitiva de usar el chatbot:
streamlit run app.pyCaracterísticas de la interfaz web:
- 🎨 Diseño moderno y responsive
- ⚙️ Configuración interactiva (modelo, temperatura, fuentes)
- 💬 Chat con historial visual
- 📊 Gráficos de relevancia expandibles
- 🔄 Fácil reinicio y ajuste de parámetros
- 📱 Funciona en cualquier dispositivo con navegador
Para usuarios que prefieren la línea de comandos:
python main.pyEjemplo de uso:
================================================================================
RAG CHATBOT - Powered by Groq + HuggingFace (100% FREE)
================================================================================
Documents loaded: 45 chunks
Type 'exit', 'quit', or 'salir' to end the conversation
================================================================================
Your question: ¿Cuáles son las técnicas principales del libro?
Thinking...
Answer:
Basado en el contexto proporcionado, las técnicas principales incluyen:
1. **La Ley de Pareto (80/20)**: Enfócate en el 20% de tareas que generan el
80% de resultados.
2. **Método ABCDE**: Categoriza tareas por prioridad - A (críticas), B (importantes),
C (opcionales), D (delegar), E (eliminar).
3. **Comer la Rana**: Realiza tu tarea más difícil primero cada mañana.
Source: Administración del tiempo - Tracy Brayan.pdf
📚 Information retrieved from:
📄 Administración del tiempo - Tracy Brayan.pdf - Page 23 (89.5% relevance to your question)
📄 Administración del tiempo - Tracy Brayan.pdf - Page 45 (82.1% relevance to your question)
📄 Administración del tiempo - Tracy Brayan.pdf - Page 67 (75.8% relevance to your question)
================================================================================
📖 Ver guía completa de Streamlit
Modifica k en main.py (línea 79):
docs = db.similarity_search_with_score(query, k=5) # Consulta 5 chunksModifica en main.py (línea 32):
model = ChatGroq(
model="llama-3.1-70b-versatile", # Otros: llama-3.1-8b-instant, gemma2-9b-it
temperature=0,
)Modelos disponibles en Groq (todos gratuitos):
llama-3.3-70b-versatile- Recomendado, mejor calidad y más recientellama-3.1-70b-versatile- Excelente calidad, muy confiablellama-3.1-8b-instant- Más rápido, ideal para prototiposgemma2-9b-it- Compacto y eficiente
Edita src/file_processor.py (líneas 14-16):
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000, # Chunks más grandes (más contexto)
chunk_overlap=200, # Mayor overlap
length_function=len,
add_start_index=True,
)Modifica en main.py (línea 20):
embedding_model = HuggingFaceEmbeddings(
model_name="sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2", # Mejor para español
model_kwargs={'device': 'cpu'},
encode_kwargs={'normalize_embeddings': True}
)- groq - API gratuita para LLM (llama-3.3-70b)
- langchain-groq - Integración de Groq con LangChain
- sentence-transformers - Embeddings locales gratuitos
- langchain-huggingface - Integración de HuggingFace con LangChain
- langchain - Framework para aplicaciones con LLMs
- chromadb - Base de datos vectorial local
- pypdf - Lector de archivos PDF
- python-dotenv - Manejo seguro de variables de entorno
| Característica | Versión Anterior (OpenAI) | Versión Actual (Groq + HF) |
|---|---|---|
| Costo LLM | $0.002 por 1K tokens | 🆓 Gratis |
| Costo Embeddings | $0.13 por 1M tokens | 🆓 Gratis |
| Privacidad Embeddings | Datos enviados a OpenAI | ✅ 100% Local |
| Interfaz | Un query y termina | ✅ Chat Interactivo |
| Fuentes | No mostraba | ✅ Páginas + % |
| Velocidad | Rápido | ⚡ Muy rápido |
| Internet | Siempre requerido | Solo LLM (embeddings offline) |
- ✅ API keys en archivo
.env(no se sube a GitHub) - ✅
.envincluido en.gitignore - ✅ Template
.env.examplepara setup - ✅ Validación de API key al inicio
- ✅ Mensajes de error claros si falta configuración
Sí, Groq ofrece API gratuita con límites generosos. HuggingFace ejecuta localmente, sin costos.
Groq es uno de los LLMs más rápidos disponibles, ~10x más rápido que GPT-4 en muchos casos.
Los embeddings funcionan offline después de la primera descarga. El LLM (Groq) requiere internet.
Sí, solo colócalos en la carpeta documents/ y ejecuta el programa.
El sistema soporta múltiples idiomas. Para mejor rendimiento en español, usa el embedding paraphrase-multilingual-MiniLM-L12-v2.
Depende de tu RAM. El modelo de embeddings es ligero (~90MB). Puedes procesar cientos de PDFs.
- 📚 Asistente de estudio - Pregunta sobre libros y apuntes
- 🏢 Documentación interna - Consulta manuales de empresa
- ⚖️ Análisis legal - Busca en contratos y regulaciones
- 🔬 Investigación - Consulta papers académicos
- 📖 Análisis de libros - Extrae insights de libros técnicos
- La base de datos ChromaDB se recrea en cada ejecución (fácil de hacer persistente)
- Solo soporta archivos PDF (fácil agregar DOCX, TXT, etc.)
- El LLM requiere conexión a internet
- Límites de rate de Groq (generosos pero existen)
- Interfaz web con Streamlit ✅
- Persistencia de ChromaDB entre ejecuciones
- Soporte para DOCX, TXT, Markdown
- Sistema de caché para reducir llamadas a Groq
- Modo multimodal (imágenes en PDFs)
- Exportar conversaciones
- Métricas de calidad de respuestas
- Upload de PDFs desde la interfaz web
- Autenticación para deployments públicos
- Documentación de Groq
- Documentación de LangChain
- ChromaDB Documentation
- HuggingFace Sentence Transformers
Las contribuciones son bienvenidas! Por favor:
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add some AmazingFeature') - Push a la rama (
git push origin feature/AmazingFeature) - Abre un Pull Request
Este proyecto está bajo la licencia MIT. Ver LICENSE para más detalles.
Franco SW - @francoSW99
- Groq por proporcionar API gratuita de LLM
- HuggingFace por modelos de embeddings gratuitos
- LangChain por el excelente framework
- ChromaDB por la base de datos vectorial
⭐ Si este proyecto te fue útil, considera darle una estrella en GitHub!
Nota: Este es un proyecto educativo. Para uso en producción, considera implementar manejo de errores robusto, logging, monitoreo, y medidas de seguridad adicionales.