Resumen
Alexangel Bracho (Alex), Data Science Tutor en Tripleten con maestría en física fundamental, presenta un chatbot de WhatsApp que responde preguntas restringidas al contenido de un PDF (por ejemplo, un CV), combinando la API de Meta, Python/Flask, Docker, Google Cloud, un vector database y OpenAI. La arquitectura separa dos servicios (WhatsApp Service y Open Service) en contenedores distintos, cada uno desplegado en Cloud Run con su propia URL. En vivo se cubren la Fase 1 (Meta for Developers y Postman) y la Fase 2 (script Flask con endpoints de saludo, verificación de token y recepción de mensajes). Las fases 3, 4 y 5 (despliegue, embeddings y servicio de OpenAI) se muestran con capturas de pantalla. Se enseña un resultado final con respuestas correctas y errores del modelo (edad mal calculada, dónde trabajó). El proyecto le tomó entre tres y cuatro semanas. Entre las mejoras futuras están completar la integración de extremo a extremo con WhatsApp y añadir memoria del historial del chat. El mensaje final es animar al público a atreverse a construir proyectos.
Capítulos
- 00:00IntroRodolfo presenta el episodio 137: un chatbot que comunica WhatsApp con ChatGPT, con demo, código y checkpoints para entender cómo se construye una aplicación de principio a fin.
- 00:53Presentación de AlexangelAlex trabaja en Tripleten como Data Science Tutor, da soporte a estudiantes de un bootcamp de ciencia de datos para el mercado estadounidense, y tiene maestría en física fundamental. Busca una aplicación práctica de las herramientas de Python y OpenAI.
- 01:43Detalles del proyectoLa motivación es aplicar WhatsApp a negocios, más allá de enviar y recibir mensajes, y compartir el proyecto con la comunidad para recibir mejoras. Se invita a la audiencia a proponer temas para presentar.
- 05:33ArquitecturaUn usuario de WhatsApp pregunta y recibe respuesta basada solo en un documento (p. ej. un CV). Se explica que el PDF se parte en muchos vectores guardados en un vector database, y que el Open Service consulta esa base y contextualiza con OpenAI. Se justifican Flask, Docker y Google, y la separación en dos imágenes para obtener dos URL distintas en Cloud Run.
- 08:36Integración de API y testsSe detallan los servicios (scripts de Python con Flask en contenedores subidos a Docker Hub) y las cinco fases del proyecto. La Fase 1 usa Meta for Developers y Postman para probar los requests.
- 15:51Fase 1: Creación y configuración de "Meta for developers"Se explica qué son Meta for Developers y Postman, y se crea una app de tipo negocios con la cuenta de Facebook y un portafolio comercial. Se envía el mensaje de prueba "Hello World" a su WhatsApp con el token de acceso temporal (cambia cada hora). Alex dice que tiene tres apps sin costo hasta ahora.
- 23:35Envio de requests con PostmanSe copia el comando curl de Meta y se reproduce en Postman con headers (Authorization Bearer, Content-Type) y body JSON, enviando "Hey there" a WhatsApp. Se explican los métodos GET y POST.
- 29:32Fase 2: Script en Python y configuración de FlaskSe crea el proyecto con app, Dockerfile y requirements, un entorno virtual y un endpoint `/say_hi` que devuelve "Hello World Encoders". Se discute el uso de `if __name__ == "__main__"`, el puerto y el modo debug, y se prueba en navegador y Postman.
- 45:33Dónde estará montado el DockerEl servicio se desplegará en Cloud Run de Google, que generará una URL distinta a la local; esa URL se usará en Meta for Developers.
- 47:18Verificación de tokens y creación de endpointsSe crea el endpoint `/whatsapp` con un método que compara el token recibido con un access token propio y devuelve el challenge o un mensaje de tokens diferentes. Se prueba en Postman con parámetros.
- 51:53Recepción de mensajes en WhatsAppSe crea un método POST que recibe el JSON de la plantilla de WhatsApp Business de Postman y extrae el número (`from`) y el texto (`body`). Se imprimen en la terminal y se confirma que `request.get_json()` devuelve un diccionario.
- 01:03:31Overview de los pasos que faltanPor falta de tiempo se muestran capturas de send message, el servicio de WhatsApp, la prueba con "How are you?", y el uso de la URL de Facebook Graph. Se cierra la discusión de que la URL conserva el nombre Facebook.
- 01:07:56Fase 3: Despliegue en Google Cloud RunSe muestra la imagen en Docker Hub (pública) y el despliegue en Cloud Run con su URL. Google restringió el proyecto al detectar un token expuesto en la imagen. Se verifica el token en el Webhook de Meta y se discuten variables de entorno.
- 01:13:40Fase 4: Embedding de PDF y almacenamiento de Google Cloud StorageEl PDF se transforma en un vector database con embeddings (Hugging Face) en Google Colab y se almacena en un bucket de Google Cloud Storage, con un rol y una cuenta de servicio.
- 01:14:28Fase 5: Servicio de OpenAI en PythonUn script descarga los vectores (index.faiss e index.pkl) desde Cloud Storage y usa OpenAI para dar respuestas contextualizadas. Se muestran pruebas en Postman, incluyendo "¿cuántos hijos tiene?" sin información en el contexto. La API de OpenAI es el único costo (cargó cinco dólares).
- 01:18:28Implementaciones futurasSe muestra una conversación de WhatsApp con errores del modelo (edad 36 en vez de 39, dónde trabajó). Se propone terminar la integración con WhatsApp, escalar con más PDFs y añadir historial del chat con LangChain (en beta).
- 01:22:45CierreAlex tardó entre tres y cuatro semanas, trabajando en las noches. Se plantea una posible segunda sesión y su mensaje final es atreverse a construir. Se despide con recordatorio de los streams de los martes y el Discord.