AIsaAIsaStudio English 打开 AIsa Studio

Microsoft Research 发布 Flint-interactive 语言,让 Agent 生成可交互数据可视化

原标题:Flint-interactive: A language for creating interactive data visualizations

Microsoft Research 发布 Flint-interactive,一种在 Flint 之上创建交互式数据可视化的语言,让 Agent 生成的图表支持点击、筛选、缩放、高亮和跨图联动。系统由 Flint 编译器把点击、拖拽等原始触发解析为语义事件,并用高层更新算子完成可视化变更,将交互与视觉逻辑分离,以降低生成成本和调试负担。用户可通过 Flint-MCP 和 MCP Apps 在聊天中直接使用,开发者可用 Flint Interactive Canvas 和编程 API 构建仪表板、数据故事及自定义交互。

为什么值得看

官方介绍了 Flint-interactive 用语义事件和编译器分担交互逻辑的思路,读者可据此评估 Agent 生成可探索图表的可行性。

阅读原文 ↗10月23日 AI 日报

本页的摘要、推荐理由与解读出自 AIsa Studio 的 AI 风向智能体,原文版权归原作者所有。

深度解读

发生了什么

Microsoft Research 发布了 Flint-interactive,一种用于创建可交互数据可视化的语言,构建在 Flint 之上。它让 AI Agent 生成的图表不再只是静态图片,用户可以直接通过点击、筛选、缩放、高亮以及跨图表交互来探索数据,也可以创建仪表盘、数据故事和可交互的应用。

关键细节

核心机制是把「视觉逻辑」和「交互逻辑」分离:

  • 交互逻辑由用户或 Agent 以语义层描述,即把「用户在做什么语义事件」映射到「希望画布如何更新」,例如用 set style 高亮数据、set annotation 标注点位、set viewport 实现平移缩放。
  • 视觉逻辑由 Flint 的编译器接管,自动把点击、拖拽、按键等原始触发解析为捕获图表元素和数据含义的语义事件,并把更新算子翻译为画布变化,处理命中测试和底层渲染。

这种设计把「交互与视觉逻辑之间复杂依赖的解析」这一重担转移给编译器,使用户和 Agent 只需用高层描述就能表达丰富的交互,避免反复推理、编码和调试带来的 token 与时间开销,也降低布局损坏、交互失效等可靠性问题。系统还提供预设交互(如 linked-brush 联动刷选),超出预设时可通过编程 API 定义触发器和自定义 handle 函数创建定制交互。由于事件生成和视觉更新是可组合的,同一模型还能连接表格、文本、其他图表和组件,实现一个视图的操作更新另一视图的内容。

为什么重要

原文指出,即便有强大的前沿模型,Agent 一次性生成令人满意的交互式可视化仍很少见,反复生成与调试成本高,且交互图表容易引入糟糕布局或损坏的交互。其根源在于「缺乏一种表达力强且高层的语言来描述视觉交互」。Flint-interactive 正是针对这一缺口,通过编译器处理交互逻辑和视觉依赖,提高生成可靠性并减少开发工作量。

对谁有影响

  • 聊天用户:可在对话中直接与 Agent 生成的图表交互,并基于所选内容追问,Flint Canvas 会把选中内容作为上下文传入后续轮次。
  • 应用开发者:可通过 Flint-MCP 与 MCP Apps 在聊天或画布环境接入,或用 Flint Interactive Canvas 构建仪表盘、数据故事,应用的事件处理器可处理语义事件来筛选表格、更新图表或改变应用状态,也可把交互编写技能分享给自己的编码 Agent。
  • 交互设计师:可在预设之外设计新交互,制成可复用预设,并通过 GitHub 提议预设来扩展 Flint 的交互词汇。
全文翻译

以下翻译只覆盖原文的前一部分,其余内容请看下方原文。

Flint 交互式流程图 | 紫色渐变背景

概览

  • 为 AI 生成的图表带来丰富的交互性:Flint-interactive 使智能体能够创建数据可视化图表,用户可以直接通过点击、筛选、缩放、高亮显示以及跨图表交互来探索这些数据。
  • 简化复杂交互的构建:Flint-interactive 无需编写底层可视化代码,而是让用户和智能体使用高级语义事件和更新算子来定义行为。
  • 提高可靠性并减少开发工作量:通过利用 Flint 编译器处理交互逻辑和视觉依赖关系,该系统有助于避免自定义交互式可视化中常见的布局、渲染和调试问题。
  • 连接图表、文本、表格和应用程序:Flint-interactive 支持交互式数据故事、仪表板和关联体验,其中在一个视图中的操作可以更新另一个视图中的图表、文档、小部件或应用程序状态。

