Saltar al contenido principal

📡 Ajustando el streaming para servirlo al frontend

En esta clase vamos a resolver uno de los problemas más importantes cuando trabajamos con IA en aplicaciones reales:

👉 Cómo enviar respuestas en streaming desde el backend y consumirlas correctamente en el frontend

Porque generar texto no es suficiente.
Lo importante es cómo lo entregas al usuario.


🚀 ¿Por qué usar streaming?

Cuando trabajas con modelos de IA, las respuestas pueden tardar varios segundos.

Si esperas a tener toda la respuesta:

  • ❌ Mala experiencia de usuario
  • ❌ Sensación de lentitud
  • ❌ Interfaz bloqueada

Con streaming:

  • ✅ Empiezas a ver texto inmediatamente
  • ✅ Sensación de rapidez
  • ✅ Experiencia tipo ChatGPT

🔄 El problema del streaming “tal cual”

El backend puede enviar datos en streaming…
pero el frontend no siempre puede consumirlos fácilmente.

Problemas típicos:

  • Los chunks llegan en formatos difíciles de procesar
  • No están bien delimitados
  • No siguen un estándar claro
  • El frontend no sabe cuándo empieza o termina un mensaje

👉 Resultado: caos.


🧠 La clave: transformar el stream

La solución no es solo hacer streaming.

Es adaptarlo para que el frontend lo entienda perfectamente.

Esto implica:

  • Formatear los datos correctamente
  • Enviar información progresiva
  • Mantener consistencia en los chunks

🛠️ Estrategia para servir streaming

1. Leer el stream del modelo

Desde el backend recibimos datos en streaming, por ejemplo:

  • Tokens
  • Fragmentos de texto
  • Eventos

2. Transformar los chunks

En lugar de reenviar el stream tal cual:

👉 Lo procesamos y lo convertimos en algo más usable

Por ejemplo:

  • Solo texto limpio
  • Sin metadatos innecesarios
  • Con formato consistente

3. Enviar al frontend en tiempo real

Usamos streaming HTTP (como ReadableStream) para:

  • Enviar cada fragmento en cuanto llega
  • Evitar esperar a la respuesta completa

4. Cerrar correctamente el stream

Muy importante:

  • Indicar cuándo termina
  • Evitar que el frontend se quede esperando

📦 Ejemplo conceptual

Backend:

return new Response(stream, {
  headers: {
    'Content-Type': 'text/plain'
  }
})

Frontend:

const reader = response.body.getReader()

while (true) {
  const { done, value } = await reader.read()
  if (done) break

  const chunk = new TextDecoder().decode(value)
}

⚡ Buenas prácticas

  • Envía solo lo necesario
  • Evita estructuras complejas en el stream
  • Mantén consistencia en los datos
  • Asegúrate de cerrar el stream correctamente
  • Piensa siempre en el consumo desde frontend

🎯 Resultado final

Cuando lo haces bien:

  • El texto aparece progresivamente
  • La app se siente rápida
  • El usuario tiene feedback inmediato
  • La experiencia mejora muchísimo

🔥 Idea clave

El streaming no es solo backend. Es una decisión de producto que impacta directamente en la experiencia de usuario.


🔜 Qué veremos en la siguiente clase

En la siguiente clase iremos un paso más allá:

  • Integrar este streaming directamente en el frontend
  • Manejar estados de carga
  • Renderizar texto progresivamente
  • Mejorar la UX tipo chat
  • Preparar la base para apps reales con IA

💡 Consejo: Si tu app de IA no usa streaming, estás perdiendo gran parte de la magia. Empieza a implementarlo cuanto antes.