Sistema de Retrieval-Augmented Generation (RAG) construido con una arquitectura modular y limpia. Combina búsqueda de documentos mediante BM25 con generación de respuestas usando LLMs a través de APIs externas (Groq, OpenAI) o locales (Ollama).
El flujo del sistema sigue una pipeline clásica de RAG:
Consulta del usuario → Retriever (BM25) → Contexto relevante → LLM → Respuesta con citas
- Retrieval: Se buscan los documentos más relevantes del corpus usando el algoritmo BM25 (Okapi).
- Prompt Engineering: Se construye un prompt con el contexto recuperado, instruyendo al modelo a responder solo con la información disponible y citar fuentes.
- Generation: Se envía el prompt a un LLM (Groq, OpenAI u Ollama) que genera la respuesta final.
| Módulo | Descripción |
|---|---|
corpus.py |
Define el corpus de documentos (50 documentos sobre NLP, IR, ML y temas generales) |
retriever.py |
Implementa BM25Retriever usando rank_bm25 para búsqueda por relevancia |
llm_service.py |
Gestiona la comunicación con APIs de LLMs (Groq, OpenAI, Ollama) |
app.py |
Interfaz web con Streamlit que orquesta todo el flujo RAG |
git clone https://github.com/<tu-usuario>/rag-modular.git
cd rag-modularpython -m venv venv
# Windows
venv\Scripts\activate
# Linux/macOS
source venv/bin/activatepip install -r requirements.txtEjecutar la aplicación:
streamlit run app.pyEsto abrirá la interfaz web en http://localhost:8501.
En la barra lateral puedes configurar:
- Proveedor LLM: Groq, OpenAI u Ollama (local)
- Modelo: Selecciona entre los modelos disponibles del proveedor elegido
- API Key: Requerida para Groq y OpenAI
- Top K: Número de documentos a recuperar (1-10)
| Proveedor | Modelos disponibles | API Key |
|---|---|---|
| Groq | llama-3.3-70b-versatile, llama-3.1-8b-instant, mixtral-8x7b-32768, gemma2-9b-it | Sí (console.groq.com) |
| OpenAI | gpt-4o-mini, gpt-4o, gpt-3.5-turbo | Sí (platform.openai.com) |
| Ollama | llama2, mistral, phi3 | No (ejecución local) |
💡 Groq ofrece un tier gratuito generoso, ideal para pruebas.
RAG/
├── app.py # Aplicación principal (Streamlit)
├── corpus.py # Corpus de documentos
├── retriever.py # Motor de búsqueda BM25
├── llm_service.py # Servicio de conexión con LLMs
├── requirements.txt # Dependencias del proyecto
└── README.md # Este archivo
- Python 3.8+
- Streamlit — Interfaz web interactiva
- rank_bm25 — Implementación del algoritmo BM25 Okapi
- requests — Comunicación HTTP con APIs de LLMs
Este proyecto está bajo la licencia MIT.