AI 智能体可以轻松分析数据并生成带有数据可视化的报告。它们帮助用户比阅读冗长的文本更高效地检查模式。然而,当我们想要进行探索时,我们希望超越静态可视化:我们希望能够与图表交互以放大细节、比较不同图表中的数据,甚至从图表选择中高亮显示文档中的相关文本,反之亦然。这就要求智能体能够创建交互式数据可视化,这些可视化在传达信息的同时,让读者能够探索作者所选视角之外的内容,理想情况下具备专业数据新闻中交互式故事的质量。这让我们不禁思考:

  • (作为用户)我能否直接在聊天中与图表交互以探索数据,并根据我的选择提出后续问题?
  • (作为开发者)我能否让我为客户构建的 AI 智能体生成交互式可视化,以帮助它们探索和理解数据?

是的,这是可能的,但存在巨大的实际差距。即使拥有能力强大的前沿模型,我们仍然面临以下问题:

  • 生成成本高。智能体很少在一次对话中就产生完全令人满意的交互式可视化。反复的推理、编码和调试过程会消耗令牌和时间。
  • 可靠性问题。交互式可视化本身就极具挑战性,表达力强的交互式图表容易引入糟糕的布局或损坏的交互,而在尝试修复这些问题时,我们可能会引入新的问题。

这些挑战解释了为什么在实际使用中一致地生成高质量的交互式可视化仍然很困难。同时,某些可视化库中内置的交互功能本身并不足以创建定制的交互式图表。而这些挑战的结果是缺乏一种既具有表现力又属于高级别的语言来指定视觉交互。

播客系列

2026 年工作的新未来 | Jaime Teevan, Jenna Butler, Jake Hofman, Rebecca Janssen

观点

聆听微软研究社区成员讨论激发他们研究的信念、影响其研究的经历和思想家,以及其旨在产生的积极人类影响。

Flint-interactive(在新标签页中打开) 是一种基于 Flint 创建交互式数据可视化的语言。它允许用户更轻松地创建仪表板、数据故事和交互式工件。Flint-interactive 的强大功能源于 Flint 的编译器,该编译器将用户交互转换为捕捉用户选择背后含义的语义事件。然后,它使用高级算子根据这些事件更新可视化效果,使得创建和维护复杂的交互变得容易得多。这将解决交互和视觉逻辑之间复杂依赖关系的繁重工作转移给了编译器,因此用户(或智能体)可以轻松地用高级规范描述具有表现力的交互。

交互式 Gapminder 可视化,显示两个散点图之间的链接刷选,分别展示 1952 年和 2007 年的国家数据。每个散点图的横轴为人均 GDP,纵轴为预期寿命,国家按大洲着色。蓝色矩形选择框高亮了 1952 年图表中的一组国家,同时在 2007 年图表中也高亮了相同的国家,展示了跨年份的链接选择。右侧的控制面板提供了包括矩形选择、套索选择和 x 轴或 y 轴刷选在内的交互选项。该图说明了在一个视图中选择数据点会在另一个视图中高亮显示相应数据点,以便进行随时间变化的比较分析。

示例 1:我们可以启用用户刷选一个可视视图,图表会通过简单的预设交互 linked-brush(链接刷选)高亮显示用户选择的所有国家组。

使用方法

1. 在聊天中使用 Flint

通过 Flint-MCP 和 MCP Apps,按照 MCP 设置指南,直接在聊天或画布环境中使用 Flint Interactive。随着最新版本发布,告诉智能体要绘制什么图表以及您希望哪些交互;它可以生成与 Flint 图表规范并列的 interaction_spec(交互规范),并在您的对话中渲染交互式图表。

图形用户界面,图表

示例 2:在聊天环境中使用 Flint-interactive,允许智能体以更可靠的方式生成交互式图表,只需简单的 Flint 规范即可。它还允许用户选择并将上下文传递给后续轮次。

2. 使用 Flint 构建交互式应用

