📚 Convertir streaming de datos en Markdown
En esta clase vamos a dar un paso más allá en la integración de IA en nuestras aplicaciones.
Ya no solo queremos respuestas… queremos procesarlas en tiempo real.
Y aquí entra en juego algo clave: el streaming de datos convertido a Markdown.
🚀 ¿Qué problema estamos resolviendo?
Cuando trabajamos con modelos de IA:
- La respuesta puede ser larga
- Puede tardar en generarse
- Y queremos mostrarla poco a poco en la UI
El problema es que:
👉 El modelo devuelve texto plano en streaming
👉 Pero nuestra interfaz necesita Markdown renderizable
Así que necesitamos:
Transformar el stream en contenido Markdown válido en tiempo real
🧠 ¿Qué es el streaming en este contexto?
En lugar de esperar a que el modelo termine toda la respuesta:
- Recibimos chunks de texto progresivamente
- Los enviamos al cliente mientras se generan
- Mejoramos muchísimo la experiencia de usuario
Ejemplo mental:
Antes:
Esperas 5 segundos → aparece todo
Ahora:
Aparece palabra a palabra como ChatGPT
🛠️ Cómo generar el streaming desde el backend
En el backend estamos usando algo como:
const result = streamText({
prompt,
model: 'mistral/devstral-small-2'
})
Esto nos devuelve un stream de texto, no un string completo.
Y lo importante:
👉 No lo convertimos a JSON
👉 Lo enviamos directamente como stream
return result.pipeTextStreamToResponse(res)
Esto permite que el cliente reciba datos en tiempo real.
🔄 ¿Dónde entra Markdown?
El modelo normalmente genera contenido estructurado como:
- Listas
- Títulos
- Código
- Texto enriquecido
Ejemplo:
## Título
- Punto 1
- Punto 2
Pero al llegar en streaming:
- ❌ Puede llegar cortado
- ❌ Puede romper el formato
- ❌ Puede no ser válido hasta que termina
⚠️ Problema clave: Markdown incompleto
Cuando haces streaming:
- Puedes recibir algo como
## Títu - O una lista a medias
- O un bloque de código sin cerrar
👉 Esto rompe el renderizado si no lo gestionas bien
💡 Estrategia: procesar el stream progresivamente
Hay varias formas de solucionarlo, pero la idea base es:
- Ir acumulando el texto recibido
- Re-renderizar el Markdown continuamente
- Tolerar estados intermedios “rotos”
En frontend normalmente:
let content = ''
onChunk((chunk) => {
content += chunk
renderMarkdown(content)
})
🧪 Mejora importante: UX suave
Para que esto se sienta bien:
- Renderiza en cada chunk
- Usa un parser tolerante a errores
- Evita parpadeos o reflows bruscos
Opciones típicas:
react-markdownmarkedmdx
🎯 ¿Por qué es importante esto?
Porque es la base de experiencias modernas como:
- Chatbots tipo ChatGPT
- Documentación generada en vivo
- Interfaces de IA en tiempo real
- Editores inteligentes
Sin streaming:
👉 Tu app se siente lenta
👉 Pierdes interacción
👉 No es “wow”
Con streaming:
👉 Todo fluye
👉 Parece magia
👉 El usuario se engancha
🔥 Bonus: prompts pensados para Markdown
En el vídeo se ve cómo el prompt ya está diseñado para devolver Markdown:
Resume en 4-6 frases la siguiente oferta de trabajo:
Incluye rol, empresa, ubicación y requisitos clave
Usa un tono claro y directo en español
Título: ${job.titulo}
Empresa: ${job.empresa}
Ubicación: ${job.ubicacion}
Descripción: ${job.descripcion}
👉 Esto es clave: forzar al modelo a devolver estructura
⚠️ Cosas a tener en cuenta
- El Markdown puede llegar incompleto
- No todos los modelos respetan bien el formato
- El renderizado en tiempo real puede ser costoso
- Hay que manejar errores de streaming
Y muy importante:
👉 Siempre controlar si la respuesta falla
catch (error) {
res.status(500).json({ error: 'Error generating summary' })
}
🧩 Resumen
En esta clase has aprendido:
- Qué es el streaming en IA
- Cómo enviarlo desde el backend
- Cómo procesarlo en frontend
- Cómo renderizar Markdown en tiempo real
- Qué problemas puedes encontrarte
🔜 Qué veremos en la siguiente clase
En la siguiente clase seguiremos mejorando esta experiencia:
- Manejo avanzado del streaming
- Mejora del renderizado
- Interfaz más interactiva
- Integración con inputs del usuario
Aquí es donde empiezas a construir apps de IA que realmente se sienten modernas.
💡 Consejo: Si tu app con IA no usa streaming… estás perdiendo el 80% de la magia.