Introducción
Cuando le haces una pregunta a ChatGPT, obtienes texto de vuelta — a veces formateado, a veces no, pero fundamentalmente una cadena de caracteres renderizada en una burbuja de chat. Ese modelo de interacción humano-AI ya empieza a sentirse anticuado.
Generative UI es el paradigma donde un sistema AI no solo devuelve texto — devuelve componentes de interfaz renderizados. Pídele que te muestre un desglose de ventas y genera un gráfico interactivo. Pídele que te ayude a reservar un vuelo y renderiza un formulario de reserva inline. Pídele que resuma un contrato y produce una tarjeta estructurada con cláusulas desplegables.
El cambio importa porque el texto es un medio de mínimo común denominador. Una pared de texto describiendo un conjunto de datos es siempre inferior a una visualización bien construida de esos datos. GenUI cierra la brecha entre lo que una AI sabe y qué tan efectivamente puede comunicarlo — dándole acceso al vocabulario completo de un toolkit de UI moderno.
Esta guía cubre cómo funciona Generative UI técnicamente, los principales frameworks que lo permiten hoy, casos de uso del mundo real, compromisos honestos y un punto de partida práctico para tu primera implementación.
Cómo funciona Generative UI
El mecanismo detrás de Generative UI es un pipeline de cuatro etapas. Entender cada etapa es esencial para depurar y extender sistemas GenUI en producción.
1. El LLM produce salida estructurada
En lugar de indicarle a un LLM que produzca texto libre, lo induces a producir datos estructurados — ya sea mediante function calling / tool use, o instruyendo al modelo para emitir JSON. Esta salida describe qué renderizar, no el contenido en bruto en sí.
Por ejemplo, en lugar de devolver «Los ingresos de este trimestre fueron $1,2M», el modelo devuelve algo como:
{
"component": "RevenueChart",
"props": {
"period": "Q1 2026",
"value": 1200000,
"change": 0.14,
"chartType": "bar"
}
}2. Un registro de componentes mapea la salida a la UI
Un registro de componentes en el cliente o servidor mapea nombres de componentes a componentes reales de React, Vue o Svelte. Cuando el modelo emite «component»: «RevenueChart», el registro lo resuelve en un componente RevenueChart real, pasa las props y lo renderiza.
El registro es la frontera clave de seguridad y calidad. Tú decides qué componentes están disponibles para el modelo — solo puede renderizar lo que hayas registrado explícitamente. Esto es fundamentalmente diferente de permitir que un LLM genere HTML arbitrario, lo que sería peligroso e impredecible.
3. El streaming entrega componentes progresivamente
Las mejores implementaciones de GenUI transmiten datos de componentes a medida que se generan. En lugar de esperar a que el LLM termine su respuesta completa, los componentes se envían al cliente tan pronto como sus datos están completos. Esto da a los usuarios una experiencia de revelación progresiva que se siente rápida incluso para respuestas multi-componente complejas.
El modelo de streaming de React (a través de Server Components y Suspense) es particularmente adecuado para este patrón. El primitivo streamUI del Vercel AI SDK se construye sobre él. SSE (Server-Sent Events) es una alternativa más simple que funciona en cualquier framework.
4. La UI se renderiza y el usuario interactúa
Una vez renderizados, los componentes se comportan exactamente como cualquier otro componente de UI — pueden tener estado interno, llamar a APIs, despachar eventos y desencadenar llamadas adicionales al LLM. Esto permite UIs «agénticas» de múltiples turnos donde la AI y el usuario colaboran iterativamente a través de una secuencia de interfaces renderizadas.
Frameworks clave
El ecosistema GenUI se ha consolidado en torno a un puñado de frameworks maduros. Aquí hay una comparación honesta de las opciones líderes a principios de 2026.
| Framework | Lenguaje | Característica clave | Licencia | Estrellas |
|---|---|---|---|---|
| Vercel AI SDK | TypeScript / React | streamUI + React Server Components | Apache 2.0 | 13k+ |
| CopilotKit | TypeScript / React | Hooks headless, copiloto integrado en la app | MIT | 17k+ |
| Thesys | TypeScript (cualquier framework) | Protocolo de componentes agnóstico de framework | Apache 2.0 | 2k+ |
| Custom SSE | Cualquiera | Control total, sin dependencias | N/A | N/A |
Vercel AI SDK
El Vercel AI SDK es el framework GenUI más ampliamente adoptado para equipos de React/Next.js. Su función streamUI te permite definir un mapa de herramientas donde cada herramienta especifica un esqueleto de carga, un componente final y la definición de herramienta del LLM — todo en un solo lugar. El framework maneja el streaming, la hidratación y los límites de Suspense automáticamente.
El SDK está orientado hacia React Server Components, lo que lo hace extremadamente poderoso para aplicaciones Next.js pero menos ergonómico fuera de ese contexto. Soporta todos los principales proveedores de LLM a través de una interfaz unificada.
CopilotKit
CopilotKit adopta un enfoque diferente, centrándose en incrustar un «copiloto» dentro de una aplicación existente en lugar de construir una interfaz chat-first desde cero. Proporciona hooks de React headless (useCopilotAction, useCopilotReadable) que permiten a la AI leer el estado de tu aplicación y desencadenar acciones en ella — incluyendo renderizar componentes de UI como parte de la respuesta de acción.
CopilotKit es particularmente adecuado para herramientas internas y dashboards donde quieres añadir asistencia AI a una interfaz existente sin reconstruirla.
Thesys (anteriormente LivebenchAI)
Thesys es un nuevo participante que proporciona un enfoque agnóstico de framework para GenUI. En lugar de estar vinculado a los primitivos de streaming de React, usa su propio protocolo de componentes que funciona en múltiples frameworks. Esto lo convierte en la opción práctica para entornos de Vue, Svelte o agnósticos de framework. La compensación es un ecosistema y comunidad más pequeños en comparación con el Vercel SDK.
Implementaciones SSE personalizadas
Para equipos con requisitos específicos — frameworks particulares, infraestructura de streaming existente o presupuestos de latencia ajustados — una implementación personalizada usando Server-Sent Events y un registro de componentes hecho a mano es una opción válida. El patrón central es sencillo: el servidor emite tokens JSON sobre SSE, el cliente los analiza en descriptores de componentes, y un registro los resuelve en componentes reales.
Las implementaciones personalizadas ofrecen el máximo control pero requieren que construyas y mantengas la infraestructura de streaming, la recuperación de errores y la seguridad de tipos que los frameworks proporcionan sin configuración adicional.
Casos de uso
Generative UI añade más valor en contextos donde la presentación óptima de la UI varía significativamente según la entrada o intención del usuario. Aquí están los casos de uso de producción más claros.
Visualización de datos y analítica
Un usuario pregunta «muéstrame cómo cambió nuestro embudo de conversión este mes.» Un chatbot tradicional devuelve una tabla markdown. Un sistema GenUI devuelve un gráfico de embudo interactivo con capacidad de drill-down — porque el modelo puede decidir que estos datos se representan mejor como un embudo, y renderizar el componente adecuado para ello.
Este caso de uso es donde GenUI tiene el mayor ROI. La brecha entre texto y una visualización bien elegida es enorme para datos analíticos.
Interfaces conversacionales con respuestas ricas
El soporte al cliente, los flujos de incorporación y el descubrimiento de productos se transforman cuando la AI puede responder con formularios de reserva, tarjetas de producto, diálogos de confirmación y cuestionarios interactivos en lugar de paredes de texto instructivo. Las tasas de completación de respuestas mejoran porque la acción requerida se presenta directamente en lugar de describirse.
Generación de formularios y workflows multi-paso
En lugar de pre-construir cada posible permutación de formulario, un sistema GenUI puede generar el formulario apropiado según la necesidad expresada del usuario. Una admisión de seguros que genera diferentes campos para diferentes tipos de póliza. Una presentación de gastos que adapta su esquema al rol del empleado y a la categoría de gasto. Los formularios que tardarían semanas en diseñarse pueden generarse bajo demanda.
Herramientas de creación de contenido
Los asistentes de escritura, herramientas de generación de código y sistemas de diseño se benefician de GenUI cuando la salida de la AI debe mostrarse en contexto en lugar de en una interfaz de chat separada. Un editor de documentos donde la AI inserta un bloque de cita formateado. Un asistente de código que renderiza una vista de diff inline. Una herramienta de diseño que genera una vista previa de componente junto al código.
Herramientas internas y paneles de administración
Las herramientas internas son quizás el caso de uso más infravalorado. Los ingenieros y los equipos de operaciones frecuentemente necesitan interfaces ad-hoc para consultar datos, ejecutar operaciones o revisar registros. En lugar de construir estas interfaces manualmente, un sistema GenUI puede generar la UI apropiada en tiempo de consulta — una tabla cuando el resultado es tabular, un formulario cuando se necesita una acción, una tarjeta de estado cuando el resultado es una sola entidad.
Beneficios
Tiempo de desarrollo reducido para UIs con muchos datos
Cada visualización de datos o formulario personalizado que genera un sistema GenUI es uno que un ingeniero no tiene que construir manualmente. Para productos con alta variabilidad de UI — dashboards que necesitan docenas de tipos de gráficos, formularios que varían por segmento de usuario — esto representa una reducción significativa en el trabajo de frontend.
Interfaces personalizadas por contexto de usuario
Las UIs tradicionales están diseñadas para el usuario promedio. GenUI permite que la interfaz misma se adapte a lo que cada usuario está haciendo y lo que ya sabe. Un usuario experimentado obtiene una tabla de datos densa; un nuevo usuario obtiene una tarjeta guiada con anotaciones explicativas. La AI infiere el nivel apropiado de detalle del contexto.
Respuestas AI ricas más allá del texto plano
El texto tiene pérdidas. Describir un gráfico con palabras siempre es menos efectivo que mostrar el gráfico. GenUI cierra la brecha semántica entre lo que la AI entiende y lo que puede comunicar. Cuando la AI conoce la estructura de los datos, puede elegir la codificación visual más apropiada para ellos.
Revelación progresiva de la complejidad
Los sistemas complejos pueden hacerse accesibles haciendo que la AI exponga el nivel adecuado de detalle en el momento adecuado. Un componente puede comenzar colapsado con un resumen y expandirse bajo demanda. La navegación de drill-down puede generarse dinámicamente basándose en lo que el usuario enfoca. Esto es difícil de lograr con UIs estáticas sin construir máquinas de estado explícitas; GenUI lo hace emergente.
Desafíos
GenUI es genuinamente poderoso, pero viene con compromisos de ingeniería reales que vale la pena entender antes de comprometerte con el patrón.
Complejidad de pruebas
Probar UIs tradicionales es bien entendido: renderizas un componente con props dadas y haces aserciones sobre la salida. Probar GenUI es más difícil porque la salida renderizada depende de las salidas del LLM, que son no deterministas. Necesitas una estrategia de pruebas que cubra el registro de componentes (pruebas unitarias para cada componente registrado), la integración del LLM (pruebas de snapshot con respuestas simuladas) y el flujo end-to-end (pruebas de integración que tratan al LLM como una caja negra con entradas bien controladas).
Sobrecarga de rendimiento del streaming
El streaming de componentes introduce latencia en el primer pintado significativo: el usuario no ve nada hasta que el LLM empieza a emitir el primer descriptor de componente. Esto suele ser mejor que esperar una carga de página completa, pero requiere un manejo cuidadoso de los estados de carga y pantallas de esqueleto para evitar una experiencia brusca de en blanco y luego aparición. El tiempo hasta el primer token varía significativamente entre proveedores de LLM y tamaños de modelo.
Problemas de accesibilidad
Las UIs generadas dinámicamente presentan desafíos reales de accesibilidad. La gestión del foco durante las actualizaciones de streaming, etiquetas ARIA significativas en los componentes generados y la navegación por teclado a través de elementos insertados dinámicamente requieren ingeniería deliberada. Los componentes auto-generados no tendrán accesibilidad bien considerada incorporada a menos que diseñes tu registro de componentes con esto en mente.
Determinismo y reproducibilidad
Los LLMs son probabilísticos. La misma consulta de usuario puede producir selecciones de componentes diferentes entre solicitudes. Esto suele ser deseable — significa que la AI se adapta a diferencias sutiles en la formulación — pero hace que la depuración sea más difícil y puede llevar a confusión del usuario cuando un flujo «funcional» de repente se renderiza diferente. Establecer temperatura a 0 y usar definiciones de herramientas precisas reduce pero no elimina esta varianza.
Primeros pasos
El camino más rápido hacia un prototipo GenUI funcional usa el Vercel AI SDK con Next.js. Aquí hay un ejemplo mínimo que demuestra el patrón central.
Instalar dependencias
npm install ai @ai-sdk/openai zodDefinir una server action con streamUI
// app/actions.tsx
'use server'
import { streamUI } from 'ai/rsc'
import { openai } from '@ai-sdk/openai'
import { z } from 'zod'
import { WeatherCard } from '@/components/WeatherCard'
import { StockChart } from '@/components/StockChart'
export async function chat(userMessage: string) {
const result = await streamUI({
model: openai('gpt-4o'),
messages: [{ role: 'user', content: userMessage }],
text: ({ content }) => <p>{content}</p>,
tools: {
showWeather: {
description: 'Show current weather for a location',
parameters: z.object({
location: z.string(),
unit: z.enum(['celsius', 'fahrenheit']).default('celsius'),
}),
generate: async ({ location, unit }) => {
// Fetch real data here
const data = await fetchWeather(location, unit)
return <WeatherCard {...data} />
},
},
showStockChart: {
description: 'Show a stock price chart',
parameters: z.object({
ticker: z.string(),
period: z.enum(['1d', '1w', '1m', '3m', '1y']),
}),
generate: async ({ ticker, period }) => {
const data = await fetchStockData(ticker, period)
return <StockChart ticker={ticker} data={data} />
},
},
},
})
return result.value
}Transmitir la respuesta en un componente React
// app/chat/page.tsx
'use client'
import { useState } from 'react'
import { readStreamableValue } from 'ai/rsc'
import { chat } from '../actions'
export default function ChatPage() {
const [messages, setMessages] = useState<React.ReactNode[]>([])
const [input, setInput] = useState('')
async function handleSubmit(e: React.FormEvent) {
e.preventDefault()
const userMessage = input
setInput('')
const response = await chat(userMessage)
setMessages(prev => [...prev, response])
}
return (
<div>
<div className="messages">
{messages.map((msg, i) => (
<div key={i}>{msg}</div>
))}
</div>
<form onSubmit={handleSubmit}>
<input
value={input}
onChange={e => setInput(e.target.value)}
placeholder="Ask anything..."
/>
<button type="submit">Send</button>
</form>
</div>
)
}La clave de este patrón es el objeto tools. Cada entrada define la herramienta del LLM (nombre, descripción, esquema de parámetros) junto al componente React a renderizar cuando se llama a esa herramienta. El modelo decide qué herramienta llamar según la entrada del usuario; tu código decide qué renderizar.
Para entornos Vue/Nuxt, el mismo patrón es alcanzable con SSE y un registro de componentes manual. El framework Thesys proporciona una abstracción de nivel superior para esto si prefieres no construirlo desde cero.
FAQ
¿Es Generative UI lo mismo que HTML generado por AI?
¿Qué proveedores de LLM funcionan mejor con GenUI?
¿Cómo manejo los errores del LLM en una interfaz GenUI?
¿Puedo usar Generative UI sin React?
¿Cuál es la diferencia de costo frente a un chatbot estándar?
Alex
Ingeniero independiente y fundador de GenerativeUI. Construyo y escribo sobre Generative UI en producción — interfaces de streaming, integraciones AI y los frameworks que las hacen posibles.
Acerca de AlexArtículos relacionados
Generative UI vs UI tradicional: diferencias clave
Cómo las interfaces generativas se diferencian de las UIs convencionales y cuándo tiene sentido cada enfoque.
Construye tu primera Generative UI con Vercel AI SDK
Guía paso a paso para crear tu primera interfaz con AI y streaming components.