使用 Flint Interactive Canvas 在仪表板、数据故事或其他应用中构建交互式图表。您的应用可以使用事件处理器来处理由 Flint Canvas 发出的语义事件,例如筛选表格、更新另一个图表或更改应用程序状态。为了让应用的控件控制图表的更新方式,请将更新算子发送到 Flint Canvas。

2007 年的交互式 Gapminder 仪表板,显示一个包含国家数据的表格以及一个比较人均 GDP 和预期寿命的气泡图。在表格中,美国所在的行被选中并高亮显示,显示人均 GDP 为 42,952 美元,预期寿命为 78.2 年。散点图中对应的气泡被强调,并通过标注显示相同的数值。国家按大洲着色,气泡大小代表人口,人均 GDP 显示在对数横轴上,预期寿命绘制在纵轴上。该图演示了外部选择,即在表格中选择某个国家会在可视化中高亮显示并注释匹配的数据点。

示例 2:Flint-interactive 允许开发人员定义图表与外部元素(如表格、段落)之间的交互。在这里,用户可以点击表格以高亮显示图表中的点,反之亦然。

3. 创建定制交互

要创建超出 Flint 预设的定制交互,请使用编程 API 定义触发器和自定义处理函数,将语义事件映射到自定义图表更新序列。例如,处理函数可以高亮显示被点击的国家并按名称对其进行标注。它结合了 set-style(设置样式)和 set-annotation(设置标注),而无需操作特定于渲染器的标记。

交互式气候可视化,显示五个美国城市的季节性相图,横轴为温度(°C),纵轴为降水量(毫米/天)。西雅图被选中,其年度天气周期显示为由一月至十二月标记的连接路径。该路径显示冬季凉爽潮湿,降水量峰值接近每天 6 毫米,夏季温暖干燥,降水量降至每天 1 毫米以下。彩色点代表芝加哥、休斯顿、洛杉矶、纽约和西雅图。右侧的细节面板显示选中的月份为一月,温度为 4.2°C,降水量为 5.7 毫米/天。该图演示了时间拖拽和动画,即将城市沿其季节性路径移动会更新所有城市到相应的季节时间。

示例 4:智能体可以使用 Flint 的编程 API 创建定制的交互式可视化。在此 DimpVis 示例中,用户可以沿时间路径拖动点,以可视化所有城市的温度和降水量的变化。

工作原理

Flint Canvas 是一个状态机,它跟踪画布上的用户交互并管理视觉渲染状态。Flint 通过将视觉逻辑(由编译器管理)与交互逻辑(由用户在语义层面指定)分离开来,使交互规范变得简单:

  • 视觉逻辑:编译器自动将原始触发器(如点击、拖拽和按键)解析为识别图表元素和数据的语义事件。它还将更新算子转换为渲染后的画布更改,处理命中测试和低级别的视觉更新。
  • 交互逻辑:用户通过将语义交互事件映射到图表更新算子来指定交互,例如使用 set style(设置样式)高亮数据,使用 set annotation(设置标注)标注点,或使用 set viewport(设置视口)平移或缩放。用户还可以使用这些语义事件来更新外部表格、小部件或应用程序状态。

图:Flint 交互式允许智能体通过将“用户正在与之交互的语义事件是什么”映射到“他们希望画布表面进行的更新是什么”来描述交互逻辑。编译器承担了解析视觉更新和管理运行时的繁重工作,这使得交互创作更加可靠且具有成本效益。

图 1:Flint 交互式允许智能体通过将“用户正在与之交互的语义事件是什么”映射到“他们希望画布表面进行的更新是什么”来描述交互逻辑。编译器承担了解析视觉更新和管理运行时的繁重工作,这使得交互创作更加可靠且具成本效益。

这种分离意味着用户无需逆向工程渲染逻辑或操作特定于渲染器的标记,从而使交互更容易指定和维护。此外,由于事件生成和视觉更新是可组合的,同一模型还将 Flint 与表格、文本、其他图表和小部件连接起来,以构建交互式故事和仪表板。

立即试用!

图表用户:在您的聊天中设置 Flint(在新标签页中打开) 并要求您的智能体创建一个交互式图表。在交互画廊中寻找灵感。

应用构建者:使用 编程 API(在新标签页中打开) 构建交互式仪表板、数据故事和关联视图。与您的编码智能体共享交互创作技能,以向您的应用添加预设。

