Microsoft Research⁠AI時代のグラフ作成を支援する中間言語「Flint」発表

Microsoft Researchは2026年7月8日、AIエージェントによるグラフ作成を支援する中間言語「Flint」を発表した。Flintは、AIエージェントが扱いやすく、人間も確認・編集しやすい短いチャート仕様を、Vega-Lite、Apache ECharts、Chart.js向けの詳細な設定へ変換する。列の役割や値の種類に応じて、目盛り、数値や日付の表示形式、レイアウトなどを補い、グラフを作りやすくする。

Microsoft Researchの記事では、Flintを「visualization language」または「visualization intermediate language」と呼んでいる。本稿では、チャートの種類や使うデータ列、その列が日付や価格、割合などの何を表すかを記述し、各描画ライブラリ向けの設定へ変換するための記述形式として説明する。

「短い設定」「見栄え」の差を埋める

チャート描画ライブラリとしては、Vega-LiteApache EChartsChart.jsといったものがある。これらはスケール、軸、余白、ラベル、配色などを細かく指定できる一方、既定値に任せた短い設定では見た目や読みやすさが不十分になりやすい。品質を上げようとすると、設定は長くなり、壊れやすくなってしまう。Flintは、この差を埋めるものとして発表された。

こうした難しさは、LLMやAIエージェントがチャート作成を担う場面でさらに目立ちやすい。エージェントに細かな設定を直接書かせると、ライブラリ固有の細部で誤りが起きたり、人間が後から読み、直し、再利用したりしにくくなる可能性がある。Flintは既存のチャート描画ライブラリを置き換えるものではなく、その手前でチャートの意図を受け渡す中間レイヤーとして機能する。

LLMベースのチャート生成でFlintが使いやすいのは、モデルに細かなチャート設定を丸ごと書かせず、まずデータの意味を推定させる設計にある。たとえば列名や値の並びから「この列は日付」⁠この列は価格」⁠この列は割合」と判断できれば、その判断をFlintの短い仕様に書き込める。その後はFlintのコンパイラが、軸の形式、スケール、配色、レイアウトなどを描画ライブラリ向けの具体的な設定に落とし込む。

発表で示された評価では、Flintと、モデルに複雑なVega-Lite仕様を直接生成させるDirectVLを比較した。Tidy Tuesdaysのテストデータを使ったLLMによる自己評価パイプラインでは、FlintのLLM-judgeスコアが、GPT-5.1で16.27対15.91、GPT-5-miniで16.16対15.60、GPT-4.1で15.91対15.34となり、いずれもDirectVLを上回ったとしている。また、FlintはMicrosoft ResearchのAI支援データ分析・グラフ作成プロジェクト「Data Formulator」でも使われている。

データ仕様とチャート仕様を分ける

Flintでは、まず人間やAIエージェントが、データ本体、データの意味、チャートの指定をまとめた入力を用意する。JavaScript/TypeScriptから使う場合、この入力はオブジェクトとして扱い、必要に応じてJSONファイルとして保存することもできる。入力をFlintのコンパイラに渡すと、Vega-Lite、Apache ECharts、Chart.jsといった描画ライブラリ向けの設定に変換される。アプリやスクリプトは、その変換後の設定を各ライブラリに渡してグラフを描画する流れになる。

入力は、グラフを直接描いた画像ファイルではなく、グラフ化するデータと「どう描きたいか」をまとめた仕様にあたる。中身は主にdatasemantic_typeschart_specで構成される。dataにはグラフ化する値を入れる。semantic_typesでは、列が日付、価格、割合、国、順位などの何を表しているかを、RankTemperaturePriceCountryなど70種類以上のセマンティック型で記述する。chart_specでは、チャートの種類と、x軸、y軸、色、サイズ、ファセット(小分け表示)などに、どのフィールドを使うかを指定する。

つまり、chart_specが指定するのは「何をどこへ割り当てるか」で、コンパイラが担うのは「その指定を読みやすく表示するための細部」にあたる。軸の目盛り数、日付や数値の表示形式、余白の大きさ、ラベルの角度、凡例の位置、具体的な配色などを逐一書き込まなくても、Flintのコンパイラがdatasemantic_typesから列の性質を読み取り、各描画ライブラリ向けの詳細設定へ変換する。

ただし、具体的な指定が一切できないわけではない。chart_specには基準サイズを示すbaseSizeや上限サイズを示すcanvasSize、テンプレート固有のchartPropertiesも含められる。さらに、optionsでレイアウト調整に関わる挙動を指定でき、生成後の各ライブラリ向け設定を直接編集することもできる。

同じ入力から複数の描画先向けの設定を生成できる点も特徴の一つとなっている。発表時点の描画先はVega-Lite、Apache ECharts、Chart.jsで、これらの描画先をまたいで30種類以上のチャート型に対応する。今後は描画先をさらに追加する予定としている。対応状況の詳細はプロジェクトサイトで確認できる。

プロジェクトサイトでは、Vega-Lite、ECharts、Chart.jsのギャラリーを切り替えながら、複数のチャート例を確認できる。下のキャプチャはVega-Lite向けギャラリーを表示したもの。

FlintプロジェクトサイトのVega-Lite向けギャラリー

インストールとMCPサーバー

公開リポジトリには、npmパッケージflint-chartの元になるJavaScript/TypeScriptライブラリと、MCPサーバーとしてFlintを使うためのflint-chart-mcpのソースコードが含まれる。flint-chartは、Flintの入力から各チャート描画ライブラリ向けの設定や仕様を生成するためのライブラリで、npmからインストールできる。

npm install flint-chart

インストール後は、JavaScript/TypeScriptのスクリプトやアプリからflint-chartを読み込んで使う。データ本体、セマンティック型、チャート仕様をまとめた入力をassembleVegaLite()assembleECharts()assembleChartjs()に渡し、それぞれVega-Lite向けの仕様、EChartsのoption、Chart.jsのconfigを生成する。

MCPサーバーは、FlintをMCP対応のAIクライアントやコーディング環境からツールとして呼び出し、エージェントにチャートの作成、検証、レンダリングまで任せたい場合に必要になる。flint-chart-mcpは、ツール呼び出しの中で直接渡したデータのほか、指定したローカルのJSON、CSV、TSVのデータファイルを読み込める。

MCPサーバーを起動する場合は、次のように実行する。なお、ローカルのスクリプトからflint-chartを直接呼び出すだけなら、MCPサーバーは必要ない。

npx -y flint-chart-mcp

FlintはMITライセンスで公開されている。リポジトリにはTypeScript実装、MCPサーバー実装、デモサイト、ドキュメント、サンプル仕様、テストデータなどが含まれ、Microsoft ResearchがIDEAS Lab(中国人民大学)と共同で開発していると説明されている。Python版は現時点ではソースのみのプレビューで、研究論文は今後公開予定としている。

おすすめ記事

記事・ニュース一覧