Skip to main content

Command Palette

Search for a command to run...

AFP Chatbot con RAG - Sistema de Consultas Inteligentes

Updated
7 min read

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

JoeDayz

53 posts

Community Guy | Java Champion | AWS Architect | Software Architect