Resumen
Segunda parte de la serie en la que Alexangel Bracho construye un chatbot de WhatsApp que responde con OpenAI a partir de una base de conocimiento creada desde un PDF. En esta sesión todo corre en local, sin servicios de nube (se evita Cloud Run y los costos sorpresa). Se genera la base vectorial local con un script de embeddings (unos 10-15 segundos para un PDF de 5 páginas) y se consulta con un servicio Flask que usa LangChain y OpenAI. Luego se expone el servicio local de WhatsApp con ngrok para que Meta pueda verificar el webhook y se suscribe el campo "mensajes". La prueba en vivo por WhatsApp funciona, con límites: confunde algunas respuestas, inventa un ejemplo que no estaba en el documento, tiene problemas con las ecuaciones del PDF y responde a veces en inglés. Mejorar el prompt ayudó, por ejemplo al pedir "sistema de ecuaciones". Como mejoras futuras se mencionan instrucciones de idioma en el prompt y recordar el historial del chat. En medio se comentan memes, la caída de Builder.ai y Python para automatización.
Capítulos
- 00:00IntroBienvenida al episodio, que es la segunda parte ("la revancha") porque en el anterior no alcanzaron a revisar todo el material. El presentador tuvo problemas con el setup del stream.
- 00:34Resumen de la primera parteAlex explica la idea: un chatbot por la API de WhatsApp que usa OpenAI y una base de conocimiento vectorial creada desde cualquier PDF. Recuerda que la vez anterior usó un currículum y el bot se equivocó con la edad, algo que Alex atribuye a que OpenAI es débil en cálculos.
- 04:43Implementación Local vs en la NubeLa sesión anterior usó Google Cloud Run. Ahora todo es local (se descartan Docker y la nube) para evitar sorpresas de cobro, y el funcionamiento es el mismo. La carga pesada sigue en OpenAI y la base vectorial vive en el computador.
- 05:30Configuración del Entorno LocalSe ajusta el diagrama de arquitectura tachando los componentes de nube. Se aclara que el requisito de hardware es mínimo y que un PDF de unas pocas páginas procesó en cerca de un minuto en el Mac de Alex. Hay una pregunta del chat sobre pasar de front a back con solo JavaScript y React.
- 09:15Explicación de la estructuraHay dos servicios en Python: el de OpenAI (script del chatbot y base de conocimiento) y el de WhatsApp (gestiona los mensajes entrantes y salientes y se los pasa a OpenAI).
- 11:14Primera Fase: Integración de API de WhatsAppSe recuerda la configuración de Meta for Developers (app, cuenta business y portafolio, que requiere cuenta de Facebook). Se hace una prueba con Postman que envía un "Hello World" al WhatsApp de Alex.
- 13:25Segunda fase: Generación de Base de Conocimiento LocalCualquiera puede crear su base local. Se discute el requerimiento de hardware y que los documentos se transforman en vectores. Se menciona que Cris tiene problemas de audio en el stream.
- 19:14Ejecución del Chatbot en LocalSe pasa al código en VS Code con dos scripts: uno para descargar embeddings y otro para el chatbot con LangChain. Se usa como documento un PDF de sistemas dinámicos (un curso de computer vision de la universidad).
- 23:51Generación de Base de Conocimiento LocalSe explica que las computadoras solo entienden números, por eso se vectoriza. Se corre el script con el entorno virtual activado y la API key en una variable de entorno. Genera la carpeta vector store con los archivos index en menos de 20 segundos. Se comenta el costo de tokens para pruebas (Alex recargó 5 lucas) y un caso de uso de juegos de mesa con manuales de 60 páginas.
- 32:14Testeando el chat botSe levanta el servicio de OpenAI y se consulta desde Postman. Se pregunta "¿qué es el atractor de Lorenz?" y la respuesta es correcta pero agrega información ajena al documento. Se menciona que no ve las ecuaciones. "Atractor extraño" sí se responde de forma textual desde el documento. También se habla de n8n como orquestador de flujos.
- 40:13Explorando Python para AutomatizaciónSe recomienda Python para automatizar Excel, servicios y conexiones. En este tramo se comentan memes: el costo real de Apache Kafka, el renombrado de "workflows" como "agentes" y el típico programa de calculadora de peso.
- 40:43Noticia de Builder.aiSe comenta la quiebra de Builder.ai (unos 450 millones de dólares levantados), que prometía crear apps con IA pero según lo comentado dependía de programadores humanos. También se menciona un centro de cómputo en Viña del Mar, con 7 millones de dólares de fondos Corfo.
- 44:33Fase Tres: Integración del Servicio de WhatsAppSe presenta el servicio de WhatsApp en Python (Flask): recibe el mensaje, lo envía a OpenAI, consulta la base y devuelve la respuesta. Hay que configurar un webhook en Meta, que no puede apuntar a una URL local (127.0.0.1:8080).
- 45:37Configuración de Meta para DesarrolladoresSe explica que el webhook avisa de los eventos y que la URL de devolución de llamada y el token de verificación sirven de seguridad. El endpoint de verificación es `/whatsapp`.
- 46:52Generación de una URL GlobalSe necesita una URL pública a partir de la local. Un participante (Patricio) sugiere que VS Code puede exponer puertos y deja el detalle en Discord. Alex usa ngrok.
- 47:23Activación del Servicio de WhatsAppSe levanta el servicio de WhatsApp en el puerto 8080 con su entorno virtual. Se prueba que el endpoint de prueba responde en local.
- 49:15Pruebas del Servicio de WhatsAppSe muestra la pantalla de configuración de Meta con la URL de devolución y el token. Con la URL local la validación falla, como se esperaba.
- 51:43Manejo de URLs Locales y GlobalesSe ejecuta `ngrok http 8080`, que genera una URL pública (con una pantalla de advertencia de ngrok). Se comprueba el endpoint de prueba desde esa URL y se verifica el webhook en Meta. Se destaca no confundir los puertos de los dos servicios (8080 y 5501).
- 57:26Test via Whats AppSe descubre que falta suscribir el campo "mensajes" en el webhook, tras lo cual el bot responde. Se prueban preguntas sobre sistemas dinámicos: inventa un ejemplo (péndulo) que no estaba en el documento y falla en los tres atractores hasta que se reformula el prompt. También responde en inglés a veces, se propone indicar el idioma en el prompt, y Postman sirve para simular mensajes entrantes. Se muestra un proyecto aparte de generación de prompts con formato JSON.
- 01:14:47CierreAlex propone como mejora futura que el bot recuerde el historial de la conversación. Se agradece a los asistentes y se anuncia que el próximo stream será sobre AutoEDA y AutoML. Cris menciona su interés en la arquitectura de Claude jugando Pokémon.