EnglishРусский Map

flint-chart

title
flint-chart
type
toolbox
summary
Компактная спецификация диаграмм от Microsoft для LLM-агентов, компилируемая в Vega-Lite, ECharts или Chart.js
tags
typescript, dataviz, ai-agents, mcp, watchlist
language
TypeScript
license
MIT
created
2026-07-18
updated
2026-07-18
lang
ru
translation_of
flint-chart
source_updated
2026-07-18
translated
2026-09-01
translator
lllm/antigravity/gemini-3.7-flash-medium

Flint - язык описания диаграмм, предназначенный для генерации LLM-агентами. Вместо того чтобы агент вручную писал полную конфигурацию для Vega-Lite, ECharts или Chart.js со всеми шкалами, осями, отступами и параметрами легенды, он формирует компактную спецификацию: какие данные используются, что означает каждое поле, какой тип диаграммы нужен и как поля сопоставляются с визуальными кодировками (encodings). Компилятор заполняет всё остальное и выдаёт готовую к отрисовке нативную спецификацию для выбранного бэкенда. Проект создан Microsoft Research совместно с лабораторией IDEAS Китайского народного университета (Renmin University of China).

Суть идеи строится на понятной дилемме: простые спецификации моделей генерируют надёжно, но выглядят такие графики плохо из-за стандартных настроек по умолчанию; детальные конфигурации выглядят хорошо, но слишком многословны, и агенты часто ошибаются. Flint предлагает компромисс: сохранить входные данные компактными, а решения по компоновке переложить на детерминированный компилятор. По своей сути это напоминает другие ориентированные на агентов решения, где модель выдаёт небольшое промежуточное представление, а точную рутинную работу берёт на себя обычный код - о проблеме надёжности структурированного вывода у моделей см. structured-output-benchmark.

Как это устроено

На вход подаётся объект ChartAssemblyInput из трёх частей: data (встроенные строки или URL к файлу JSON/CSV/TSV), semantic_types с сопоставлением каждого поля с одним из 70+ семантических типов (Quantity, Country, Rank, Temperature, Price и так далее) и chart_spec, где задаются тип диаграммы, сопоставление полей с кодировками и базовый размер. Компилятор анализирует семантические типы и кардинальность данных, автоматически рассчитывая размеры, отступы, размещение подписей, маркеры и легенды, поэтому агенту не требуется указывать их напрямую.

Одни и те же входные данные компилируются для трёх бэкендов с помощью трёх функций: assembleVegaLite, assembleECharts и assembleChartjs - каждая возвращает нативный объект спецификации для соответствующей библиотеки. Для смены бэкенда достаточно вызвать другую функцию без изменения входных данных. Всего для трёх рендереров поддерживается более 30 типов диаграмм.

В npm опубликовано два пакета: flint-chart (библиотека компилятора на TypeScript) и flint-chart-mcp (MCP-сервер, предоставляющий агенту инструменты Flint и рекомендации по выбору диаграмм, чтобы прямо в чате выбирать шаблон, валидировать его и открывать интерактивный просмотр графика либо возвращать статический PNG/SVG или сырую спецификацию бэкенда). Для агентных систем без поддержки MCP в репозитории есть отдельный agent skill. Порт на Python существует в дереве исходников в виде превью; пакет для Python пока не опубликован.

Использование

В виде библиотеки:

import { assembleVegaLite } from 'flint-chart';

const spec = assembleVegaLite({
  data: { values: myData },
  semantic_types: { weight: 'Quantity', mpg: 'Quantity', origin: 'Country' },
  chart_spec: {
    chartType: 'Scatter Plot',
    encodings: { x: { field: 'weight' }, y: { field: 'mpg' }, color: { field: 'origin' } },
    baseSize: { width: 400, height: 300 },
  },
});
// → a ready-to-render Vega-Lite spec

Те же входные данные, другой бэкенд:

import { assembleECharts, assembleChartjs } from 'flint-chart';

const echartsOption = assembleECharts(input);
const chartjsConfig = assembleChartjs(input);

В качестве MCP-сервера: укажите MCP-клиенту команду npx -y flint-chart-mcp. После этого агент сможет встраивать строки через data.values или считывать локальный файл JSON/CSV/TSV через data.url.

Ограничения

Для JS-библиотеки требуется Node 18+. Пакет для Python не опубликован - в репозитории доступно только предварительное превью исходников. Спецификация написана на JSON: в обсуждениях релиза отмечали, что формат удобен для машин, но не идеален для генерации моделями или ручного редактирования человеком, хотя насколько это критично на практике, пока не ясно. Справедлива и критика о том, что современные модели уже неплохо справляются с генерацией кода для matplotlib, R или Vega с первого раза. Соответственно, выигрыш зависит от того, окажется ли компактная спецификация Flint одновременно экономнее по токенам и надёжнее прямой генерации кода рендерера - а бенчмарков по этим параметрам в проекте пока нет. Спецификация сейчас не поддерживает наложение слоёв (layering) и композицию нескольких графиков. Научная статья заявлена со статусом "coming soon". Вопросы доступности (accessibility) сгенерированных диаграмм в документации не рассматриваются.

Поскольку это ранний исследовательский релиз с меняющейся спецификацией, готовящейся статьёй и неопубликованным Python-портом, проект добавлен в watchlist - к нему стоит вернуться, когда API стабилизируется и появятся бенчмарки.

github.com/microsoft/flint-chart - 1 902 звезды, лицензия MIT.