InsightRAG es un sistema de Generación Aumentada por Recuperación (RAG) diseñado para transformar documentos PDF estáticos en una base de conocimiento interactiva. Combina embeddings locales (privacidad/coste) con LLMs (Google Gemini) para sintetizar respuestas con trazabilidad.
- Hybrid RAG Pipeline: ingesta PDF → chunking → embeddings locales → ChromaDB → recuperación → respuesta con Gemini.
- Dynamic Model Selection: lista modelos disponibles desde el proveedor y permite elegir en UI.
- Vector Persistence: persistencia local en ChromaDB para iterar rápido.
- Sources / Traceability: devuelve evidencias con metadatos (página) + snippet.
- Professional UI: chat moderno con selección de modelo y carga de documentos.
La documentación técnica está en la carpeta docs/:
- docs/ARCHITECTURE.md: flujo completo PDF → vectores → RAG (incluye diagramas Mermaid).
- docs/API_GUIDE.md: contrato API, errores y notas operativas (incl. 429).
- docs/DECISIONS.md: justificación de decisiones (embeddings locales, chunking, persistencia, etc.).
| Component | Technology |
|---|---|
| Frontend | React + Vite + Axios + Tailwind |
| Backend | FastAPI + LangChain |
| Vector DB | ChromaDB |
| Embeddings | HuggingFace (local: sentence-transformers/all-MiniLM-L6-v2) |
| LLM | Google Gemini (via langchain-google-genai) |
cd backend
pip install -r requirements.txtCrea tu .env (puedes copiar el ejemplo):
copy .env.example .envAñade tu GOOGLE_API_KEY en backend/.env.
Arranque:
uvicorn src.main:app --reloadAPI (dev): http://127.0.0.1:8000
Swagger: http://127.0.0.1:8000/docs
cd frontend
npm installConfigura la URL del backend con variables de entorno (Vite):
frontend/.env(ya incluido en este repo para dev local)- ejemplo:
frontend/.env.example
npm run devUI (dev): http://localhost:5173
Interfaz principal del chat, con selector de modelo y carga de documentos PDF para iniciar la ingesta.
Ejemplo de pregunta y respuesta generada, incluyendo fuentes/evidencias con metadatos (página) y un snippet del contenido recuperado.
GET /models→ lista modelosPOST /upload→ ingiere un PDFPOST /ask→{ query, model_name }→{ answer, sources: [{ page, snippet }] }POST /reset→ resetea vector DB
- Rate limiting server-side y backoff con jitter para 429.
- Streaming de tokens (SSE/WebSocket) para UX.
- Multi-document / multi-user (índices por sesión/usuario).
- Evaluación: dataset + métricas (hit-rate, faithfulness).

