Примечание автора: в этой статье разбираемся, как Flint-interactive использует «семантические события + операции обновления», чтобы снизить затраты и количество ошибок при создании интерактивных графиков агентами, а также рассматриваем три способа интеграции.
Если вы разрабатываете ИИ-агента для анализа данных или создания отчётов, вам наверняка знакома ситуация: агент быстро строит статический график, но стоит добавить фильтрацию по клику или связанное выделение области, как приходится переделывать всё несколько раз. То съезжает разметка, то перестаёт работать подсветка. Исправишь одно — сломается другое, а токены и время уходят на отладку.
22 октября 2026 года Microsoft Research представила Flint-interactive — язык интерактивной визуализации данных, построенный на базе Flint. В этой статье мы не рекомендуем новую библиотеку графиков. Вместо этого используем Flint-interactive как пример, чтобы обсудить, как проектировать высокоуровневые спецификации вывода для агентов, чтобы им приходилось меньше писать низкоуровневый код отрисовки.
Главное: из статьи вы узнаете, что влияет на стоимость и надёжность создания интерактивных графиков агентами, разберётесь в принципе «визуальную логику — компилятору, логику взаимодействия — в семантические события» и поймёте, для каких задач подходят три способа интеграции: в диалоге, в приложении и с пользовательской интерактивностью.

Почему агенту дорого писать код интерактивных графиков без Flint-interactive
На первый взгляд, поручить агенту написание кода интерактивного графика — самый гибкий вариант. Но, как отмечается в исследовательском блоге, даже при использовании мощных передовых моделей на практике остаются два заметных ограничения.
Первое — высокая стоимость генерации. Агенту редко удаётся создать интерактивный график, который устроит пользователя, с первой попытки. Обычно требуется несколько раундов рассуждений, написания кода и отладки, а каждый из них расходует токены и время. Второе — низкая надёжность. Интерактивная визуализация сама по себе сложна: у выразительных интерактивных графиков легко ломается вёрстка или перестают работать элементы взаимодействия. А исправления могут породить новые проблемы.
Можно ли вместо этого использовать встроенные возможности библиотек для построения графиков? По мнению авторов блога, некоторые библиотеки не предоставляют достаточно выразительных средств взаимодействия, поэтому создавать на их основе интерактивные графики с индивидуальной логикой сложно. В итоге не хватает языка описания взаимодействий, который был бы одновременно «выразительным и достаточно высокоуровневым».
| Подход | Что должен выдать агент | Основная проблема | Насколько подходит |
|---|---|---|---|
| Написание низкоуровневого кода рендеринга | Обработчики событий, определение попадания по элементу, логика перерисовки | Несколько раундов отладки, большой расход токенов, риск новых багов | Максимальная выразительность, низкая стабильность |
| Только встроенные средства библиотеки графиков | Включение нескольких параметров конфигурации | Ограниченный набор взаимодействий, сложно настроить под себя | Стабильно, но недостаточно выразительно |
| Спецификация Flint-interactive | Сопоставление семантических событий с операциями обновления | Нужно изучить новую систему спецификаций | Баланс выразительности и надёжности |
Если для таких задач с многораундовой генерацией вашему агенту нужно часто переключаться между моделями, можно подключить несколько популярных моделей через единый интерфейс APIYI apiyi.com. Один и тот же код вызова позволит сравнить количество раундов и расход ресурсов для разных моделей и понять, насколько дорого в вашем случае обходится написание низкоуровневого кода.
Ключевые особенности Flint-interactive
| Особенность | Описание | Польза для разработчика |
|---|---|---|
| Семантические события | Компилятор преобразует клики, перетаскивания и нажатия клавиш в события с информацией о выбранных элементах графика и данных | Агенту не нужно работать с пиксельными координатами и проверять попадание в элементы |
| Операции обновления | Высокоуровневые операции, такие как set-style, set-annotation и set-viewport, описывают изменения на экране | Не нужно работать с графическими элементами конкретного рендерера |
| Машина состояний Flint Canvas | Отслеживает действия пользователя на холсте и управляет состоянием рендеринга | Фреймворк управляет состоянием во время выполнения, снижая риск рассинхронизации |
| Композиция | Генерацию событий и визуальные обновления можно комбинировать и связывать с таблицами, текстом и компонентами | Можно создавать истории на основе данных и взаимосвязанные дашборды |
Семантические события: Flint-interactive заботится только о том, какие данные выбрал пользователь
Семантические события — центральное понятие Flint-interactive. При традиционном подходе агенту нужно обработать событие вроде «кнопку мыши нажали в координатах (x, y) и перетащили указатель в другое место», а затем самостоятельно вычислить, какие точки данных попали в выделенную область. Во Flint эту работу выполняет компилятор: он сразу выдаёт осмысленное событие, например «пользователь выделил эти группы стран».
Это похоже на разницу между нативными DOM-событиями и бизнес-событиями во фронтенд-разработке. При работе с бизнес-логикой вас интересуют не координаты mousedown, а то, что «пользователь выбрал заказ A». Семантические события дают такую же абстракцию для визуализации, причём компилятор гарантирует её корректность.
Операции обновления: Flint-interactive заменяет императивную перерисовку декларативным описанием результата
Получив семантическое событие, интерактивная логика должна ответить всего на один вопрос: как должно измениться изображение. Среди операций обновления, перечисленных в блоге, — выделение данных с помощью set style, добавление подписи к точке через set annotation, а также перемещение или масштабирование области просмотра с помощью set viewport.
Это похоже на разницу между SQL и циклом, написанным вручную. В SQL вы описываете, какой результат нужен, а база данных решает, как его получить. При работе с интерактивностью Flint вы описываете, какие данные нужно выделить, а компилятор преобразует это в конкретные изменения на холсте, включая определение выбранного объекта и низкоуровневое обновление визуализации.
Машина состояний: Flint Canvas управляет средой выполнения интерактивности
По сути, Flint Canvas — это машина состояний, которая непрерывно отслеживает взаимодействия пользователя с холстом и управляет состоянием отрисовки. Для агента это означает, что ему не нужно самостоятельно хранить промежуточные состояния, в которых легко ошибиться: например, какой объект сейчас выбран и было ли снято предыдущее выделение.

