AFP Chatbot con RAG - Sistema de Consultas Inteligentes
Una aplicación web que implementa RAG (Retrieval-Augmented Generation) para responder consultas sobre el cuarto retiro de AFP en Perú, combinando búsquedas locales con información específica y respuestas contextuales.
Source Code: https://github.com/joedayz/afp-chatbot-rag-langchain-faiss
🧠 ¿Qué es RAG y cómo funciona en este proyecto?
¿Qué es RAG?
RAG (Retrieval-Augmented Generation) es una técnica de inteligencia artificial que combina:
Retrieval (Recuperación): Busca información relevante en una base de datos local
Augmented Generation (Generación Aumentada): Usa esa información para generar respuestas más precisas y contextuales
¿Cómo funciona nuestro RAG?

Ventajas de nuestro sistema RAG:
✅ Información específica: Usa datos oficiales sobre el 4to retiro de AFP en Perú
✅ Respuestas contextuales: Las respuestas están basadas en información real y actualizada
✅ Búsqueda semántica: Encuentra información relevante aunque no uses las palabras exactas
✅ Fallback inteligente: Si no encuentra información local, puede buscar en internet
✅ Sin dependencia de internet: Funciona principalmente con datos locales
📋 Requisitos del Sistema
Python 3.8+
Node.js 16+
API Key de OpenAI (opcional, solo para fallback)
8GB RAM mínimo (para el modelo de embeddings)
🛠️ Configuración e Instalación
1. Clonar el Repositorio
git clone <tu-repositorio>
cd ai-chatbot
2. Configurar el Backend
# Navegar al directorio del backend
cd backend
# Crear y activar entorno virtual
python3 -m venv venv
source venv/bin/activate # En Windows: venv\Scripts\activate
# Instalar dependencias
pip install fastapi uvicorn langchain langchain-community langchain-huggingface sentence-transformers faiss-cpu openai python-dotenv
3. Configurar Variables de Entorno
Crear archivo .env en el directorio backend/:
OPENAI_API_KEY=tu_api_key_aqui_opcional
HOST=localhost
PORT=8000
⚠️ IMPORTANTE: El archivo .env está en .gitignore por seguridad.
4. Procesar los Datos (Crear Vectorstore)
# Asegúrate de estar en el directorio backend con el venv activado
cd backend
source venv/bin/activate
# Ejecutar el script de ingest para procesar los datos
python ingest.py
Este comando:
Lee el archivo
data/data1.txtcon información sobre el 4to retiro de AFPDivide el texto en chunks para mejor búsqueda
Crea embeddings usando el modelo
sentence-transformers/all-MiniLM-L6-v2Guarda el vectorstore en
vector_store/
5. Configurar el Frontend
# Navegar al directorio del frontend
cd frontend
# Instalar dependencias
npm install
🚀 Ejecutar la Aplicación
Terminal 1: Backend (API)
cd backend
source venv/bin/activate
uvicorn main:app --reload --host 0.0.0.0 --port 8000
Terminal 2: Frontend (Interfaz Web)
cd frontend
npm run dev
URLs de Acceso:
Frontend: http://localhost:5173
Backend API: http://localhost:8000
Documentación API: http://localhost:8000/docs
🔍 Cómo Funciona la Búsqueda
1. Búsqueda Local (RAG)
Cuando haces una pregunta, el sistema:
Convierte tu pregunta en un vector usando embeddings
Busca en el vectorstore local los documentos más similares
Combina la información encontrada para generar una respuesta contextual
2. Fallback a Internet
Si no encuentra información relevante localmente, puede:
Buscar en internet (si está configurado)
Usar OpenAI para generar una respuesta general
Ejemplos de Preguntas que Funcionan Bien:
"¿Cuándo puedo retirar mi AFP?"
"¿Qué fechas corresponden a mi DNI que termina en 5?"
"¿Cuánto dinero puedo retirar?"
"¿Cómo consulto mi AFP?"
"¿Cuáles son las fechas del cronograma?"
🔧 Estructura del Proyecto
ai-chatbot/
├── backend/
│ ├── main.py # API FastAPI con endpoints RAG
│ ├── ingest.py # Script para procesar datos y crear vectorstore
│ ├── config.py # Configuración y variables de entorno
│ ├── data/
│ │ └── data1.txt # Información sobre 4to retiro AFP Perú
│ ├── vector_store/ # Vectorstore generado (no versionar)
│ │ ├── index.faiss # Índice FAISS
│ │ └── index.pkl # Metadatos
│ ├── .env # Variables de entorno (no versionado)
│ └── venv/ # Entorno virtual Python
├── frontend/
│ ├── src/
│ │ ├── App.tsx # Componente principal React
│ │ └── App.css # Estilos de la aplicación
│ ├── package.json # Dependencias Node.js
│ └── vite.config.ts # Configuración Vite
└── README.md # Este archivo
🚨 Troubleshooting
Problema: "Puerto ya en uso"
1. Encontrar qué proceso está usando el puerto:
# Para puerto 8000 (backend)
lsof -i :8000
# Para puerto 5173 (frontend)
lsof -i :5173
# Ver todos los puertos en uso
netstat -tulpn | grep LISTEN
2. Matar procesos específicos:
# Matar proceso por PID (reemplaza XXXX con el PID real)
kill XXXX
# Matar proceso por puerto (macOS/Linux)
sudo lsof -ti:8000 | xargs kill -9
sudo lsof -ti:5173 | xargs kill -9
# Matar todos los procesos de uvicorn
pkill -f uvicorn
# Matar todos los procesos de node/vite
pkill -f "vite\|node"
3. Verificar que los procesos se cerraron:
# Verificar puerto 8000
lsof -i :8000
# Verificar puerto 5173
lsof -i :5173
Problema: "ModuleNotFoundError: No module named 'langchain_community'"
Solución:
cd backend
source venv/bin/activate
pip install langchain-community
Problema: "Vectorstore no disponible"
Solución:
cd backend
source venv/bin/activate
python ingest.py
Problema: "Error al cargar embeddings"
Solución:
# Reinstalar dependencias de embeddings
pip uninstall sentence-transformers
pip install sentence-transformers
Problema: "LangChainDeprecationWarning: The class HuggingFaceEmbeddings was deprecated"
Solución:
# Instalar el paquete actualizado
pip install -U langchain-huggingface
# El código ya está actualizado para usar:
# from langchain_huggingface import HuggingFaceEmbeddings
# en lugar de:
# from langchain_community.embeddings import HuggingFaceEmbeddings
Problema: "LangChainDeprecationWarning: Importing TextLoader from langchain.document_loaders is deprecated"
Solución:
# El código ya está actualizado para usar:
# from langchain_community.document_loaders import TextLoader
# en lugar de:
# from langchain.document_loaders import TextLoader
Problema: Frontend no se conecta al backend
Verificar:
Backend está corriendo en puerto 8000
Frontend está corriendo en puerto 5173
No hay errores de CORS (ya configurado en el backend)
Verificar en el navegador: http://localhost:8000 (debe mostrar mensaje de bienvenida)
Comandos de Diagnóstico Rápido:
# Verificar que el backend responde
curl http://localhost:8000
# Verificar que el frontend responde
curl http://localhost:5173
# Ver logs del backend
# (Los logs aparecen en la terminal donde ejecutaste uvicorn)
# Ver logs del frontend
# (Los logs aparecen en la terminal donde ejecutaste npm run dev)
📊 API Endpoints
POST /afp-query
Consulta sobre el 4to retiro de AFP usando RAG local.
Request:
{
"question": "¿Cuándo puedo retirar mi AFP si mi DNI termina en 5?"
}
Response:
{
"answer": "Basándome en la información oficial disponible sobre el 4to retiro de AFP en Perú:\n\nSi termina en 5: 5, 6 de noviembre o 27 de noviembre...",
"question": "¿Cuándo puedo retirar mi AFP si mi DNI termina en 5?",
"source": "Información local del archivo data1.txt"
}
GET /search
Búsqueda directa en el vectorstore.
Request:
GET /search?query=cronograma%20DNI
Response:
{
"results": ["Texto relevante encontrado en los documentos..."]
}
🎯 Casos de Uso Educativos
Este proyecto es ideal para aprender:
RAG (Retrieval-Augmented Generation)
Embeddings y búsqueda semántica
Vectorstores con FAISS
APIs REST con FastAPI
Frontend con React y TypeScript
Procesamiento de texto con LangChain
Integración de sistemas de IA
🔒 Consideraciones de Seguridad
✅ API Key protegida: Se almacena en variables de entorno
✅ CORS configurado: Permite comunicación entre frontend y backend
✅ Validación de entrada: Se valida la entrada del usuario
✅ Manejo de errores: Respuestas de error apropiadas
✅ Datos locales: No envía información sensible a servicios externos
📝 Próximas Mejoras
Agregar más documentos al vectorstore
Implementar búsqueda híbrida (local + internet)
Agregar métricas de calidad de respuestas
Implementar cache de respuestas
Agregar autenticación de usuarios
Mejorar la interfaz de usuario
🤝 Contribuciones
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
📄 Licencia
Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE para más detalles.
Desarrollado con ❤️ para enseñar RAG y sistemas de IA a estudiantes
Este proyecto demuestra cómo implementar un sistema RAG completo, desde el procesamiento de datos hasta la interfaz de usuario, usando tecnologías modernas de IA.




