📡 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.