交互设计师:探索 定制示例(在新标签页中打开),设计一个新的交互,并将其转化为可重用的预设。在 GitHub 上提议一个预设并分享您的原型或 i

查看原文

Flint Interactive flowchart | purple gradient background

At a glance

  • Brings rich interactivity to AI-generated charts: Flint-interactive enables agents to create data visualizations that users can explore directly through clicking, filtering, zooming, highlighting, and cross-chart interactions.
  • Makes complex interactions easier to build: Instead of requiring low-level visualization code, Flint-interactive lets users and agents define behaviors using high-level semantic events and update operators.
  • Improves reliability and reduces development effort: By using Flint’s compiler to handle interaction logic and visual dependencies, the system helps avoid many of the layout, rendering, and debugging challenges common in custom interactive visualizations.
  • Connects charts, text, tables, and applications: Flint-interactive supports interactive data stories, dashboards, and connected experiences where actions in one view can update charts, documents, widgets, or application state in another.

AI agents make it easy to analyze data and generate reports with data visualizations. They help users examine patterns more efficiently than by reading verbose text. However, when we’re feeling exploratory, we want to go beyond static visualizations.: We want to interact with charts to zoom in on details, compare data across charts, or even highlight related text in the document from a chart selection, and vice versa. This requires agents to be able to create interactive data visualizations that communicate information while letting readers explore beyond the author’s chosen view, ideally with the quality of interactive stories in sophisticated data journalism. This leaves us wondering:

  • (As a user) Can I interact with charts directly in chat to explore the data and ask follow-up questions based on what I select?
  • (As a developer) Can I enable the AI agents I build for my customers to generate interactive visualizations that help them explore and understand their data?

Yes, it’s possible, but there is a significant practical gap. Even with capable frontier models, we still face:

  • High generation cost. Agents rarely produce a fully satisfactory interactive visualization in one turn. Repeated rounds of reasoning, coding, and debugging consume tokens and time.
  • Reliability. Interactive visualizations are challenging enough that expressive interactive charts introduce poor layouts or broken interactions easily, and we risk introducing new problems when trying to fix them.

These challenges help explain why consistently generating high-quality interactive visualizations remain difficult in real-world use. Meanwhile, built-in interactions in some visualization libraries are not expressive enough on their own to create bespoke interactive charts. And these challenges are results of the lack of an expressive yet high-level language to specify visual interactions.

PODCAST SERIES

New Future of Work 2026 | Jaime Teevan, Jenna Butler, Jake Hofman, Rebecca Janssen

Ideas

Listen as members of the research community at Microsoft discuss the beliefs that animate their research, the experiences and thinkers that inform it, and the positive human impact it targets.

Flint-interactive (opens in new tab) is a language for creating interactive data visualizations on top of Flint. It allows users to create dashboards, data stories, and interactive artifacts more easily. The power of Flint-interactive comes from Flint’s compiler, which translates user interactions into semantic events that capture the meaning behind what users select. It then uses high-level operators to update visualizations in response to those events, making sophisticated interactions far easier to create and maintain. This shifts the heavy burden of resolving complex dependencies between interaction and visual logic to the compiler, so the user (or the agent) can easily describe expressive interactions with high-level specifications.

Interactive Gapminder visualization showing linked brushing across two scatterplots of countries in 1952 and 2007. Each plot charts GDP per capita on the horizontal axis and life expectancy on the vertical axis, with countries colored by continent. A blue rectangular selection highlights a group of countries in the 1952 chart, and the same countries are simultaneously highlighted in the 2007 chart, demonstrating linked selection across years. A control panel on the right provides interaction options including rectangular selection, lasso selection, and x- or y-axis brushing. The figure illustrates how selecting data points in one view highlights corresponding points in another view for comparative analysis over time.

Example 1: We can enable the user to brush one visual view, and the chart highlights all groups of country selected by the user with a simple preset interaction linked-brush.

How to use

1. Use Flint in your chat

Use Flint Interactive directly in your chat or canvas environment through Flint-MCP and MCP Apps, following the MCP setup guide. With the latest release, tell your agent what to chart and which interactions you want; it can generate an interaction_spec alongside the Flint chart spec and render the interactive chart in your conversation.

graphical user interface, chart

Example 2: Using Flint-interactive in the chat environment, allowing the agent to produce interactive charts more reliably with simple Flint specifications. It also enables the user to select and pass context to the follow-up turns.

2. Build an interactive app with Flint

