Codigo Abierto

Streamdown: El Renderizador de Markdown en Streaming de Vercel

Streamdown es el renderizador de Markdown en streaming de Vercel que muestra contenido generado por LLM en tiempo real con renderizacion progresiva y resaltado de sintaxis.

Keeping this site alive takes effort — your support means everything.
無程式碼也能輕鬆打造專業LINE官方帳號!一鍵導入模板,讓AI助你行銷加分! 無程式碼也能輕鬆打造專業LINE官方帳號!一鍵導入模板,讓AI助你行銷加分!
Streamdown: El Renderizador de Markdown en Streaming de Vercel

El auge de las interfaces de chat impulsadas por LLM ha creado un problema peculiar de experiencia de usuario: ver texto aparecer caracter por caracter es emocionante, pero ver Markdown parcialmente renderizado parpadear y saltar es frustrante. Cuando un LLM genera un bloque de codigo, una tabla o una lista anidada, los renderizadores Markdown estandar no pueden manejar la llegada incremental de tokens. Esperan la salida completa, luego la renderizan toda de una vez – frustrando el proposito del streaming. Los usuarios miran texto sin procesar hasta que el stream termina, luego la pagina salta cuando todo se reformatea simultaneamente.

Streamdown es la elegante solucion de Vercel a este problema. Es un renderizador de Markdown en streaming de codigo abierto disenado especificamente para contenido generado por LLM. La idea clave es que el renderizado Markdown debe ocurrir progresivamente: cada token debe ser renderizado inmediatamente, los elementos deben aparecer a medida que se vuelven inequivocos, y el DOM debe actualizarse incrementalmente sin inestabilidad de diseno.

La libreria esta construida especificamente para la era de la IA. Los renderizadores Markdown tradicionales asumen entrada completa y estatica. Streamdown asume entrada incompleta y en streaming, y toma decisiones inteligentes sobre como renderizar contenido parcial. Cuando un LLM comienza a generar un bloque de codigo, Streamdown renderiza un contenedor de bloque de codigo abierto inmediatamente. Cuando comienza una tabla, renderiza la etiqueta de apertura de la tabla y popula las celdas a medida que llegan. Esto crea una experiencia visual fluida y progresiva que coincide con la naturaleza de streaming de las respuestas LLM.

Arquitectura Central

El pipeline interno de Streamdown procesa los tokens entrantes a traves de cuatro etapas:

EtapaComponenteFuncion
TokenizadorLexer IncrementalAnalizar tokens Markdown parciales a medida que llegan
ConstructorConstructor AST ParcialConstruir un AST que pueda representar elementos incompletos
RenderizadorRenderizador DOM ProgresivoActualizar el DOM en vivo con cada cambio del AST
FinalizadorResolvedor Post-StreamFinalizar cualquier elemento incompleto restante

El Pipeline de Renderizado

El siguiente diagrama ilustra como Streamdown procesa una respuesta en streaming de un LLM:

Cada token del stream LLM pasa por este pipeline en tiempo real. El lexer incremental es el componente critico: debe mantener el estado entre las llegadas de tokens para identificar correctamente cuando una secuencia parcial como [Click h podria ser el inicio de un enlace ([Click here](url)) y renderizarlo apropiadamente.

Comparacion de Calidad de Renderizado

La tabla a continuacion compara Streamdown con enfoques alternativos para renderizar salida LLM:

EnfoqueStreaming?Sintaxis ParcialResaltado de CodigoRenderizado de TablasTamano del Bundle
StreamdownSi, token por tokenDegradacion eleganteTrabajador en segundo planoIncremental12 KB (gzip)
react-markdownNo (espera completo)N/ABasado en pluginsSolo completo15 KB
markedNoN/ABasado en pluginsSolo completo10 KB
innerHTML vanillaSi, pero inseguroRenderizado rotoManualRoto0 KB (sin deps)
Renderizador personalizadoParcialGeneralmente rotoManualGeneralmente rotoVariable

Ejemplo de Uso

Usar Streamdown con React y el SDK de IA de Vercel es sencillo:

import { Streamdown } from '@vercel/streamdown/react';

export function ChatMessage({ content }) {
  return <Streamdown content={content} />;
}

El componente maneja automaticamente la entrada en streaming, el renderizado progresivo y la resolucion final. Para casos de uso mas avanzados, Streamdown proporciona hooks para estilos personalizados, integracion de temas y manejadores de interaccion.

Comenzando

Visita el repositorio de Streamdown en GitHub para instrucciones de instalacion, documentacion de API y ejemplos. La libreria esta disponible en npm como @vercel/streamdown y soporta todos los frameworks frontend principales. La documentacion del SDK de IA de Vercel proporciona guias de integracion para combinar Streamdown con respuestas en streaming del SDK de IA.

FAQ

Que es Streamdown?

Streamdown es el renderizador de Markdown en streaming de codigo abierto de Vercel que muestra texto generado por LLM token por token a medida que llega, con renderizacion progresiva de elementos Markdown como tablas, bloques de codigo, listas y encabezados.

Por que es dificil el renderizado de Markdown en streaming?

Los analizadores Markdown estandar asumen entrada completa. El Markdown en streaming renderiza tokens incrementalmente, por lo que el renderizador debe manejar sintaxis parcial – como una fila de tabla que llega antes de su encabezado, o un bloque de codigo no cerrado – y actualizar el DOM incrementalmente sin parpadeos o cambios de diseno.

Como maneja Streamdown el resaltado de sintaxis de codigo durante el streaming?

Streamdown usa una estrategia de renderizado de multiples pasadas. Los bloques de codigo aparecen primero como texto plano sin estilo a medida que llegan los tokens, luego un trabajador en segundo plano aplica el resaltado de sintaxis una vez que el bloque esta completo. Esto asegura cero latencia percibida mientras eventualmente muestra codigo completamente resaltado.

Puedo usar Streamdown sin React?

Si. Streamdown es agnostico al framework y exporta una API de JavaScript vanilla que funciona con cualquier stack frontend. Tambien hay integraciones dedicadas para React, Vue, Svelte y Solid.js con hooks y componentes amigables para streaming.

Cual es la diferencia entre Streamdown y React Markdown estandar?

Las librerias estandar de React Markdown como react-markdown requieren entrada Markdown completa antes de renderizar. Streamdown esta disenado para renderizado incremental: actualiza el DOM en vivo token por token, manejando la sintaxis parcial con elegancia, y resolviendo en Markdown correctamente renderizado a medida que el stream se completa.


Lecturas Adicionales

TAG
CATEGORIES