Microsoft、AIエージェント向けの可視化言語 Flint を公開
(microsoft.github.io)- Flint は、AIエージェントが人間が編集可能な短い仕様で表現力の高いチャートを作成できるよう支援する 可視化中間言語 である
- コンパイラがデータと セマンティック型、チャート種別、エンコーディングを解釈し、スケール・軸・間隔・レイアウトといった低レベル設定を自動で補完する
- 46種類のチャートタイプ と 83 のギャラリー例を提供し、Vega-Lite、ECharts、Chart.js のレンダリングをサポートする
- TypeScript / JavaScript 環境では npm でインストールでき、エージェントのワークフローでは MCP サーバー を利用できる
- バックエンドごとの差異のある API を統一インターフェースの背後に隠し、同じ仕様からのレンダラー切り替えやチャート設計変更をより容易にする
Flint が解決しようとする問題
- Flint は Microsoft Research のプロジェクトで、AIエージェントがシンプルで人間が編集可能なチャート仕様からチャートを生成できるよう設計された可視化中間言語である
- 仕様はデータ、セマンティック型、チャート仕様で構成される
- 例の仕様では
periodをYearMonth、totalUsersをQuantity、gameTypeとregionをCategoryとして指定している Line Chartではregionを column、periodを x、totalUsersを y、gameTypeを color にバインドし、地域別の月間アクティブユーザーのラインチャートを作成する
- 例の仕様では
- npm から TypeScript / JavaScript 環境にインストールできる
- エージェントのワークフローでは MCP サーバー を利用できる
- gallery では 46種類のチャートタイプ と 83 の例を見ることができる
仕様をチャートに変換する仕組み
- Flint は圧縮された仕様から始めて、Vega-Lite のようなバックエンドネイティブ仕様を生成し、必要な低レベルの詳細設定を補完してチャートをレンダリングする
- セマンティック型 はデータフィールドの意味を表現する
- 例には
Rank、YearMonth、Delta、Temperatureのような型が含まれる - Flint はこれに基づいて、解析、スケール、軸、書式設定、配色体系といったチャート設定を推論する
- ゲームと月ごとの純新規ユーザー数を示すヒートマップでは、時間値のパーサー、軸の書式設定、発散カラースキームと中間点をセマンティック型に基づいて決定する
- 例には
- 自動レイアウト最適化 は、柔軟なレイアウトモデルと banking 原則に基づいている
- コンパイラがサイズ、間隔、配置を動的に管理し、チャートがキャンバスに収まるよう調整する
- グループ化棒グラフの数が増えると、キャンバスを広げて band width を縮小し、高密度な版もキャンバス内に収める
- チャート設計の変更は、チャート種別の切り替えと視覚エンコーディングの再バインドで処理できる
- 2000年の米国国勢調査の性別・年齢別人口分布を示す faceted bar chart を pyramid chart に変える際、ユーザーはチャート種別だけを変更し、残りはコンパイラが処理する
レンダリングバックエンドと利用可能状況
- Flint は Vega-Lite、ECharts、Chart.js 全体で 46 種類のチャートタイプをサポートする
- 異なる API やプログラミングモデルを統一インターフェースの背後に隠している
- Vega-Lite にネイティブの sunburst がない場合は ECharts に切り替えられる
- 地域 × gameType × game の階層構造の可視化には、グループ化棒グラフより sunburst chart のほうが優れた代替案として示されている
- Flint は オープンソース であり、すぐに利用できる
- 出発点として GitHub とギャラリーの例が提供されている
- Microsoft Research は IDEAS Lab および Renmin University of China と協力して Flint を構築した
1件のコメント
Hacker Newsでの意見
「AIエージェント向け」というマーケティングがなぜ必要なのかは分かるが、結局のところチャートを表現しやすい言語というだけでも十分に印象的で有用
ページでも「スケール、軸、間隔、レイアウトのような冗長な低レベルパラメータを要求する代わりに、Flintコンパイラがデータ、意味型、チャートタイプ、エンコーディングから最適化されたチャート設定を導き出す」と説明している
エージェントシステムで新しいパターンが現れており、このプロジェクトは良い例
LLMが生成して渡す何らかの**中間表現(IR)**を置き、その上にコンパイラやコード生成器のような決定的な層を重ねる方式。近い将来、こうした構造をもっと頻繁に見ることになりそう
ページにはないが、データ可視化を作るときにアクセシビリティを設計段階で反映することは本当に重要
このポッドキャストには関連する短いインタビューがよくまとまっている: https://open.spotify.com/episode/18dHTAxCCeIaLOTch6tRld
インタビュー対象はこの分野でかなり有名そうなFrank Elavskyで、アクセシビリティ監査用のヒューリスティック、原則、ガイドラインを含むChartabilityプロジェクトも作っている: https://chartability.github.io/POUR-CAF/
追跡用のIssueを追加した: https://github.com/microsoft/flint-chart/issues/48
これがVega自体よりどう優れているのか、あるいはどう違うのかについて具体的な説明があるのか気になる: https://vega.github.io/vega/docs/specification/
Vegaはすでに可視化のための表現力豊かなDSLであり、LLMの学習データにもかなり広く含まれていそう
Flintはより高いレベルの抽象化なので、仕様がずっと短く単純で、コンパイラが低レベルの判断を導き出して見栄えのよいチャートを作れるようにする。つまり、以前なら長いプログラムが必要だった良いチャートを、エージェントが短いプログラムで作れるようにしてくれる
「単純なチャート仕様は安定している可能性があるが、システムのデフォルトに依存するため生成されるチャートの品質が低く、複雑な仕様は見栄えのよいチャートを作れるが冗長なのでエージェントが安定して扱いにくい」という主張にはあまり強く共感できない
分析エージェントを作った少数の作業経験では、LLMがPythonとRで可視化をかなりうまく作ることに感心した。小さな公開重みモデルでも同様で、曖昧な部分を少し反復して詰めれば欠点が消えることが多かった。この主張を裏付ける、あるいは問題が生じる箇所を示す研究の流れがあるのか気になる
個人的にはClaudeとChatGPTはggplotモデルをうまく生成するが、カスタマイズが多くなると少し複雑になる
「スケール、軸、間隔、レイアウトのような冗長な低レベルパラメータ」という説明は、Microsoftが異なる2つのものを混同しているように思える
LLMはコードが低レベルで冗長かどうか自体をあまり気にせず、アセンブリやSPIR-Vも問題なく読める。本当の問題は視覚的な構成だ。LLMは人間とは違う形で「見る」ため、視覚的比較による空間構成の理解が自然ではなく、回避するにはコード形式の可視化のように、LLMが推論して理解しやすい表現を提供する必要がある。つまり、深くネストされていたり、隠れた状態を推論しなければならない構造でなければよい
それに、FlintがJSONで文字列キー中心に型を扱うという判断には賛同しにくい。実際の仕様を見ると、単に人間が書きやすいTypeScriptライブラリとして作ることもできたし、そのほうがずっとよかったように思える。後でソースを実際に見ると、ドキュメントだけを見て想定したモックよりもはるかに完成度が高く精巧だったが、「文字列キーのJSON対本物のジェネリックな記述面」という核心的な不満は依然として残る
chartTypeの部分は、テンプレートがもっと拡張可能であるべきなので、あまり洗練されていないと思う。この部分は修正が必要それ以外の部分では、可視化やダイアグラムのライブラリでJSONを使うのはかなり一般的だ。異なるレンダリング文脈へ簡単に移せるためだ
関連記事: https://www.openui.com/blog/stop-making-ai-write-json
LLMの予測可能性を高めるカスタムDSLには関心があり、Microsoftのような巨大企業もこれを理解したようでうれしい。https://slangify.org/examplesのContactsの例は、VCARDとJCARDを相互変換しながら、独自DSLを簡単に作る方法だ
「優れたコンパイラが処理すべき視覚的な判断を明示的に行わせる」という説明を見ると、Graphvizは同じ理由で存在しているのではないかと思う
宣言言語としてJSONを使っているのを見ると、LLMがJSONをうまく扱えることは認めるとしても、人間が消費しやすい構文ではない
Flintは、エージェントがスケール、軸、ゼロ基準、ステップサイズのような低レベルパラメータを飛ばせるよう意図的に設計されている。こうした要素は見栄えのよいチャートに非常に重要で、コンパイラが動的に最適化する。そのためAIエージェントにとって扱いやすくなる
セマンティック型を追加のフォーマット要素として使うのは非常に有用だ。多くのフォーマットの定型句を簡潔にエンコードしてくれるためだ
Flintの型レジストリを共有したり拡張可能にしたりする計画があるのか気になる。そもそもデータ属性自体として持たせない理由も気になる。Vega-Liteの上で、より高レベルな連結型チャートを作ったとき、ほぼ同じ仕様にたどり着いた
このプロジェクトの要点がよく分からない。GPT-3.5の時代から、LLMはmatplotlibを一発で生成できていたように思う
データ可視化にLLMをかなり使ってきたが、特に問題はなかった。エージェントが可視化生成の具体的にどこで苦労していて、Flintがそれをどう解決するのか、事例が知りたい
しかしエンドユーザー向けのツールに組み込むと、見栄えのよいチャートを生成できる成功率80%が大きな問題になり始める。データ分析システムを作ったときに、こうしたことを経験した。matplotlibやVega-Liteを直接生成させると、安定性、表現力、コスト・時間・トークンを同時に満たすのは難しく、そのため一部の判断をコンパイラに移して生成コストを下げつつ表現力を維持する折衷案として、この言語を設計した
プロジェクトページ: https://microsoft.github.io/flint-chart/
MCP設定: https://microsoft.github.io/flint-chart/#/mcp