Skip to main content

Command Palette

Search for a command to run...

AFP Chatbot con RAG - Sistema de Consultas Inteligentes

Updated
•7 min read•View as Markdown

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:

  1. Retrieval (Recuperación): Busca información relevante en una base de datos local

  2. 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.txt con información sobre el 4to retiro de AFP

  • Divide el texto en chunks para mejor búsqueda

  • Crea embeddings usando el modelo sentence-transformers/all-MiniLM-L6-v2

  • Guarda 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:

🔍 Cómo Funciona la Búsqueda

1. Búsqueda Local (RAG)

Cuando haces una pregunta, el sistema:

  1. Convierte tu pregunta en un vector usando embeddings

  2. Busca en el vectorstore local los documentos más similares

  3. 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:

  1. Backend está corriendo en puerto 8000

  2. Frontend está corriendo en puerto 5173

  3. No hay errores de CORS (ya configurado en el backend)

  4. 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"
}

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:

  1. RAG (Retrieval-Augmented Generation)

  2. Embeddings y búsqueda semántica

  3. Vectorstores con FAISS

  4. APIs REST con FastAPI

  5. Frontend con React y TypeScript

  6. Procesamiento de texto con LangChain

  7. 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:

  1. Fork el proyecto

  2. Crea una rama para tu feature (git checkout -b feature/AmazingFeature)

  3. Commit tus cambios (git commit -m 'Add some AmazingFeature')

  4. Push a la rama (git push origin feature/AmazingFeature)

  5. 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.

More from this blog