FastBot
Нейропреобразования
Модуль служит для изменения типа существующей визуализации на дашборде при помощи интеллектуального помощника FastBot.
Концепт
Используя чат с FastBot пользователь может за несколько секунд изменить тип визуализации. Бот подскажет подходящий тип, поможет подготовить необходимые данные.
Фронтовая часть модуля включает в себя функционал по удалению изменяемой визуализации и размещению на её месте новой с полученными в результате нейропреобразования параметрами.
ML-разработка
Модель получает на входе набор характеристик выбранных пользователем визуализаций: набор информации, отправляемой в Echart для отрисовки; а также текстовый запрос от пользователя, который центральная модель определила как запрос на преобразование визуализации. На выходе должна возвращать новый набор параметров для подготовки визуализаций на фронте.
Модель состоит из 2 модулей. Первый модуль использует обработку текстов на естественном языке (nlp). Второй модуль выполняет задачу классификации по результатам работы первого модуля.
Цель первого модуля - интерпретация текстового запроса от пользователя в рамках элементов визуализации.
Цель второго модуля - выбор финального типа визуализации и определение используемых в нем полей.
Входные данные - набор общих параметров:
- Уникальные идентификаторы преобразуемых визуализаций
- Используемые поля из модели данных с их типами в разрезах, показателях, дополнительных секциях (ширина пузырька, разрезы в шапке) для каждой отдельной визуализации отдельным списком.
- Все поля из всех моделей данных отдельным списком (вне зависимости от того, используются ли они в визуализациях или нет).
- Запрос от пользователя вида "измени тип данной визуализации", "хочу видеть вместо этого графика таблицу", "преобразуй столбчатую диаграмму в каскадную", "поменяй плоские таблицы на сводные". Запрос от пользователя, который центральная модель определила в данную секцию, может содержать задания и для других модулей, например: "смени таблицу с обычной на сводную и скругли её углы"; однако все не имеющие отношение к данному модулю элементы запроса должны быть отсечены как лишние.
Первый модуль
Работа данного модуля ИИ заключается в выявлении ключевых слов из запроса пользователя и передаче сведений для выбора наиболее подходящего типа для указанной визуализации. В том случае, если пользователь в явном виде указал тип нужной ему визуализации, и нет никаких барьеров для её преобразования, то во второй модуль передается указанный тип и иные входные параметры.
Типы, которые могут быть указаны пользователем (возможные ключевые слова в запросе, в т.ч. и на англ.):
- Определяет как столбчатую диаграмму (Bar) - диаграмма, столбчатая диаграмма, комбинированная диаграмма (часть показателей как столбцы), столбы/столбцы/столбики и синонимы.
- Определяет как линейную диаграмму (Line) - комбинированная диаграмма, линейная диаграмма (часть показателей как линии), график, линейный график, линия, пунктир, пунктирный график, точки.
- Определяет как круговую диаграмму (PieChart) - круговая диаграмма, круг, пирог, роза, пай чарт
- Определяет как водопад (Waterfall) - водопад, каскад, каскадная диаграмма, ватерфалл (в т.ч. с использованием букв "о", одной "л" и т.п.)
- Определяет как дерево (TreeMap) - дерево, иерархия, иерархическая диаграмма, вложенная диаграмма, тримап (тримэп и т.п.)
- Определяет как пузырьковую диаграмму (Bubble) - точечная диаграмма, пузырьки, пузырьковая диаграмма, шарики, бабл (и т.п.)
- Определяет как таблицу (Table) - таблица, плоская таблица, сводная таблица, ячейки, сетка, тэйбл (табла и т.п.)
Барьеры для преобразования:
- Слишком мало выбрано полей - возвращает ошибку "Вы выбрали слишком мало полей для данного типа визуализации. Пожалуйста, выберите необходимые поля в данных к визуализации, напишите их в чат или позвольте мне выбрать вместо Вас!" на фронт и переходит в режим ожидания ответа от пользователя.
- Слишком много выбрано полей - возвращает ошибку "Вы выбрали слишком много полей для данного типа визуализации. Пожалуйста, удалите ненужные поля в данных к визуализации, напишите их в чат или позвольте мне убрать вместо Вас!" на фронт и переходит в режим ожидания ответа от пользователя.
- Как минимум одно поле имеет неподходящий тип данных - возвращает ошибку "Невозможно использовать поля {список полей} для построения запрашиваемой визуализации. Пожалуйста, удалите одно или несколько из этих полей в данных к визуализации, выберите другой тип преобразования или позвольте сделать это за Вас!" на фронт и переходит в режим ожидания ответа от пользователя.
Второй модуль
Помимо общих данных получает на входе либо тип визуализации, указанной пользователем, либо задание на определение этого типа, либо задание на преодоление барьера. Не работает с текстовым запросом от пользователя.
- Тип визуализации определен пользователем и нет никаких барьеров - данный модуль пропускается.
- Тип визуализации определен пользователем, но есть барьеры, преодоление которых человек доверил машине:
- Есть лишние поля - модуль удаляет эти поля
- Не хватает полей - модуль анализирует необходимые для заполнения элементы визуализации (разрезы, показатели) и согласно доступному типу, контексту запроса и неиспользуемым в выбранной визуализации полям назначает такие поля в подходящие разрезы и показатели (логика аналогична нейровизуализации, где входной массив данных - неиспользуемые поля)
- Есть поля с неподходящим типом данных - если пользователь просит избавиться от них, то см. п. "Есть лишние поля". Если пользователь просит модель саму определить подходящий тип, включая эти поля, то см. п. "Тип визуализации не определен"
- Тип визуализации не определен пользователем вручную - модуль определяет наиболее подходящий тип визуализации, опираясь на используемые в визуализации поля (логика аналогична нейровизуализации, где входной массив данных - используемые поля)
Важно! В случае, если итоговый тип диаграммы не определен пользователем, а подбирается моделью, то необходимо исключать из списка возможных визуализаций для преобразования текущий тип (не превращать круговую диаграмму в круговую)
Выход модели:
- Ключевое слово Replace
- Идентификаторы затронутых визуализаций
- Тип визуализации (ключевое слово Bar/Line/Table/PieChart и др.)
- Используемые поля (с указанием места использования - разрез или показатель)
Центральный модуль (Фронт + Бэк + ML)
Центральная модель искусственного интеллекта FastBot, получающая текстовый запрос от пользователя и определяющая модуль, решающий поставленную задачу, используя обработку естественного языка. Является инструментом поддержки аналитиков и разработчиков.
Разработка на фронте и бэке
Необходимо создать модуль, представляющий собой чат-бота, имеющего доступ к данным пользователя, визуализаций и из модели данных.
Расположение:
Нижняя правая часть дашборда в конструкторе на одной вертикальной линии с кнопками "Настройки", "SQL-код", "Сохранить проект".
В закрытом состоянии представляет собой логотип FastBot. При нажатии пользователем на логотип должен открываться чат, уникальный для данного проекта и данного пользователя – каждому чату необходимо присваивать уникальный идентификатор исходя из этих двух критериев.
В верхней части открытого чата должно быть подписано его название – FastBot. При клике на название должна открываться справочная информация о чат-боте и его возможностях (ссылка).
*Альтернативный вариант – добавить кнопку "info" со всей доступной информацией о боте.
Данный модуль будет доступен только для ролей "Аналитик" и выше, поскольку имеет доступ к данным дашборда и может управлять созданием и изменением визуализаций. Для роли "Зритель" будет отсутствовать даже иконка бота. При переходе пользователя в режим просмотра данный модуль деактивируется – чат закрывается, а иконка становится некликабельной, хотя и остаётся в интерфейсе конструктора.
Внутри чат состоит из 4 элементов: сообщений бота, сообщений пользователя, поля ввода нового сообщения, плашек с датой.
Сообщения бота
Наибольшая часть задач бота связана с обработкой визуализаций на дашборде. В случае успешного выполнения запроса передаётся ответ из ML-модели в одно-два слова. В случае возникновения ошибки возвращается её описание (также из ML-модели).
Если запрос пользователя не направлен на изменение элемента дашборда, а содержит вопрос по данным, то бот возвращает ответ языковой модели в том виде, в котором он приходит на фронт.
При первом использовании бота данным пользователем (не в конкретном проекте, а в целом) – открытии чата нажатием на логотип – он отправляет следующее сообщение: "Приветствую! Я FastBot, Ваш интеллектуальный помощник в управлении дашбордом! Я могу помочь с обработкой визуализаций, изучением данных, их размещением в проекте и много чем ещё... Чтобы получить подробную информацию о моих возможностях – нажмите на моё имя в чате сверху."
При первом использовании бота данным пользователем в данном проекте в данный день он отправляет следующее сообщение: "Здравствуй, {Имя_Пользователя}! Чем я могу помочь тебе сегодня?".
*Слева от сообщения бота можно размещать его логотип.
Сообщения пользователя
Текстовые запросы от пользователя, отправленные через поле ввода. Каждый уникальный чат хранит всю историю сообщений пользователя за всё время использования данного чата.
*Справа от сообщения пользователя можно размещать нейтральный логотип либо фото пользователя из его профиля (когда и если будет добавлена такая возможность в панели администратора)
Поле ввода нового сообщения (отправка данных через бэкенд)
Текстовое поле, в которое пользователь может вводить любую комбинацию символов в неограниченном количестве.
В правой части поля ввода должна быть кнопка для отправки сообщения. При нажатии на эту кнопку текстовый запрос от пользователя попадает в секцию "Сообщения пользователя" в чате с ботом, а также происходит отправка следующей информации через бэкенд для ML-модели:
- Сообщение от пользователя текстом из чата
- Уникальный идентификатор для каждой выбранной визуализации
- Ширину и высоту страницы проекта
- Все поля (названия столбцов + их типы данных) из всех моделей данных, используемых в проекте (отдельно от полей для визуализаций)
- Весь набор информации с вкладок "Данные", "Вид" и "События", необходимый для создания и размещения выбранных визуализаций на дашборде.
- Информация о размещении всех визуализаций на дашборде, а именно: название визуализации, отступ от левого края (X), отступ от верхнего края (Y), ширина визуализации (Ш), высота визуализации (В).
Информация о дате
При отправке сообщений пользователем или ботом также передаётся информация о дате и времени отправки. В чате ведётся группировка сообщений по дням: сообщения разбиваются на отдельные блоки с указанием даты отправки в формате "XX месяца" (например, 12 декабря, 8 сентября) в виде плашки над первым сообщением в этот день (как в Телеграме). Особый формат записи имеют текущий день ("Сегодня") и предшествующий ему ("Вчера").
Принцип работы
Чат-бот должен иметь доступ ко всем объектам на всех страницах* одного дашборда. Под доступом подразумевается возможность сбора информации, изменения параметров, создания новых объектов.
*На разных страницах одного дашборда должна сохраняться общая для всего проекта история переписки.
В качестве результата работы модели ИИ с бэкенда возвращается следующее:
- Текстовый ответ пользователю
- Весь набор информации для вкладок "Данные", "Вид" и "События", необходимый для создания и размещения визуализации на дашборде.
- Тип задачи кодовым словом: new, change, replace. Кодовые слова используются для определения типа взаимодействия с дашбордом и имеющимися визуализациями: создание, изменение и замена.
Создание новой визуализации (new)
Если модель вернула кодовое слово new, то перед применением параметров из модели необходимо предварительно создать сам объект визуализации в координатах, указанных как отступ слева (X) и отступ сверху (Y). После создания вкладки новой визуализации заполняются данными.
Изменение имеющейся визуализации
Если модель вернула кодовое слово change, то новые визуализации не создаются. Параметры, переданные моделью, подставляются в существующие визуализации
Замена имеющейся визуализации
Если модель вернула кодовое слово replace, то должен выполняться следующий алгоритм:
- Удаляется первая визуализация из списка.
- Создаётся новая визуализация переданного из модели типа и размещается согласно переданным координатам X и Y.
- Новая визуализация заполняется данными из модели.
Алгоритм повторяется для всех преобразуемых визуализаций (с тегом replace)
ML-разработка
FastBot должен состоять из следующих модулей, решающих отдельные задачи:
- Модуль преобразования виджетов из одного типа в другой.
- Модуль изменения параметров и покраски виджетов.
- Модуль создания прототипов.
- Модуль позиционирования виджетов.
Для каждой задачи существует отдельное ТЗ с описанием и ссылкой на центральный модуль (этот). Сам центральный модуль должен с помощью обработки естественного языка классифицировать задачу и выбрать модуль для её выполнения на основании текстового запроса от пользователя. Ключевыми словами, по которым возможно определить класс задачи, могут быть:
- Модуль преобразования – "преобразуй", "тип", "вид", "поменяй/замени/измени {визуализацию} на", "преврати {визуализацию} в", а также названия типов для изменения: "график", "диаграмма", "таблица", "водопад" и т.п.
- Модуль изменения параметров и покраски – "поменяй/замени/измени {параметр} на", "скругли", "раскрась/перекрась", "цвет/гамма/оттенок/палитра", "добавь к {визуализации}", "размер" и т.п.
- Модуль создания прототипов – "создай/добавь/спроектируй/разработай/подготовь {визуализацию или дашборд}", "виртуальные данные", "прототип", также названия типов для создания: "график", "диаграмма", "таблица", "водопад" и т.п.
- Модуль позиционирования виджетов – "размести", "передвинь/подвинь/перенеси/перемести", "под/над/слева/справа" (и др. предлоги для позиционирования), "отступы/расстояние/промежутки/дистанция" и т.п.
Наибольшая часть задач бота связана с обработкой визуализаций на дашборде. Для запросов пользователя, связанных с этими задачами, необходимо отправлять в чат краткий ответ:
- "Готово! Сделано! Выполнено! Получилось! Успешно!" – в случае успешного выполнения запроса
- Текст ошибки на понятном пользователю языке (н-р, "к сожалению, я не могу разместить на этом дашборде 100500 различных визуализаций") – в случае возникновения ошибки или невозможности выполнить поставленную задачу
*В дальнейшем планируется добавить модуль по изучению данных на дашборде – помимо кратких и шаблонных ответов такой модуль должен будет позволить вести осмысленную беседу чат-бота с пользователем по разрешенным.
Отправка данных
Из полученного из фронта и бэка объёма информации центральный модуль оставляет лишь часть необходимых данных для работы задействованного модуля:
Для нейропреобразований:
- Уникальные идентификаторы преобразуемых визуализаций
- Используемые поля из модели данных с их типами в разрезах, показателях, дополнительных секциях (ширина пузырька, разрезы в шапке) для каждой отдельной визуализации отдельным списком.
- Все поля из всех моделей данных отдельным списком (вне зависимости от того, используются ли они в визуализациях или нет).
- Запрос от пользователя
Для позиционирования виджетов:
- Уникальные идентификаторы используемых визуализаций и групп
- Размеры и положение визуализаций на странице проекта (параметры X, Y, Ш и В)
- Запрос от пользователя
Позиционирование виджетов
Модуль служит для определения пространственного расположения существующих визуализаций относительно границ страницы и друг друга при помощи интеллектуального помощника FastBot.
Концепт
Используя чат с FastBot пользователь может за несколько секунд разместить визуализации на дашборде в нужных ему местах и выровнять их относительно друг друга. Бот определит оптимальное расстояние между объектами и группами, откорректирует их размеры.
Фронтовая часть модуля включает в себя функционал по размещению объекта в нужном месте – заданию отступов слева и сверху, а так же указания размеров визуалиации (ширины и высоты).
Важно! Задача по позиционированию виджетов должна выполняться в последнюю очередь после завершения работы других модулей нейросети (в случае, если в текстовом запросе от пользователя поставлено больше одной задачи). Исключением является явное задание порядка выполнения задач пользователем в текстовом запросе (н-р, "Сначала размести все виджеты на одинаковом расстоянии друг от друга, а потом поменяй цвет их фона на желтый")
ML-разработка
Вход модели
Модель получает на входе набор характеристик обо всех визуализациях, включающий в себя информацию о размерах и положении всех объектов проекта, а также текстовый запрос от пользователя, который центральная модель определила как запрос на позиционирование виджетов.
Работа с запросами на "эталонирование"
Данная подзадача может представлять собой запрос на выравнивание как границ визуализации, так и её расположения на дашборде относительно какого-то существующего параметра. Параметры в запросе могут быть указаны явно (в таком случае принимаем параметры от пользователя) либо без неявно (в таком случае модель должна подобрать наилучшее расположение).
Явное выравнивание границ – запрос вида: "Сделай эту визуализацию размером 800 на 600". Модель должна установить параметры X и Y для данной визуализации равными значениям из запроса.
Неявное выравнивание границ – запрос вида "Сделай размеры этой визуализации равными размерам круговой диаграммы". Модель должна определить из контекста запроса параметры X и Y для данной визуализации и установить их.
Явное расположение на дашборде – запрос вида "Размести виджет на расстоянии 50 от левого края и 100 от верхнего". Модель должна установить параметры Ш и В для данной визуализации равными значениям из запроса.
Неявное расположение на дашборде – запрос вида "Размести все виджеты на одинаковом расстоянии друг от друга". Модель должна определить из контекста запроса параметры Ш и В для данной визуализации и установить их.
Работа с относительным размещением
В рамках данной подзадачи модель должна уметь верно интерпретировать положение объекта по ключевым словам "выше/ниже/левее/правее", "сверху/снизу/слева/справа", "рядом/около/возле", "под/над/сбоку" и т.д. Параметры в запросе могут быть указаны явно (в таком случае принимаем параметры от пользователя) либо без неявно (в таком случае модель должна подобрать наилучшее расположение).
Явное изменение размера – запрос вида: "Уменьши ширину виджета на 25%". Модель должна уметь определять итоговое значение параметров для данной визуализации и устанавливать их равными этому значению.
Неявное изменение размера – запрос вида: "Сделай этот виджет немного шире". Модель должна уметь определять из контекста запроса и текущих размеров визуализации итоговое значение параметров и устанавливать их равными этому значению.
Явное расположение относительно других объектов – запрос вида: "Помести график над круговой визуализацией на расстоянии 20 пикселей". Модель должна уметь сопоставлять границы перемещаемого объекта с другими и устанавливать параметры согласно запросу пользователя.
Неявное расположение относительно других объектов – запрос вида: "Размести таблицу рядом с водопадом". Модель должна уметь сопоставлять границы перемещаемого объекта с другими, определять наиболее подходящее расстояние и устанавливать параметры визуализаций согласно собственным расчётам.
Работа с группами
Визуализации на дашборде можно группировать, в рамках группы возможно изменять выравнивание и позиционирование элементов. Если пользователь выбрал группу объектов, то модель должна уметь определять как размещение виджетов внутри группы, так и положение самой группы на дашборде.
В рамках данной подзадачи модель должна уметь работать с параметрами X, Y, Ш и В всей группы как обычного объекта дашборда (см. предыдущие подзадачи). Кроме того, модель должна уметь сопоставлять размеры виджетов внутри группы с размерами самой группы, работать с выравниванием и позиционированием элементов.
Явное управление размерами объектов внутри группы – запрос вида: "Сделай ширину всех объектов внутри группы равной 300 пикселей". Модель должна уметь перебирать все объекты внутри выбранной группы и устанавливать их параметры согласно запросу пользователя.
Неявное управление размерами объектов внутри группы – запрос вида: "Выровняй все объекты внутри группы по размеру". Модель должна уметь сопоставлять размеры объектов внутри группы, вычислять оптимальные параметры и устанавливать их выбранным виджетам.
Выравнивание и позиционирование объектов в группе – запрос вида: "Распредели объекты равномерно в группе" (justify-content: space-between). Модель должна уметь работать со свойствами Flexbox CSS, используемыми в выравнивании и позиционировании, устанавливать эти параметры группы согласно запросу пользователя
Выход модели:
- Кодовое слово Change
- Идентификаторы затронутых визуализаций и групп
- Преобразованные размеры и положение визуализаций на странице проекта (параметры X, Y, Ш и В)