На схеме показано ключевое разделение из блога: визуальной логикой управляет компилятор, а интерактивную логику пользователь описывает на семантическом уровне. Агент отвечает только за промежуточный уровень — сопоставление событий с обновлениями, а обе крайние части берет на себя фреймворк.
Принцип Flint-interactive, который можно применить в других проектах: высокоуровневые спецификации для вывода агента
За пределами Flint-interactive в этом кейсе особенно полезно инженерное решение: не заставлять агента генерировать код на том уровне, где он с наибольшей вероятностью ошибётся. Низкоуровневый код рендеринга содержит сложные зависимости, а обратная связь приходит не сразу. Поэтому ошибки и повторные попытки агента на этом уровне обходятся дорого.
Если посмотреть с другой стороны, Flint превращает открытую задачу программирования в задачу сопоставления элементов из ограниченного набора. Пространство возможных ответов агента сужается, структура становится единообразнее, а результаты легче проверять. Этот подход применим и к оркестрации рабочих процессов, созданию форм, вёрстке отчётов и другим задачам.
| Критерий | Подходит для вывода агента | Подходит для компилятора или среды выполнения |
|---|---|---|
| Выражает ли бизнес-логику | Да, например: «выделить элементы той же группы после выбора страны» | Нет, например: преобразование координат пикселей |
| Зависит ли от большого объёма скрытого состояния | Зависимость небольшая, достаточно одного сопоставления | Зависимость большая, требуется постоянное отслеживание |
| Легко ли найти причину ошибки | Структура спецификации понятна, её легко проверить | Детали рендеринга разбросаны по коду, разобраться сложнее |
| Можно ли использовать повторно | Можно сохранить как готовую настройку, например linked-brush | Общая инфраструктура, которую достаточно реализовать один раз |
При проектировании формата вывода для собственного агента можно пройтись по этой таблице. Если уровень одновременно выражает намерение, мало зависит от состояния и легко проверяется, его можно доверить агенту. В противном случае лучше перенести эту работу в детерминированный код или компилятор.
Важно отметить, что исследовательский блог не приводит количественных данных о снижении расхода токенов или повышении доли успешных попыток. Поэтому пользу этого принципа стоит проверить на собственных задачах, а не принимать выводы на веру.
Быстрый старт с Flint-interactive: 3 способа подключения
В блоге описаны три способа работы с Flint-interactive: для пользователей графиков, разработчиков приложений и дизайнеров интерактивности. Рассмотрим их по порядку — от простого к более сложному.

