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.