orlandoVergara/Rag_asistente
Asistente RAG Literario: Análisis de Jorge Luis Borges
Este proyecto implementa un sistema de RAG (Retrieval-Augmented Generation) para actuar como asistente experto en obras literarias —por ejemplo, la obra de Jorge Luis Borges— permitiendo consultas en lenguaje natural sobre PDFs privados y devolviendo respuestas basadas únicamente en el contenido, con citas de fuente.
📖 Problema y caso de uso
Problema: los textos literarios densos requieren análisis semántico que va más allá de búsquedas por palabra clave (Ctrl+F). Caso de uso: un estudiante o investigador pregunta cosas como “¿Qué simbolizan los espejos según el narrador?” y el sistema recupera fragmentos relevantes del PDF, los envía al LLM y genera una respuesta con referencia de página.
🏗 Arquitectura (resumen)
- Ingesta de documentos (
ingest_documents.py): carga PDFs desdedata/, extrae y limpia texto. - Chunking: fragmentos ~1000 caracteres con overlap 200.
- Embeddings: convierte fragmentos usando
text-embedding-004. - Almacenamiento: vectores y metadatos en ChromaDB (persistente, local).
- Recuperación: convierte la consulta en vector, busca k-NN y recupera los 4 fragmentos más relevantes.
- Generación: construye prompt (Instrucciones + Contexto + Pregunta) y genera respuesta vía
gemini-2.5-flash.
🛠 Stack tecnológico
- Lenguaje: Python 3.11
- Orquestación: LangChain (v0.3.x)
- Interfaz: Streamlit
- DB vectorial: ChromaDB (local)
- Modelos (Google Gemini API):
- LLM:
gemini-2.5-flash - Embeddings:
models/text-embedding-004 - Procesamiento PDF:
pypdf
🚀 Instalación y ejecución
Sigue estos pasos para ejecutar localmente:
- Clonar el repositorio
git clone <URL_DE_TU_REPOSITORIO>
cd mi_proyecto_rag- Crear y activar entorno virtual
# Crear entorno
python -m venv venv
# Activar (Windows)
.\venv\Scripts\activate
# Activar (macOS/Linux)
source venv/bin/activate- Instalar dependencias
pip install -r requirements.txt- Configurar variables de entorno Crea un archivo
.enven la raíz con tu clave:
GOOGLE_API_KEY= AIzaSyCvzAhZpP6LGl-TLh9Utp_BNiElZL0yJTU- Ingesta de documentos (carga de datos) Coloca tus PDFs en la carpeta
data/y ejecuta:
python ingest_documents.pySe generará la carpeta chroma_db con la base de datos vectorial.
- Ejecutar la aplicación
streamlit run app.pyLa app normalmente queda en http://localhost:8501
🔍 Ejemplos de consultas de prueba
- Recuperación de hechos: "¿Qué vio Carlos Argentino Daneri en el sótano?"
- Análisis simbólico: "¿Cuál es la relación entre los espejos y la abominación?"
- Síntesis: "Explícame el concepto de infinito presentado en estos textos."
- Búsqueda específica: "¿Quién es Beatriz Viterbo?"
⚖️ Decisiones de diseño y limitaciones
Decisiones:
gemini-2.5-flashpor baja latencia y buen balance velocidad/precisión.- ChromaDB local para simplificar despliegue sin servicios externos.
- Streamlit para una interfaz rápida y accesible.
Limitaciones:
- Single-turn RAG: cada pregunta se procesa de forma independiente (no mantiene memoria conversacional).
- PDFs sin capa de texto (escaneos sin OCR) no se procesan correctamente.
- Límites de la API (429) pueden ocurrir con muchas peticiones en poco tiempo.
📚 Citación de fuentes
Cada respuesta incluye un desplegable “Ver fuentes consultadas” que lista el nombre del PDF y el número de página de los fragmentos usados para construir la respuesta.
Si quieres, puedo:
- Exportar este README listo para pegar en
/c:/Users/Ferna/Desktop/mi_proyecto_rag/README.MD, - O aplicar cambios concretos (ej.: cambiar chunk size, número de vecinos k, o adaptar a otro proveedor de embeddings).
