Microsoft presenta Flint, un lenguaje de visualización para agentes de IA
(microsoft.github.io)- Flint es un lenguaje intermedio de visualización que ayuda a los agentes de IA a crear gráficos expresivos a partir de especificaciones breves que las personas pueden editar
- El compilador interpreta los datos, los tipos semánticos, el tipo de gráfico y las codificaciones, y completa automáticamente configuraciones de bajo nivel como escalas, ejes, espaciado y diseño
- Ofrece 46 tipos de gráficos y 83 ejemplos de galería, y soporta renderizado con Vega-Lite, ECharts y Chart.js
- En entornos TypeScript / JavaScript se puede instalar con npm, y en flujos de trabajo con agentes se puede usar un servidor MCP
- Oculta las diferencias de API entre backends detrás de una interfaz unificada, lo que facilita cambiar de renderizador o modificar el diseño del gráfico a partir de la misma especificación
El problema que Flint busca resolver
- Flint es un proyecto de Microsoft Research, un lenguaje intermedio de visualización diseñado para que los agentes de IA generen gráficos a partir de especificaciones simples y editables por humanos
- La especificación se compone de datos, tipos semánticos y especificación del gráfico
- Un ejemplo de especificación define
periodcomoYearMonth,totalUserscomoQuantity, ygameTypeyregioncomoCategory - En un
Line Chart, vincularegiona column,perioda x,totalUsersa y ygameTypea color para crear un gráfico de líneas de usuarios activos mensuales por región
- Un ejemplo de especificación define
- Se puede instalar en entornos TypeScript / JavaScript con npm
- En flujos de trabajo con agentes se puede usar un servidor MCP
- En la gallery se pueden ver 46 tipos de gráficos y 83 ejemplos
Cómo convierte especificaciones en gráficos
- Flint parte de una especificación compacta, genera especificaciones nativas para backends como Vega-Lite y completa los detalles de bajo nivel necesarios para renderizar el gráfico
- Los tipos semánticos expresan el significado de los campos de datos
- Los ejemplos incluyen tipos como
Rank,YearMonth,DeltayTemperature - Con base en ellos, Flint infiere configuraciones del gráfico como parsing, escalas, ejes, formato y esquemas de color
- En un mapa de calor que muestra usuarios netos nuevos por juego y por mes, decide el parser de valores temporales, el formato de ejes y el esquema de color divergente con su punto medio según los tipos semánticos
- Los ejemplos incluyen tipos como
- La optimización automática del layout se basa en un modelo de layout flexible y en el principio de banking
- El compilador gestiona dinámicamente tamaño, espaciado y disposición para ajustar el gráfico al lienzo
- Si aumenta el número de gráficos de barras agrupadas, amplía el lienzo y reduce el band width para que incluso una versión más densa quepa en el lienzo
- Los cambios en el diseño del gráfico se pueden manejar cambiando el tipo de gráfico y reasignando las codificaciones visuales
- Al convertir un faceted bar chart sobre la distribución de población por sexo y edad del censo de EE. UU. de 2000 en un pyramid chart, el usuario solo cambia el tipo de gráfico y el compilador se encarga del resto
Backends de renderizado y disponibilidad
- Flint soporta 46 tipos de gráficos en Vega-Lite, ECharts y Chart.js
- Oculta distintas API y modelos de programación detrás de una interfaz unificada
- Si Vega-Lite no tiene soporte nativo para sunburst, se puede cambiar a ECharts
- Para visualizar una jerarquía de región × gameType × juego, se presenta un sunburst chart como mejor alternativa que un gráfico de barras agrupadas
- Flint es open source y ya se puede usar
- Se ofrecen GitHub y ejemplos de galería como punto de partida
- Microsoft Research desarrolló Flint en colaboración con IDEAS Lab y Renmin University of China
1 comentarios
Opiniones de Hacker News
Entiendo por qué hace falta el marketing de “para agentes de IA”, pero al final, solo con ser un lenguaje que facilita expresar gráficos ya resulta suficientemente impresionante y útil
En la página también explican que “en lugar de exigir parámetros verbosos de bajo nivel, como escalas, ejes, intervalos y layout, el compilador de Flint deriva configuraciones de gráficos optimizadas a partir de los datos, los tipos semánticos, el tipo de gráfico y la codificación”
Está apareciendo un nuevo patrón en los sistemas de agentes, y este proyecto es un buen ejemplo
Consiste en tener alguna representación intermedia (IR) que genera y entrega el LLM, y encima poner una capa determinista como un compilador o generador de código. Creo que en un futuro cercano veremos este tipo de estructura con más frecuencia
No aparece en la página, pero al crear visualizaciones de datos es realmente importante incorporar la accesibilidad desde la etapa de diseño
En este podcast hay una entrevista breve y bien resumida sobre el tema: https://open.spotify.com/episode/18dHTAxCCeIaLOTch6tRld
El entrevistado es Frank Elavsky, que parece ser bastante conocido en este campo, y también creó el proyecto Chartability, que contiene heurísticas, principios y guías para auditorías de accesibilidad: https://chartability.github.io/POUR-CAF/
Agregué un issue para hacer seguimiento: https://github.com/microsoft/flint-chart/issues/48
Me pregunto si hay una explicación concreta de cómo esto es mejor o diferente que Vega en sí: https://vega.github.io/vega/docs/specification/
Vega ya es un DSL expresivo para visualizaciones, y seguramente está incluido de forma bastante amplia en los datos de entrenamiento de los LLM
Flint es una abstracción de más alto nivel, por lo que la especificación es mucho más corta y simple, y el compilador deriva las decisiones de bajo nivel para crear gráficos atractivos. Es decir, permite que un agente cree con un programa corto buenos gráficos que antes requerían un programa largo
No me convence mucho la afirmación de que “las especificaciones simples de gráficos pueden ser estables, pero dependen de los valores predeterminados del sistema y la calidad de los gráficos generados es baja; mientras que las especificaciones complejas pueden crear gráficos atractivos, pero son verbosas y difíciles de manejar de forma estable para un agente”
En mi limitada experiencia creando agentes de análisis, me impresionó lo bien que los LLM generan visualizaciones con Python y R. Incluso modelos pequeños de pesos abiertos lo hacían igual, y muchas veces las desventajas desaparecían al iterar un poco sobre las partes ambiguas. Me pregunto si existe alguna línea de investigación que respalde esta afirmación o muestre en qué puntos surgen los problemas
Personalmente, Claude y ChatGPT generan bien el modelo de ggplot, pero cuando hay mucha personalización se vuelve un poco más complicado
La descripción de “parámetros de bajo nivel verbosos como escala, ejes, intervalos y layout” parece indicar que Microsoft está mezclando dos cosas distintas.
A los LLM no les importa demasiado si el código en sí es de bajo nivel y verboso; también pueden leer bien ensamblador o SPIR-V. El verdadero problema es la composición visual. Como los LLM “ven” de manera diferente a las personas, entender la composición espacial mediante comparación visual no les resulta natural; para sortearlo, hay que darles una representación que puedan razonar y entender con facilidad, como una visualización en forma de código. Es decir, basta con que no sea una estructura profundamente anidada ni una que requiera inferir estados ocultos.
Además, me cuesta estar de acuerdo con la decisión de Flint de manejar los tipos en JSON centrado en claves de texto. Viendo la especificación real, también podrían haberlo hecho como una biblioteca TypeScript fácil de escribir para humanos, y creo que eso habría sido mucho mejor. Más tarde, al ver el código fuente real, resultó estar mucho más completo y refinado que el mockup que había imaginado solo con la documentación, pero mi queja central sobre “JSON con claves de texto frente a una superficie de autoría con genéricos reales” sigue en pie.
chartTypeme parece poco elegante porque las plantillas deberían ser más extensibles. Esa parte necesita ajustes.En lo demás, usar JSON en bibliotecas de visualización o diagramación es bastante común, porque permite trasladarlo fácilmente entre distintos contextos de renderizado.
Artículo relacionado: https://www.openui.com/blog/stop-making-ai-write-json
Me interesan los DSL personalizados que aumenten la predictibilidad de los LLM, y me alegra ver que hasta un gigante como Microsoft parece entenderlo. El ejemplo de Contacts en https://slangify.org/examples muestra una forma de crear fácilmente un DSL propio convirtiendo de ida y vuelta entre VCARD y JCARD.
Al leer la explicación de que “obliga a explicitar decisiones visuales que debería manejar un buen compilador”, pienso que Graphviz existe por una razón similar.
Viendo que usan JSON como lenguaje declarativo, aunque reconozco que los LLM manejan bien JSON, no es una sintaxis agradable para que la consuman las personas.
Flint fue diseñado deliberadamente para que los agentes omitan parámetros de bajo nivel como escala, ejes, base en 0 y tamaño de paso. Estos elementos son muy importantes para un gráfico agradable, y el compilador los optimiza dinámicamente. Por eso es más fácil de manejar para los agentes de IA.
Usar tipos semánticos como elemento adicional de formato es muy útil, porque codifica de forma concisa mucho boilerplate de formato.
Me pregunto si hay planes para compartir o hacer extensible el registro de tipos de Flint. También me pregunto por qué no ponerlo directamente como atributo de los datos. Al crear gráficos conectados de más alto nivel sobre Vega-Lite, llegué a una especificación casi idéntica.
No termino de entender el punto de este proyecto. Desde la época de GPT-3.5, creo que los LLM ya podían generar matplotlib de una sola vez.
He usado bastante LLM para visualización de datos y no tuve grandes problemas. Me gustaría ver ejemplos concretos de en qué parte de la generación de visualizaciones tienen dificultades los agentes y cómo Flint lo resuelve.
Pero cuando lo incorporas en una herramienta para usuarios finales, una tasa de éxito del 80% al generar gráficos agradables empieza a ser un gran problema. Me pasó al construir un sistema de análisis de datos. Si haces que genere directamente matplotlib o Vega-Lite, es difícil lograr al mismo tiempo estabilidad, expresividad, costo, tiempo y tokens; por eso diseñamos este lenguaje como un punto intermedio: trasladar algunas decisiones al compilador para reducir el costo de generación y mantener la expresividad.
Página del proyecto: https://microsoft.github.io/flint-chart/
Configuración de MCP: https://microsoft.github.io/flint-chart/#/mcp