Нейроконнекторы
Задача:
Цель
Создание и внедрение в редактор модели данных модуля проверки качества данных с использованием языковой модели нейронной сети для обработки текстовых сообщений от пользователя.
Концепт:
Фронт: текстовая строкумента для Data Discovery вв секции пода сообщключения от пользователя с кнопками «Применить», «Сохранить» и «Отменить». При нажатии на кнопку «Применить» запускается обреспечиваботка тющекстового соудобщноени для пользователя яизучение набора данныкх и формирование скрипта загрузки без необходимости использовать SQL.
Концепт для интерфейса
- Кнопка для активации/деактивации ИИ модели.
- При активации появляется редактируемая таблица под исходной и разблокируется чат с моделью справа от таблиц. При неактивной модели писать
ю.Пв чат невослзможно, редактируемаяобртаблица скрыта. - Исходная таблица блоки
ообщенияи внесенидлямодельюизменений на время работы модели. - Одновреме
ющнно редактировать можно только однуюсятаблицу, но вопросы остаются по всем таблицам всподключекцнии«П(в чате могут быть запросы к нескольким таблицам последоварительныйо, но не параллельнос). - В чате мо
тр»жно обмениваться сообщениями с моделью. Если напражвлено заданиетсяна изменение данных, то модель отправляет код для редактирования временной таблицы и даёт ответ вида "Выполнено"/"Невозможно выполнить". Если модели задан вопрос, она даёт полноценный текстовый ответ на основании рассматриваемых данных. - При деактивации модели (нажати
ием на кнопку«Сохранить» внесенные изменения вносятся в скрипт и меняют модель данных. При нажатии на кнопку «Отменить» (при условии, что не была нажата кнопка «Сохранить») все предложенныемодельюИИ изменениясбрасываотменяются, однако чат остаётся и его можно возоблновицать кнопкой дляпактивации модели. Переписка в чате сохраняется двля кариждого отдельного просмдключения. - До
трлжнавбыть кнопка, позвраоляющаетсявочистить чат перед выхондом. - При а
чальктивноейсостояние.ML:языковаяИИ модели кнопка "Вставить в скрипт" добавляет код для редактируемобй нейросетью таблицы, а не для исхоткидной.
Концекстовых сообщений опт пользователя.ML
Языковая модель, способная обрабатывает 2 видаь запросов (и приводит к ним иные): задачи редактирования и задачи поиска. Превращает запрос от пользователя в SQL-код, который используется для создания демонсватрационной таблицы или окна сь ответом. Демонстрационная таблица хранится временно до тех пор, пока пользователь не подтвердит её использование, не отменит выбор или не выйдет из модели данных.
Функциональные требования:
Фронт: интеграция в модуль работы с моделями данных текстовой строки с 3 управляющими кнопками:
1. Текстовое поле имеет неограниченную длину по числу символов. При достижении видимой границы текстового поля справа оно должно автоматически расширяться вниз с переносом текста на следующую строку. Расширенное поле должно быть видно только при еобразовыборе строки звапроса нажатием на него. Нажатие на любое пустое место на странице должно приводить ких автоматическому скрытию поля до размеров первоначальной строки.
2. Кнопка «Применить» отправляет POST-запрос через API на бэкенд. В теле запроса находится текст из текстового поля и SQL-код из фронта. После нажатия на кнопку «Применить» другие кнопки (в т.ч. для перехода в скрипт загрузки или возвращения на дашборд) остаются недоступными до окончания работы модели. Из бэкенда возвращается SQL-запрос, который формирует временную таблицу для просмотра. Временная таблица добавляется в список таблиц, выносится на модель, курсор устанавливается на эту таблицу.
3. Кнопка «Сохранить». По умолчанию недоступна (некликабельна). Активируется после формирования таблицы предварительного просмотра. При нажатии на кнопку SQL-код интегрируется во фронт и происходит перезапись модели: сохранение названия старой таблицы – удаление старой таблицы – переименование временной таблицы – сохранение временной таблицы как обычной.
При нажатии на кнопку «Сохранить» должно появляться системное сообщение с кнопками для продолжения или отмены и текстом: "Применение изменений приведёт к перезаписи имеющейся таблицы. Все существующие связи между таблицами будут потеряны, их необходимо создать заново. Вы уверены, что хотите продолжить?"
4. Кнопка «Отменить» - удаляет временную таблицу, возвращает в таблицу предварительного просмотра результат работы скрипта без изменений от языковой модели.
ML: языковая модель принимает текстовый запрос и исходный SQL-код. Возвращает измененный SQL-код или текстовое сообщение.ClickHouse. Решает задачи редактирования строк столбцов, столбцов таблицы, таблиц модели, а также задачи поиска.
При удачном срабатывании модели при решении задач редактирования должен отправляться только SQL-запрос. При решении задач поиска или при неудачном срабатывании модели дДолжны отправляться текстовые сообщения с результатом поиска или ошибкой.
Ошибка: неправильно указано правило для решения поставленной задачи. Текст ошибки: "Неверно указано правило для обработки. Пожалуйста, измените запрос"
1. Обработка строк:
1.1. Ограничение выборки – уметь распознаватьшен ие числа строк в стыполбце по одному изять следующих принципов:
1.1.1. Прямое удаление. Пример: "Удали все строки в столбце Расходы, содержащие текстовипые значения". ALTER TABLE Таблица DELETE WHERE [Столбец] Условие
1.1.2. Удаление дубликатов. Пример: "Оставь только неповторяющиеся строки в столбце Доходы". SELECT DISTINCT ... FROM Таблица ИЛИOPTIMIZE TABLE Таблица DEDUPLICATE
1.1.3. Количественные ограничения на число значений с начала / конца . Пример: "Оставь только первые 100 строк в таблице". SELECT ... FROM Таблица LIMIT / OFFSET Значение
1.1.4. Задание условий - ограничение выборки одним из следующих способов:
1.1.4.1. Условные функции. Пример: "Если в столбце нет числовых значений, то удали его. Иначе умножь все числовые значения на 100". SELECT IF (Условие, Результат, Иначе)
1.1.4.2. Принадлежность – проверка на наличие значения в массиве / множестве / диапазоне. Использует операторы IN, EXIST, BETWEEN. Пример: "Оставь только даты в диапазоне от января 2023 до апреля 2024".
1.1.4.3. Сравнение. Использует операторы для сравнения как с фиксированными значениями, так и для сравнения столбцов между собой. Пример: "Оставь только положительные значения в столбце Прибыль"; "Оставь только строки, в которых Доход больше Расхода"
1.1.4.4. Условия по шаблонам – поиск по значениям строк в соответствии с заданным шаблоном. Пример: "Оставь только те текстовые строки, в которых содержатся кавычки"
1.2. Сортировка по столбцу. Пример: "Отсортируй столбец Количество по убыванию, пустые строки в конце". ORDER BY Столбец Правило
1.3. Добавление / изменение строк – расширение или заполнение таблицы одним из следующих способов:
1.3.1. Генерация строк по условию – добавление новых строк с использованием генератора значений. Неуказанные столбцы должны заполняться пустыми значениями. Пример: "Добавь в таблицу 50 строк, где Название компании – ООО "Домик", Доходы варьируются от 20000 до 30000 с равномерными шагами между значениями". Должен формироваться массив строк, которые после будут добавлены с помощью INSERT INTO.
1.3.2. Чёткое заполнение строк – пользователь сам вводит все нужные ему значения:
1.3.2.1. Создание строк для всей таблицы. Не указанные поля заполняются пустыми значениями (NULL):Пример: "Добавь две строки: Вася, апельсины, 5000, Краснодар. Миша, бананы, 10000, Сочи". INSERT INTO TABLE Таблица VALUES (Значение столбца 1, Значение столбца 2, ..., Значение столбца n)Ошибка: в таблице нет столбцов для некоторых из указанных значений. Текст ошибки: "В таблице нет столбцов для некоторых из указанных значений. Пожалуйста, проверьте список доступных столбцов и измените запрос"Ошов:
- Пои
бска:попытка подставить данные неподходящего типа. Текст ошибки: "Дляданных:{данные} выбран столбец с неподходящим типом. Пожалуйста, изменитезапрос"1.3.2.2. Создание строк в одном столбце и назначение их имеющимся значениям. Аналогично предыдущему пункту, но заполняется только одно поле для заполненной строки.Пример запроса: "Добавь название города Краснодар ко всем строкам, где цена больше 5000". Пример до выполнения: "Москва, 3000, яблоки", "NULL, 6000, бананы", "Ростов, 7000, апельсины". Пример после выполнения: "Москва, 3000, яблоки", "Краснодар, 6000, бананы", "Ростов, 7000, апельсины".Альтернативный запрос: "Замени название города на Краснодар во всех строках, где цена больше 5000". Пример до выполнения: "Москва, 3000, яблоки", "NULL, 6000, бананы", "Ростов, 7000, апельсины". Пример после выполнения: "Москва, 3000, яблоки", "Краснодар, 6000, бананы", "Краснодар, 7000, апельсины".Ошибкианалогичны предыдущему пункту.2.1. Добавление новых столбцов (ADD COLUMN). Модель должна не только создавать столбец, но и самостоятельно определять его тип данных (при отсутствии запросаот пользователя) и выполнять проверку на существование столбца с указанным названием:2.1.1. Создание пустого столбца.Пример: "Добавь в таблицу Фрукты столбец Количество"ALTER TABLE Таблица ADD COLUMN Столбец2.1.2 Создание столбца на основании других –модель должнасчитауметь находить необходиметаданныесостолбцы, строки и зна-основачения, создравниватьновыйих столбецзаданными, запоминать введённые условия, находить максоглаимум, минимум, средноеезапросуи(пот.дробно.в п.2.2.):
Пример: "СоздНайпиши,столбец Стоимость,ли вкотором будет считаться произведениестолбцовеЦCost значенаияи Кболичьшество20000?"ALTER. - Анализ использован
наия2.2. Изменение столбцов:2.2.1. Обработка типов данных (MODIFY COLUMN):2.2.1.1. Смена на другой тип данных –модель должнавыуметь определять контекст использования данных из источника, назначение отдельных столбцов, область проверку на возможностьизменения (задачи, которые можно решать с помощью данных). Пример: "Объясни, для чего тут столбец Month_num, если есть столбец Month?" или "Достаточно ли этих данных, чтобы проанализировать динамику расходов за 2024 год?". - Работа с типами данных: модель должна уметь определять и подставлять подходящий тип данных столбца
на указанный.
Пример: "ИзмВыбери наиболее подходящий тип данных для столбцаКоCost" илич"Ты нестправильнос текстового на числовой"Ошибка: пользовательпределагает неподходящий тип данных. Текст ошибки: "Невозможно изменитьл тип данных столбца Cost. Смени его науказавещественный". - Обрабо
жткалуйста, выберите подходящий типданных"ALTER TABLE Таблица MODIFY COLUMNСтолбец Тип данных2.2.1.2. Изменение разрядности –: модель должнапровумерятьнписать код дличиеясвойства «разнсфорядность» в тмаципе данных столбцаи таблицы, изменения имеющихся столбцов, создания новых на основании запроса (в т.
ч. с использованием агрегирующих функций). Пример: "Добавьдва знака после запятой встолбец Profit как результатРвыражения (Price - Cost) * Count - 5000" или "Трансхпонируй текущую таблицу". - Фильтрация и ограничение: мод
ы"Ошибкель должна:уметь остипавлять в наборе данныхвыбраннтоглько те столбца нет разрядности. Текст ошибки: "Изменить разрядность указанногоы, стролбцки и знаневозможно – это свойство отсутствует"2.1.1.3. (???) Измченение формата данных – сложная функция, которая прыеобразует представление исходных данных в формат,удобныйвлетворяют запросу от пользователя. Пример: "Удали все значения больше 20000" или "Оставь только первые 5000 строк".
Задание на разработку ML
При обработке запросов модель должна уметь определять столбцы и таблицы, даже если пользователь совершает ошибки в написании их названий либо пишет их на другом языке.
При обучении модели необходимо учитывать, что организация работы с данными происходит на ClickHouse, поэтому особенно важно обрабатывать особенности этого языка запросов, такие как использование сортировки для индексации и специфичность наименований типов данных.
ВАЖНО! Нейросеть не работает с готовым SQL-кодом или таблицей (не создаётся секции ALTER и запросов на изменение). Её задача - написать код для формирования модели данных как результата выборки из БД ClickHouse по шаблону, подставляя в него фрагменты, позволяющие решить поставленную пользователем задачу.
Вход модели:
Таблицы со всеми столбцами и значениями в них + промпт от пользователя. Задачи от пользователя отправляются последовательно через чат, в то время как исходные таблицы неизменны.
Необходимо учитывать, что число значений в таблице может превышать десятки и сотни миллионов при том, что ограничивать или сэмплировать выборку нельзя (поскольку результат работы модели будет использован в итоговом скрипте), но для демонстрационного варианта отображаются только первые 10 строк.
Модель должна определить решаемую задачу в зависимости от запроса пользователя. Если пользователь неудовлетворен результатом работы модели, то нейросеть должна пересмотреть решаемую задачу.
Поиск в данных ("Что и где находится?")
Не возвращает SQL-кода ни для таблицы-примера, ни для добавления в скрипт загрузки.
Модель должна по запросу от пользователя определить зону поиска в данных (локализовать до столбца, набора столбцов, интервала строк и т.д.) после чего выполнить сам запрос на поиск и написать ответ в чате. Решаемые в рамках данной задачи запросы могут включать в себя:
- Поиск конкретного значения (числового или текстового).
Запрос вида: "Есть ли среди Компаний AVA?".
Возвращает ответ вида: "{Количество} {Значение} есть/отсутствует в {Зона поиска}" – "AVA есть среди компаний". - Вывод всех уникальных значений в столбце. При первом запросе модель должна выдавать 10 самых часто встречающихся результатов с припиской "и ещё n", где n: (число уникальных значений)-10. При повторном запросе от пользователя выдаёт все значения через запятую (даже если их 100500).
- Поиск/подсчёт значений из диапазона/в диапазоне (набор строк, элемент строки, диапазон числовых значений).
Запрос вида: "У скольких работников из таблицы зарплата больше 100 000?".
Возвращает ответ вида: "{Количество} {Значение} есть/отсутствует в {Зона поиска}" – "У 28 работников зарплата больше 100 000". - Поиск агрегированного значения из числа следующих: минимум, максимум, среднее, сумма, разность, произведение, частное, статистические функции (мода, медиана, дисперсия, ско).
Возвращает предупреждение о больших затратах времени на выполнение операции вида "Этот запрос может выполняться длительное время. Напишите "да", если вы уверены, что хотите получить результат. Иначе можете продолжить чат".
Запрос вида: "Найди проект с наибольшими затратами".
Если пользователь напишет "Да", то модель должна выдать ответ вида: "{Запрашиваемое агрегированное значение} в {Зона поиска} – {Результат работы модели}" – "Проект с наибольшими затратами – AVA". Иначе продолжает отвечать на другие запросы. - Другие запросы на поиск в данных.
Вид ответа может меняться в зависимости от сути вопроса пользователя. Модель должна определять положение исходных данных по столбцам, точки разбиения, функцию разбиения и сборки нужного формата. При этом результат сложного запроса всегда будет строкой.Пример: "Измени записи названий региона с Регион №n на n-й регион, где n – число после ндомера № в назвательнии"select id, concat (arr[2], '-й регион') as name from (select *, regexp_split_to_array(name, '№')as arr from region r) f**запрос составь лен на PostgreSQL оги является тестовым
Пример неудачной обработки запроса язы(ковой могделью (установлен 1-й регион во всех названиях):select id, regexp_replace(name, 'Регион №(\d+)', '\1-й регион') as name from region r
2.2.2. Переименование столбца (RENAME COLUMN). Используоватется и для интересует показматель, а когда - его аналитиченскияй регистра в назврез). Нании.Ппример, ответом на вопрос: "ИзВ каком городе наибольшее число жителей?" должно быть название сгорода, а результатолбцм поиска Фпо запросукты: "Найди на Овощи".RENAME COLUMN Стболбьшеце TOчисло Нжителей среди представленных городов" – число жителей.
Анализван ие
2.2.3. Преспобральзования ("Зачем и гдае применных:
2.2.3.1. АрифметическиНе вычислозвращает SQL-кода ния. Вычисдление суммы, разности, произведения дтаннблицых и т.д.П-пример:а, "Дни для добавь ко всем числам, меньшим 5000, в столбце Доходы число 500"Ошибка: над указанным типом данных невозможно проводить арифметические вычисления. Текст ошибки: "Над указанным типом данных невозможно проводить арифметические вычисления. Пожалуйста, измените запрос"
2.2.3.2. Строковые функции. Соединение и разъединение строк, поиск символов, определение длины и т.д.Пример: "Соедини значения в скриптолбце Название региона с его порядковым номером в столбце Id"Ошибка: для указанного типа данных неприменимы строузковые функции. Текст ошибки: "Для указанного типа данных неприменимы строковые функции. Пожалуйста, измените запрос"
2.2.3.3. Математические функции. Вычисление экспонент, логарифмов, поиск корней и т.д. Пример: "Замени данные в столбце Наклон на синус от имеющихся значений в этом столбце"Ошибка: для указанного типа данных неприменимы математические функции. Текст ошибки: "Для указанного типа данных неприменимы математические функции. Пожалуйста, измените запрос"
2.2.3.4. Функции округления.Пример: "Округли значения в столбце Прибыль до 2 знаков после запятой"Ошибка: для указанного типа данных неприменимы функции округления. Текст ошибки: "Для указанного типа данных неприменимы функции округления. Пожалуйста, измените запрос"
2.2.3.5. Установка значений по умолчанию. Пример: "Установи в качестве базового значения в столбце Город значение Краснодар".
2.3. Удаление столбцов (DROP COLUMN). Пример: "Удали столбец Фрукты"Ошибка: столбца с указанным именем не существует. Текст ошибки: "Столбца с указанным именем не существует"
3. Обработка таблиц:
3.1. Изменение таблиц – любой запрос, содержащий задание на изменение таблицы, работает либо с её столбцами (п.2.), либо с её строками (п.1.)
3.2. Добавление таблиц (CREATE TABLE):
3.2.1. С описанием структуры – модель должна создавать пустую таблицу, в которой должны быть описаны столбцы, могут быть описаны первичный ключ и движок. Если движок не описан, то создаётся такой же, как и в редакторе скрипта по умолчанию (MergeTree).Пример: "Создай таблицу Регионы с полями ID (ключевое) и Название".Ошибка: не указано ни одно поле в новой таблице. Текст ошибки: "При создании новой таблицы необходимо указать хотя бы один столбец для создания"
3.2.2. Со структурой, аналогичной другой таблице:Пример: "Создай таблицу Доходы на основании таблицы Расходы".Ошибка: таблицы-основания не существует. Текст ошибки: "Вы указали несуществующую таблицу в качестве основания для создания новой. Пожалуйста, выберите существующую таблицу или проверьте корректность указанного названия таблицы"
3.2.3. С автозаполнением по запросу – модель должна формировать названия столбцов и их тип данных исходя из запроса на создание выборки:Пример: "Создай таблицу Адресы, заполнив её названиями городов из таблицы Города и названиями улиц из таблицы Улицы".Ошибка: таблицы-основания или столбцов из таблицы-основания не существует. Текст ошибки: "Вы указали несуществующую таблицу / несуществующие столбцы в качестве основания для создания новой. Пожалуйста, выберите существующую таблицу / существующие столбцы или проверьте корректность указанного названия таблицы / столбцов"
3.3. Удаление таблиц (DROP TABLE).Пример: "Удали таблицу Прибыль".Ошибка: таблицы для удаления не существует. Текст ошибки: "Вы указали несуществующую таблицу для удаления. Пожалуйста, выберите существующую таблицу или проверьте корректность указанного названия таблицы"
4. Поисковые функции. На выходе модель возвращает текстовое описание элемента модели данных по запросу от пользователя (бопрезделить SQL-и описать в ответе в чате контекст применения набора да)нных:
4.1.решаемую Сзадачу, экольномическое применение, наз встречается значение, устолбцов.
Для решения этой задачи необходимо анализировать не только метазданные (названия таблиц и столбцов), но и содержимое этих таблиц.
- Решаемая задача – ответ на вопросы вида: "Что я могу сделать с этими данными?".
Модель должна определять спектр задач по типу: "Вы можете использовать эти данные для определем, в столбце / таблнице.4.2. Наиболее часто / редко встречающеесязфиначение,совыхупоказателей компании за 2024 год". - Экономический контекст – ответ на вопросы вида: "Где используются эти данные?".
Мовдель должна определять сферу применения по типу: "Предположительно, эти данныем,используются в столбцфере/продаж". - На
ибольшее / наименьшеезначение(столбцов – детамлизация решаемой задачи в области примененаия/ короткая строка), указаннодепользователем, вных столбце. - Другие запросы на
чвыявление области применения,данных.
4.3.
4.4. Порядковый. Ответ номера вопросы вида: "Зачем мне нужен этот столбец?".
Модель должна определять назначение столбцов по типу: "Это вспомогательный столбец, который нужен для организации корректной сортировки".
Работа с типами данных
Модель должна уметь:
- Определять текущий тип данных указанного пользователем
.4.5. Кстолбца. Эта ичнформация передаётся вместе с метаданными, поэтому для решения этой задачи необходимо лишь передать в ответе имеющееся значение. - Определять наиболее подходящий
указтип данных. Причём самый прогстойфиз подходящих (не выбирмать словари или LowCardinality). Для решения этой задачи модель должна обрабатывать имеющиеся в столбце/данные и на их основании предлагать нужный тип. - Менять тип да
бнных. Менять можно толицько в том случае,иесли значения столбца можно хранить в конечном типе данных. Модель должна уметь переводить данные как в конкретный тип ("Измени тип данных столбца Доход на вещественный"), так и в подходящий ("Измени тип данных столбца Расход на наиболее подходящий"). Измененный тип данных попадает в итоговый скрипт загрузки.
Обработка данных
Модель должна уметь изменять имеющиеся столбцы, создавать новые, сортировать по указанным столбцам.
- Изменение столбцов – модель записывает выражение на языке ClickHouse для текстового запроса от пользователя на редактирование существующего столбца. В качестве выражения может выступать комбинация арифметических и агрегирующих операций над столбцами, числами и текстом. Результат – вместо передачи названия существующего столбца в скрипт за
блгрузкицпередаётся это выражение.
Пример: "Сделай так, чтолько раз встречается слово Краснодарбы в столбцеГСумма результат выводился в миллионах, а не в 1000".
Результат (в Select): toFloat32("Sum")/1000. - Создание столбцов – модель записывает выражение на языке ClickHouse для текстового запроса от пользователя на формирование нового столбца. В качестве выражения может выступать комбинация арифметических и агрегирующих операций над
?"столбцами, числами и текстом. Результат – после списка с названиями существующих столбцов добавляется это выражение.
Пример: "Скоздай столбец Дельта коак разность между доходами и расходами".
Результат (в Create): "Delta" Int32.
Результат (в Select): toInt32("Income")-toInt32("Cost"). - Переименование столбцов – в секции CREATE вместо существующего имени столбца модель добавляет введенное пользователем.
- Сортировка столбцов – модель добавляет секцию ORDER BY согласно запросу от пользователя.
Фильтрация и ограничение
Модель должна уметь конструировать запросы для секций WHERE, LIMIT и OFFSET:
- Ограничение по условию – модель формирует секцию WHERE: интерпретирует текст от пользова
ютеля как выражение, содержащее оператор сравнения, принадлежности или шаблон для столбцыов, чисел и текста.
Пример: "Оставь только те значения в столбце Доход, которые больше 500 000"
Результат (в Where): toInt32("Income")>500000 - Ограничение по числу значений:
- "Оставь только первые N значений" – модель добавляет секцию LIMIT N.
- "Оставь последние N значений" – модель добавляет секцию OFFSET N.
- "Оставь значения, начиная с N и заканчивая M" – модель добавляет секции LIMIT N и OFFSET M.
Если пользователь пытается ввести запрос, не имеющий отношения к формированию скрипта загрузки или изучению данных, то модель должна выдать ответ вида: "Я могу помочь только ст формироковыанием тскрипота загрузки или изучением данных. Пожалуйста, уточните Ваш запрос или составьте новый таким образом, чтобы он имел отношение к представленным данным!"
Шаблон кода для скрипта загрузки (выход модели)
Table "Название таблицы"
Create @@@ -- шаблонная секция, подставляются из модели только названия столбцов и их типы данных
CREATE TABLE IF NOT EXISTS "Название таблицы"(
"Название столбца 1" type, -- тип данных, если допускается null, то Nullable(type) // ЗАДАЧА НА РАБОТУ С ТИПАМИ ДАННЫХ
"Название столбца 2" type, -- название столбца может быть изменено моделью
...
"Название столбца n" type
) ENGINE = MergeTree ()
ORDER BY
tuple ()
@@@
Delete @@@ -- ещё одна шаблонная секция
ALTER TABLE "Название таблицы" DELETE WHERE 1=1
@@@
Source "Название подключения"
Read @@@ -- основная секция для обработки моделью
SELECT
"Название столбца 1", -- перенос столбцов из из источника
"Название столбца 2",
...
"Название столбца k",
Выражение для изменения столбца 1, -- ЗАДАЧА НА ИЗМЕНЕНИЕ СТОЛБЦОВ
Выражение для изменения столбца 2,
...
Выражение для изменения столбца m,
Выражение для нового столбца 1 as "Название нового столбца 1", -- ЗАДАЧА НА СОЗДАНИЕ НОВЫХ СТОЛБЦОВ
Выражение для нового столбца 2 as "Название нового столбца 2",
...
Выражение для нового столбца n as "Название нового столбца n"
FROM
"Название таблицы"
WHERE
toType("Название столбца k") Условие 1 -- для каждого столбца, используемого в WHERE, у которого изменился тип данных, необходимо указывать тип из Create (например, для типа Int32 будет toInt32 и т.д.) // ЗАДАЧА НА ОГРАНИЧЕНИЕ
...
ORDER BY
"Название столбца k" тип сортировки -- ЗАДАЧА НА СОРТИРОВКУ
...
LIMIT a
OFFSET b -- ЗАДАЧА НА ОГРАНИЧЕНИЕ
Optimize @@@ -- шаблонная секция на удаление дубликатов
OPTIMIZE TABLE "Название таблицы" DEDUPLICATE
@@@
Пример выхода модели для скрипта загрузки
Table "Costs"
Create @@@
CREATE TABLE IF NOT EXISTS "Costs" (
"Date" Date,
"Sum" Int32,
"Product_name" Nullable (String),
"Category" Nullable (String),
"file_name" Nullable (String),
"new_object" Int32
) ENGINE = MergeTree ()
ORDER BY
tuple ()
@@@
Delete @@@
ALTER TABLE "Costs" DELETE WHERE 1=1
@@@
Source "01"
Read @@@
SELECT
"Date",
"Sum",
"Product_name",
"Category",
"file_name",
toInt32("Sum")+666
FROM
"Costs"
WHERE
toInt32("Sum")>5000
ORDER BY
"Product_name" desc
LIMIT 10
OFFSET 5
@@@
Optimize @@@
OPTIMIZE TABLE "Costs" DEDUPLICATE
@@@
Выход модели в секции подключения:
- Ответ языковой модели в чате (либо "Выполнено/Не выполнено", если поступил запрос на обработку данных).
- Код для изменения выборки из 10 строк для предпросмотра (СОСТЫКОВАТЬСЯ С БЭКОМ!)
"Память" модели
Для каждого подключения нейросеть хранит собственную "Память", включающую в себя по меньшей мере историю переписки с пользователем и код для изменения выборки из 10 строк для предпросмотра. Кроме того, существует один из трёх вариантов (обсуждаемых с заказчиком), в зависимости от которого в памяти модели может храниться:
- Ничего – модель обращается напрямую к базе ClickHouse. Этот вариант возможен в том случае, если в секции подключения останется только редактор скрипта, а инструмент Data Discovery будет выделен в отдельную задачу.
- Кэшированную таблицу объёмом до 1 млн строк
- Всю таблицу целиком
Задание на разработку для фронт- и бэкенда
Расположение элементов (см. Концепт):
- Список доступных таблиц (вместе с поисковой строкой), исходная таблица и кнопки "Вставить в скрипт" и "Отмена" остаются на своих местах за тем исключением, что ширина исходной таблицы ограничивается в 70% от свободного места в окне для таблицы. При достижении этой границы снизу должен появляться ползунок для прокрутки.
- Подпись "Кол-во строк" перемещается к названию таблицы в левую часть окна.
- Вся правая часть окна до его границы будет занята чатом с нейросетью. Расстояние между чатом и таблицей должно составлять хотя бы 5% от ширины окна.
- Под исходной таблицей будет располагаться редактируемая (созданная нейросетью) таблица, равная по высоте исходной (ограничение на отображение первых 10 строк).
- Кнопки "Очистить чат" и "Активировать нейросеть" располагаются рядом с кнопками "Вставить в скрипт" и "Отмена".
Передача данных:
-
Вариант 1 – передача всех данных
При нажатии на кнопку "Активировать модель" запускается асинхронная передача данных из источника в модель ИИ: сначала отправляется набор метаданных (название таблицы и столбцов, типы данных, количество строк), потом – сами значения из таблицы. Поскольку размер таблицы может быть достаточно велик, подобная операция может зани?".
Архдлитектульное время.
Сценарий взаимодействия с чатом во время загрузки данных:
- Началась загрузка. Если спустя 2 секунды загрузка не завершается, то в чате появляется сообщение: "Инициализирована загрузка данных в модель. Вы можете писать запросы в чат до окончания загрузки, но обработка содержимого столбцов таблицы будет недоступна".
- Пользователь деактивировал модель ДО окончания загрузки (
- Выход из окна выбора данных нажатием на кнопку "Отмена" или крестик считается деактивацией модели).
- Вариант 1. Для данного подключения модель сохраняет скачанные данные и брейкпоинт в последней скачанной строке. После повторной активации модели скачивание данных возобновляется с точки остановки, а в чате моментально выдаётся сообщение: "Возобновлена загрузка данных в модель. Вы можете писать запросы в чат до окончания загрузки, но обработка содержимого столбцов таблицы будет недоступна".
- Вариант 2. Выдаётся окно для подтверждения деактивации модели с предупреждением: "В случае деактивации в следующий раз процесс загрузки придётся начинать сначала!". При подтверждении модель деактивируется, передача данных прекращается, скачанные данные удаляются.
- Пользователь написал запрос на работу с данными (не метаданными) ДО окончания загрузки. Модель выдаёт ответ: "Для обработки Вашего запроса необходимо скачать данные из таблицы. Пожалуйста, дождитесь окончания загрузки!"
- Пользователь деактивировал модель ПОСЛЕ окончания загрузки.
- Вариант 1. Для данного подключения модель сохраняет скачанные данные в кэшированной таблице. Плюс: После повторной активации не выдаётся никаких сообщений, пользователь может писать запросы. Минус: необходимо хранить скачанные данные.
- Вариант 2. Выдаётся окно для подтверждения деактивации модели с предупреждением: "В случае деактивации в следующий раз процесс загрузки придётся начинать сначала!". При подтверждении модель деактивируется, скачанные данные удаляются. Плюс: не нужно дополнительно хранить огромные массивы данных. Минус: затраты времени на повторное скачивание данных.
-
Вариант 2 – Передача выборочной совокупности
При нажатии на кнопку "Активировать модель" запускается сэмплирование (или ограничение с помощью Limit - НЕ РЕКОМЕНДУЕТСЯ!) исходной таблицы до 1 000 000 строк. Данная операция не занимает длительного времени, переданная таблица кэшируется.
Данный вариант покрывает 95% задач, решаемых новой моделью:
. Невозможно будет обрабатывать некоторые поисковые запросы, например, вывод точного числа уникальных значений, или поиск одного конкретного значения, не попавшего в сэмплированную выборку. При возможности пренебречь данными задачами вариант 2 является наиболее предпочтительным.
- Вариант 1. Для данного подключения модель сохраняет скачанные данные и брейкпоинт в последней скачанной строке. После повторной активации модели скачивание данных возобновляется с точки остановки, а в чате моментально выдаётся сообщение: "Возобновлена загрузка данных в модель. Вы можете писать запросы в чат до окончания загрузки, но обработка содержимого столбцов таблицы будет недоступна".
- Вариант 2. Выдаётся окно для подтверждения деактивации модели с предупреждением: "В случае деактивации в следующий раз процесс загрузки придётся начинать сначала!". При подтверждении модель деактивируется, передача данных прекращается, скачанные данные удаляются.
- Вариант 1. Для данного подключения модель сохраняет скачанные данные в кэшированной таблице. Плюс: После повторной активации не выдаётся никаких сообщений, пользователь может писать запросы. Минус: необходимо хранить скачанные данные.
- Вариант 2. Выдаётся окно для подтверждения деактивации модели с предупреждением: "В случае деактивации в следующий раз процесс загрузки придётся начинать сначала!". При подтверждении модель деактивируется, скачанные данные удаляются. Плюс: не нужно дополнительно хранить огромные массивы данных. Минус: затраты времени на повторное скачивание данных.
Вариант 2 – Передача выборочной совокупности
Чат с моделью
Выглядит как переписка. Работает как переписка. В общем, это переписка. С нейросетью.
Особенности:
- В данном чате нет необходимости удалять или изменять сообщения, поскольку каждый запрос чат обрабатывает отдельно и может выдавать различные ответы (например, при анализе использования). Сами сообщения в чате можно выделять и копировать содержимое, а потом вставлять в запрос.
- На каждый запрос модель выдаёт только один ответ. Давать ссылку на ответ нейросети кнопкой "переслать" нельзя – модель запоминает собственные ответы и может отвечать на контекстные вопросы к предыдущим обсуждениям в рамках одного подключения.
- В текстовой строке ввода запроса нельзя прикреплять фото, видео, документы и т.п.
- Пока не нажата кнопка "Активировать нейросеть" строка для ввода сообщения недоступна пользователю (однако история переписки сохраняется).
Кнопки и обработки
Параллельные обработки
При активированной нейросети водить изменения в исходную таблицу вручную ЗАПРЕЩАЕТСЯ – все поля становятся некликабельными до окончания работы с моделью.
Вносить вручную изменения пользователь может только в текущую редактируемую таблицу, которая находится под исходной и появляется в момент активации нейросети.
Кнопка "Активировать нейросеть"
При нажатии на кнопку разблокируется чат и появляется редактируемая таблица, а сама кнопка меняет название на "Деактивировать нейросеть". При деактивации нейросети появляется диалоговое сообщение вида: "При деактивации результат обработки таблицы нейросетью не будет добавлен в скрипт загрузки. Если Вы хотите использовать обработанную таблицу, нажмите на кнопку "Вставить в скрипт" при активной модели" с вариантами ответа "Деактивировать" и "Вернуться".
После деактивации блокируется чат и исчезает редактируемая таблица. История переписки сохраняется.
Кнопка "Вставить в скрипт"
При активной нейросети нажатие на эту кнопку передаёт в скрипт загрузки SQL-код, сформированный моделью нейросети.
Кнопка "Очистить чат"
При нажатии на кнопку появляется диалоговое сообщение вида: "Подтвердите, что Вы хотите очистить чат с моделью" с вариантами ответа "Да/Нет". При подтверждении удаляются все сообщения из чата с моделью и отправляется сигнал об очистке памяти модели для текущего подключения.
Данная кнопка доступна как при активированной, так и при деактивированной модели.
Редактируемая таблица
Под исходной таблицей при активированной модели располагается редактируемая таблица. Взаимодействие с ней должно быть полностью аналогично исходной таблице: можно отмечать используемые колонки вручную, менять тип данных (в будущем). Все вносимые вручную изменения передаются в формируемый нейросетью SQL-код для создания подключения. В редактируемую таблицу могут добавляться новые столбцы в зависимости от работы модели. Для редактируемой таблицы также подписывается кол-во строк.