Build interactive charts in a dashboard, data story, or other application with Flint Interactive Canvas. Your app can use event handlers to process semantic events emitted by Flint Canvas, for example to filter a table, update another chart, or change application state. To let your app’s widgets control how the chart updates, send update operators to Flint Canvas.

Interactive Gapminder dashboard for 2007 showing a table of countries alongside a bubble chart comparing GDP per capita and life expectancy. In the table, the row for the United States is selected and highlighted, displaying GDP per person of $42,952 and life expectancy of 78.2 years. The corresponding bubble on the scatterplot is emphasized and labeled with a callout showing the same values. Countries are colored by continent, bubble size represents population, GDP per capita is shown on a logarithmic horizontal axis, and life expectancy is plotted on the vertical axis. The figure demonstrates external selection, where choosing a country in a table highlights and annotates the matching data point in the visualization.

Example 2: Flint-interactive allows developers to define interactions between charts and external elements (e.g., table, paragraph). Here, the user can click the table to highlight points in the chart and verse versa.

3. Create bespoke interactions

To create bespoke interactions beyond Flint’s presets, define a trigger and a custom handle function with the programming API that maps semantic events to custom chart update sequences. For example, a handler can highlight a clicked country and label it by name. It combines set-style and set-annotation without manipulating renderer-specific marks.

Interactive climate visualization showing a seasonal phase portrait for five U.S. cities, with temperature (°C) on the horizontal axis and precipitation (mm/day) on the vertical axis. Seattle is selected, and its annual weather cycle is displayed as a connected path labeled by month from January through December. The path shows cool, wet conditions in winter, peaking near 6 mm/day of precipitation, and warmer, drier conditions in summer, with precipitation dropping below 1 mm/day. Colored points represent Chicago, Houston, Los Angeles, New York, and Seattle. A details panel on the right displays the selected month, January, with a temperature of 4.2°C and precipitation of 5.7 mm/day. The figure demonstrates temporal dragging and animation, where moving a city’s position along its seasonal path updates all cities to the corresponding time of year.

Example 4: The agent can create bespoke interactive visualizations with Flint’s programming API. In this DimpVis example, the user can drag the point along the time path to visualize how all cities’ temperature and precipitation changes.

How it works

Flint Canvas is a state machine that tracks user interactions on the canvas and manages visual rendering state. Flint makes interaction specification easy by separating visual logic, managed by the compiler, from interaction logic, specified by the user at the semantic level:

  • Visual logic: The compiler automatically resolves raw triggers, such as clicks, drags, and key presses, into semantic events that identify chart elements and data. It also translates update operators into rendered canvas changes, handling hit testing, and low-level visual updates.
  • Interaction logic: The user specifies interactions by mapping semantic interaction events to chart update operators, such as set style to highlight data, set annotation to label a point, or set viewport to pan or zoom. The user can also use those semantic events to update external tables, widgets, or application states.

Figure: Flint interactive allows the agent to describe interaction logic by mapping “what semantic event is the user interacting with” to “what updates they want for the canvas surface”. The compiler takes the heavy lifting of resolving visual updates and manages the runtime, which makes interaction authoring more reliable and cost effective.

Figure 1: Flint interactive allows the agent to describe interaction logic by mapping “what semantic event is the user interacting with” to “what updates they want for the canvas surface”. The compiler takes the heavy lifting of resolving visual updates and manages the runtime, which makes interaction authoring more reliable cand cost effective.

This separation means users do not need to reverse-engineer rendering logic or manipulate renderer-specific marks, making interactions easier to specify and maintain. Furthermore, because event generation and visual updates are compositional, the same model also connects Flint with tables, text, other charts, and widgets to build interactive stories and dashboards.

Try it now!

Chart users: Set up Flint in your chat (opens in new tab) and ask your agent to create an interactive chart. Find inspiration in the interaction gallery.

App builders: Build interactive dashboards, data stories, and connected views with the programming API (opens in new tab). Share the interaction-author skill with your coding agent to add presets to your app.

Interaction designers: Explore the bespoke examples (opens in new tab), design a new interaction, and turn it into a reusable preset. Propose a preset on GitHub and share your prototype or implementation to help expand Flint’s interaction vocabulary.

原文版权归 Microsoft Research 及原作者所有,本站转载仅供阅读。如需删除,请联系 support@aisa.one。