Contenido del curso

Arquitectura de Platzivision con streaming

Resumen

Construir un asistente conversacional como Platzivision implica mucho más que conectar un modelo de OpenAI a una interfaz. Aquí descubres cómo se diseña la arquitectura de un chatbot multimodal que procesa texto, analiza imágenes y genera ilustraciones con DALL-E, usando streaming para una experiencia fluida.

¿Qué es Platzivision y cómo funciona el chatbot?

Platzivision es un asistente conversacional centrado en Platzi que responde preguntas, analiza imágenes y genera otras nuevas. Cuando le escribes Hola, te contesta presentándose como tu asistente para temas relacionados con Platzi.

La magia visible está en el streaming: el texto aparece a medida que se genera, igual que en ChatGPT. Cada vez que OpenAI envía un fragmento en formato de tokens, la interfaz lo despliega al instante.

¿Qué es streaming en un chatbot? Es una técnica donde el texto se entrega token por token desde el modelo hacia la interfaz, en lugar de esperar la respuesta completa. Eso da una sensación de escritura humana en tiempo real.

La velocidad no viene de usar GPT-4o completo, sino de GPT-4o Mini, un modelo más liviano y rápido. La O de Omni indica que es multimodal: puede analizar imágenes que tú subas y describirlas con detalle, sin que tengas que decirle de qué se trata.

Y si le pides genera una imagen del planeta Tierra, llama internamente a DALL-E mediante una function call, muestra un aviso de “generando imagen” y devuelve el resultado renderizado con Markdown.

¿Cómo está dividida la arquitectura de Platzivision?

El proyecto se compone de dos piezas que se comunican entre sí.

  • Platzivision UI: la interfaz construida con Next.js. Recibe mensajes, permite subir imágenes y muestra las respuestas.
  • Platzivision API: el backend en Flask donde ocurren las llamadas a OpenAI, el procesamiento de imágenes y la ejecución de funciones.

La interfaz tiene componentes mínimos: el componente de chat, el chat input (donde escribes el mensaje y previsualizas imágenes antes de enviarlas) y el message list (la lista visible de mensajes entre tú y el asistente).

¿Dónde se guarda el historial de mensajes?

En Platzivision el historial vive en la interfaz. Cada vez que envías algo, la UI manda al backend el arreglo completo de mensajes entre asistente y usuario. El mensaje system nunca se muestra en pantalla, pero acompaña la lógica del backend.

En aplicaciones de producción reales esto suele invertirse: solo se envía el mensaje nuevo del usuario y el historial se conserva en una base de datos del lado del servidor. Para este proyecto, mantenerlo en la UI es más simple y suficiente.

El archivo central del backend se llama chat.py, y conversa con api.ts dentro de la UI.

¿Cómo se comunica el backend con la interfaz vía streaming?

Hay dos formas de devolver una respuesta desde el backend.

  1. Respuesta literal: un JSON tradicional con la estructura response, choices, message, content. Útil cuando no necesitas mostrar progreso.
  2. Respuesta en streaming: cada token generado por OpenAI se reenvía de inmediato a la interfaz, replicando la experiencia de un humano escribiendo.

El streaming aporta naturalidad, pero trae un reto: ¿cómo avisar a la interfaz que está pasando algo distinto a generar texto, como crear una imagen? El modelo GPT no dice por sí solo estoy generando una imagen. Esa señal hay que detectarla cuando ocurre la llamada a la función y comunicarla aparte.

¿Por qué no enviar solo texto durante el streaming? Porque algunas acciones, como generar una imagen con DALL-E, no son texto del modelo sino procesos externos. Necesitas un evento que la UI pueda interpretar para mostrar un loader en lugar de tratarlo como mensaje del chatbot.

La solución es devolver objetos en lugar de cadenas planas. Por ejemplo:

  • Para texto normal: content: "hola".
  • Para una acción en curso: status: "image_generating".
  • Para cerrar la transmisión: status: "done", la convención que sugiere OpenAI para indicar que ya no llegará más texto.

Así la interfaz sabe cuándo pintar un mensaje, cuándo mostrar una animación de carga y cuándo dar por terminada la respuesta.

¿Qué se construirá en las próximas clases?

El trabajo se concentrará en chat.py y los archivos a su alrededor, siguiendo este orden.

  • Procesar los mensajes que llegan desde la interfaz.
  • Retornar la respuesta usando streaming token por token.
  • Agregar soporte para que el asistente analice imágenes que tú subas.
  • Integrar una función para generar imágenes nuevas con DALL-E.

Con esa base, Platzivision pasa de ser una idea a un asistente multimodal real, capaz de leer, escribir y crear visualmente. ¿Qué función te gustaría agregarle tú primero? Cuéntame en los comentarios.