| Способ подключения | Для кого | Что создаёт агент или приложение | Типичный сценарий |
|---|---|---|---|
| Использование в чате (Flint-MCP + MCP Apps) | Пользователи графиков | Спецификация графика Flint + interaction_spec |
Изучение данных в чате с передачей выбранных элементов в уточняющий запрос |
| Интеграция в приложение (Flint Interactive Canvas) | Разработчики приложений | Функции обработки семантических событий + операции обновления, отправляемые в Canvas | Дашборды, истории на основе данных, связанное взаимодействие графиков и таблиц |
| Настройка взаимодействий (программный API) | Дизайнеры интерактивности | Триггер trigger + собственная функция handle | Нестандартные взаимодействия за пределами готовых настроек, например DimpVis |
Вариант 1: использовать Flint-interactive в диалоге через MCP
Это самый простой способ. С помощью Flint-MCP и MCP Apps можно работать с Flint Interactive прямо в чате или на интерактивном холсте. Настройку нужно выполнить по официальному руководству по MCP. После подключения процесс выглядит примерно так:
- Следуя официальному руководству по настройке MCP, подключите Flint-MCP к чату или интерактивному холсту с поддержкой MCP Apps;
- Расскажите агенту, какую диаграмму нужно построить и какие взаимодействия добавить, например: «разрешить выделение области с подсветкой стран из той же группы»;
- Агент создаст спецификацию
interaction_specв дополнение к спецификации диаграммы Flint и отобразит интерактивную диаграмму в диалоге; - Выделенные на диаграмме данные можно передать в качестве контекста для дальнейшего диалога.
Четвёртый шаг особенно полезен. Пользователь может выделить область с аномальными данными и сразу спросить: «Почему эти точки выше остальных?» При этом агент получит структурированные результаты выделения, а не расплывчатое текстовое описание.
Вариант 2: интегрировать Flint-interactive Canvas в приложение
Если вы хотите использовать интерактивные диаграммы в собственном дашборде или истории, построенной на данных, подойдёт Flint Interactive Canvas. Данные здесь передаются в обе стороны:
- Диаграмма → приложение: Flint Canvas отправляет семантические события, которые приложение принимает через обработчик. Их можно использовать для фильтрации таблицы, обновления другой диаграммы или изменения состояния приложения;
- Приложение → диаграмма: когда компоненту приложения нужно изменить диаграмму, достаточно отправить операцию обновления в Flint Canvas.
В примере из блога показана двусторонняя связь между диаграммой и таблицей: при нажатии на строку таблицы подсвечивается точка на диаграмме, и наоборот. Для продуктов с отчётами это основа взаимодействия между визуализацией и данными. В блоге также упоминается, что навык interaction-author можно передать своему агенту для программирования, чтобы он помог добавить в приложение готовые варианты взаимодействия.
Способ 3: создание интерактивных функций Flint-interactive через программный API
Когда готовых взаимодействий, например связанного выделения областей на нескольких графиках (linked-brush), недостаточно, можно через программный API определить триггер trigger и собственную функцию handle. Она связывает семантическое событие с последовательностью обновлений графика.
В примере из блога при нажатии на страну она подсвечивается и получает подпись с названием. Этот обработчик объединяет операции set-style и set-annotation, при этом работать с графическими элементами конкретного рендерера не требуется. В более сложном примере DimpVis пользователь может перетаскивать точку вдоль временной траектории и наблюдать, как меняются температура и количество осадков во всех городах.
🚀 Совет для начала: сначала проверьте с помощью первого способа, подходят ли ваши данные для интерактивной визуализации, и только потом решайте, стоит ли переходить ко второму или третьему. Подключить модели для работы агента можно через единый интерфейс APIYI apiyi.com: переключайте несколько популярных моделей в одном коде и смотрите, какая из них стабильнее выдаёт корректный
interaction_spec.
Оценка надёжности спецификаций Flint-interactive, созданных агентом
В блоге не говорится, какие модели или агенты лучше справляются с созданием спецификаций Flint, поэтому перед запуском лучше организовать простой процесс оценки. Рекомендуем обратить внимание на следующие показатели:
| Показатель | Как измерять | Что показывает |
|---|---|---|
| Доля успешных попыток с первого раза | Доля результатов, которые корректно отображаются и работают уже после первой генерации | Позволяет напрямую оценить затраты на генерацию |
| Среднее число раундов исправлений | Количество раундов диалога от первой генерации до рабочего результата | Отражает расход токенов и времени |
| Соответствие интерактивного поведения запросу | Проверка человеком, соответствует ли поведение требованиям | Корректная спецификация не обязательно отражает намерение пользователя |
| Устойчивость к регрессиям | Проверка остальных взаимодействий после изменения одного из них | Помогает выявить проблемы с надёжностью, о которых говорится в блоге |
Подготовьте набор фиксированных требований к интерактивности и протестируйте на нём два подхода с одинаковыми промптами: «написать код рендеринга напрямую» и «выдать спецификацию Flint». С помощью интерфейса для работы с несколькими моделями, такого как APIYI, можно сравнить их в одном скрипте и не тратить время на отдельное подключение SDK каждого провайдера.
Частые вопросы FAQ
Q1: Что такое Flint-interactive?
Flint-interactive — язык для интерактивной визуализации данных, разработанный Microsoft Research на основе Flint. Компилятор переводит действия пользователя в семантические события, а затем изменяет графики с помощью высокоуровневых операций обновления. Это позволяет пользователям и агентам описывать в компактной спецификации такие действия, как щелчки, фильтрация, масштабирование, выделение и взаимодействие между графиками.
Q2: Чем Flint-interactive отличается от подхода, при котором агент сам пишет код взаимодействия с графиками?
Когда агент пишет код напрямую, ему приходится одновременно обрабатывать события, определять попадание в элементы и перерисовывать графики. Такой подход гибок, но многошаговая отладка обходится дороже, а ошибок возникает больше. Flint-interactive передаёт визуальную логику компилятору: агент описывает только то, «какому семантическому событию соответствует какое обновление». В результате спецификация получается короче, а её структуру проще проверить.
Q3: Когда был представлен Flint-interactive?
Microsoft Research опубликовала исследование в своём блоге 22 октября 2026 года. В материалах нет чёткой информации об открытой лицензии, зрелости проекта и его пригодности для продакшена. Перед использованием в реальном проекте рекомендуем проверить актуальные сведения в официальном репозитории.
Q4: Для каких задач лучше всего подходит Flint-interactive?
— **Диалоговый анализ данных**: выделение точек на графике в чате и использование результата в уточняющих вопросах;
— **Отчёты и дашборды**: взаимодействие нескольких графиков и фильтрация таблицы с деталями по щелчку на графике;
— **Истории на основе данных**: двусторонняя подсветка графиков и абзацев текста, как в интерактивных материалах журналистики данных.
Q5: Как подготовить вызов модели при создании агента с Flint-interactive?
Flint решает вопрос «что выводить», но саму модель нужно подключать отдельно. Один из удобных вариантов — подключить несколько популярных моделей через APIYI apiyi.com и протестировать один и тот же набор требований к интерактивности через единый интерфейс. Сравните, как часто сгенерированные спецификации пригодны к использованию с первой попытки и сколько раундов исправлений требуется, а затем выберите модель для продакшена.
Q6: Как руководителю продукта понять, стоит ли команде внедрять Flint-interactive?
Для начала ответьте на два вопроса: действительно ли пользователям нужно исследовать данные на графиках и часто ли приходится переделывать интерактивные графики, созданные агентом. Если оба ответа положительные, стоит провести небольшую проверку, используя первый подход. На этапе тестирования можно быстро переключаться между моделями на платформе APIYI и снизить затраты на проверку.
Q7: Какие ограничения Flint-interactive известны и что ещё предстоит выяснить?
— **Нет количественных данных**: в блоге не опубликованы конкретные цифры экономии токенов или повышения доли успешных результатов;
— **Совместимость с моделями неясна**: не указано, какие модели лучше всего генерируют спецификации Flint;
— **Ограниченный набор взаимодействий**: взаимодействия за пределами готовых вариантов нужно реализовывать самостоятельно через программный API. Разработчики предлагают отправлять новые варианты на GitHub, чтобы расширить этот набор.
Flint-interactive: главное
- Источник затрат: когда агент сам пишет код интерактивности, требуется много раундов отладки. Это расходует токены, а исправления могут порождать новые ошибки;
- Семантические события: компилятор переводит простые действия, такие как клик и перетаскивание, в описание того, какие данные выбраны;
- Операции обновления: set-style, set-annotation и set-viewport декларативно задают изменения на экране, не затрагивая низкоуровневый рендеринг;
- Разделение ответственности: компилятор отвечает за визуальную логику, интерактивность описывается на семантическом уровне, а автомат состояний Canvas управляет выполнением;
- Три варианта использования: MCP для работы в диалоге, Canvas для приложений и программный API для пользовательской интерактивности;
- Универсальный принцип: задавайте для агента высокоуровневую спецификацию вывода, а наиболее подверженный ошибкам слой передавайте детерминированной системе;
- Проверка на практике: через единый интерфейс APIYI сравните несколько моделей и проверьте стабильность генерации спецификаций.
Итоги
Идею семантических событий в Flint-interactive можно свести к трём пунктам:
- Точная постановка проблемы: генерировать интерактивные диаграммы сложно не потому, что модели недостаточно мощные, а потому, что не хватает выразительного и достаточно высокоуровневого языка для описания взаимодействий;
- Чёткое разделение задач: компилятор отвечает за обработку событий и обновление отображения, а агент только описывает соответствие «событие → обновление»;
- Поэтапное внедрение: можно начать с тестирования в диалоге, затем интегрировать инструмент в приложение и при необходимости настроить собственные взаимодействия.
Командам, которые разрабатывают агентов для отчётности или анализа данных, стоит присмотреться к этим принципам и пересмотреть формат вывода своего агента — даже если пока они не планируют использовать Flint.
Чтобы проверить подход на практике, можно подключить несколько популярных моделей через APIYI apiyi.com и сравнить результаты на одном наборе требований к взаимодействию. Так будет проще подобрать модель и её конфигурацию под свои задачи.
📚 Источники
- Microsoft Research Blog — Flint-interactive: официальный исследовательский блог о Flint-interactive
- Ссылка:
microsoft.com/en-us/research/blog/flint-interactive-a-language-for-creating-interactive-data-visualizations - Описание: статья о семантических событиях, операциях обновления, конечном автомате Canvas и трёх способах использования — через MCP, Canvas и программный API. В блоге также есть руководство по настройке MCP, библиотека примеров взаимодействий и ссылка на программный API
Автор: техническая команда APIYI
Обмен опытом: заходите на APIYI apiyi.com, чтобы обсудить с нами практический опыт работы с агентами и подключения нескольких моделей. Другие материалы доступны в центре документации docs.apiyi.com
