
Сейчас нейросети – это хайп, который, кажется, прошёл свой пик завышенных ожиданий на кривой Гартнера, и внутри компании мы периодически спорим о полезности нейросетей и об их будущем. Один из споров даже вышел за пределы компании на Форум Data&AI с темой "AI мифы, хайп и реальность". Поэтому мы, как команда вендора платформы бизнес-аналитики Luxms BI, не смогли пройти мимо, и, по запросу одного из клиентов, развили нашу платформу в части интеграции с нейросетевой моделью GigaChat. Что из этого вышло, я сейчас расскажу.
Luxms BI – это платформа для визуализации и анализа данных, которая помогает компаниям контролировать процессы, анализировать показатели эффективности и готовить интерактивные отчёты.
GigaChat – это нейросетевая модель, которая понимает и отвечает на запросы пользователей на естественном языке. Модель способна учитывать контекст, в котором формулируется запрос, что позволяет генерировать релевантные и контекстно-зависимые ответы. В отличие от ChatGPT, GigaChat обучается на русскоязычных текстах и поэтому лучше понимает русскую речь.
Интеграция с Luxms BI
Как правило, BI-платформы используются для визуализации данных. Пользователям часто требуется предоставлять руководителям или другим сотрудникам отчеты о своей работе, демонстрируя графики и давая объяснения к ним, поскольку другой человек может быть не сильно погружен в данные, их специфику. И, на наш взгляд, снабжать графики текстовым пояснением, выводами, рекомендациями — это одно из правил хорошего тона. Но людям не всегда хочется их писать, или хочется делать это как-то легче и быстрее.
Цель интеграции Luxms BI и GigaChat в этом примере – упростить для пользователя подготовку отчетов для руководства на основе визуализированных в Luxms BI данных. И мы хотели сделать это так, чтобы ИИ реально помогал пользователям BI и был легок в использовании.
В результате, работа с GigaChat в Luxms BI будет удобной и привычной для тех, кто когда-либо использовал нейросети или даже чаты онлайн-консультантов на сайтах.
Сценарий использования:
-
Пользователю системы бизнес-аналитики нужно предоставить письменный (текстовый) отчет руководителю;
-
Пользователь внутри системы Luxms BI с помощью визуального интерфейса выбирает дэш (график), анализ которого ему необходим;
-
В чате пользователь формирует запросы к GigaChat и в процессе диалога редактирует результат, итеративно создавая итоговый текст;
-
Сформированный текст пользователь переносит в отчет для руководителя.
Но не все так просто было для нас.
Что «под капотом»
Для интеграции нам потребовалось:
-
получить токены GigaChat (тарифы),
-
написать API, чтобы из браузера отправлялся запрос в ядро Luxms BI, там получал токен, и потом уже оттуда шло обращение к GigaChat, так как довольно небезопасно хранить токен на клиенте,
-
написать большое количество разных промтов и провести тестирование.
Самым сложным в этой задаче было – правильно писать слова запросов (промты), чтобы нейросеть выдавала необходимый результат.
Промпты, используемые для генерации ответов, задают роль GigaChat, определяют целевую аудиторию и основные акценты ответа.
К примеру: ответ нейросети на вопрос «Кто такой снегирь?», будет отличаться в зависимости от контекста. Если мы напишем «представь, что все птицы динозавры и расскажи, кто такой снегирь», то информация и подача изменится.

В бизнес-аналитике тоже можно задать контекст. Например, промпт может указывать, что GigaChat выступает в роли бизнес-аналитика с 10-летним опытом, ориентированного на топ-менеджмент, и должен акцентировать внимание на стратегических аспектах и ключевых метриках. В этом случае при описании данных о продажах за квартал GigaChat может автоматически сформулировать основные тенденции, выделить ключевые показатели и предложить рекомендации по их улучшению. А может выступить в роли HR-специалиста, который готовит отчет по этим же данным для своего руководителя, и тогда GigaChat будет делать другие акценты, например, на достижении KPI каждым конкретным сотрудником для премирования.
С помощью заранее подготовленных нами промтов GigaChat получает контекст для ответов, посредством которого мы формируем понимание, где он находится, что от него требуется, что с ним происходит и т.д. Они включают, в том числе, описание визуализации (название, данные, категории и т.д.), а GigaChat потом генерирует текстовые описания к представленным данным. Но не все шло гладко.
Написание промта для нейросети похоже на обучение ребенка или новичка в чем-либо. Здесь не подойдут общие инструкции. Например:
-
Если дать ребенку задание сделать салат одной фразой «Приготовь салат», то результат будет непредсказуем и будет сильно зависеть от предыдущего опыта ребенка: он может приготовить фруктовый салат или порезать овощи, но не заправить его сметаной или майонезом, или даже попробовать его подогреть в микроволновке, если посчитает, что готовое – это горячее;
-
Новому сотруднику в компании тоже нужны дополнительные пояснения, потому что даже обычная фраза «сделай копию этого документа» может вызвать сложности на разных этапах – он может сделать ксерокопию, может сканкопию, а может быть, «зависнет» перед МФУ, если никогда им не пользовался.
Так и нейросеть: чтобы получить от нее нужную информацию, нужно учесть множество нюансов и предоставить ей исчерпывающий контекст. Если этого не сделать, то результаты могут сильно отличаться от нужных. И много промтов в этой битве полегло :D
Пример неверного анализа и понимания данных во время тестов:

В этой интеграции GigaChat мы не дообучали нейросеть после стыковки, мы только давали ей контекст - дополнительное понимание, что нам от нее нужно именно в наших запросах.
И смогли добиться определенных результатов. Например, при нажатии на кнопку чата, мы открываем GigaChat, он представляется и предлагает на выбор дэши для обсуждения. После выбора – предлагает 3 варианта вопросов, которые можно ему задать по этому дэшу. После каждого ответа он генерирует новые вопросы.

При этом мы сохранили возможность самому задать вопрос GigaChat или даже дать ему дополнительный контекст.
Промты и более глубокие детали реализации пока не раскрываем - в настоящее время занимаемся обеспечением патентной защиты наших наработок.
Четкая формулировка запроса критически важна для получения корректного и полезного результата.

Что получилось в итоге
«Если долго мучиться, то что-нибудь получится» - гласит народная мудрость. И у нас получилось следующее:
-
Пользователь может работать с языковой моделью напрямую из интерфейса Luxms BI;
-
Информация с графиков (контекст) передается в языковую модель для последующей работы с ней;
-
Пользователь может генерировать текстовые описания к визуальным элементам;
-
Пользователь может создавать оформленные фрагменты текстового отчета по данным (структура, списки и т.д.)
Несмотря на значительные достижения, текущая интеграция с GigaChat имеет несколько ограничений:
-
Потеря контекста при закрытии чата: в настоящее время контекст взаимодействия теряется после закрытия чата, что ограничивает возможность дальнейшего использования накопленных данных для улучшения взаимодействия. В перспективе мы можем обеспечить сохранение контекста, так как техническая возможность этого у GigaChat есть.
-
Необходимость проверки результатов: хотя GigaChat генерирует качественные ответы, необходима проверка результатов для подтверждения их точности и релевантности, особенно в критических бизнес-процессах. Для повышения достоверности и фактологичности можно использовать RAG (генерацию с дополненной выборкой). У нас есть успешный опыт использования RAG на таких задачах, как работа с технической документацией, но в этой версии приложения мы ее не использовали.
А дальше…
Поскольку интеграция Luxms BI и GigaChat в этом кейсе освободила пользователей от необходимости ручного написания текстовых комментариев, позволяя сосредоточиться на анализе и принятии решений на основе полученной информации, мы планируем улучшать работу как с контекстом, так и с результатом. У нас в планах развитие в нескольких направлениях:
-
Описание не только отдельных элементов, но и целиком панелей визуализации. Расширение возможностей GigaChat для описания не только отдельных элементов визуализации, таких как графики и диаграммы, но и общих данных, что позволит получать более точные и специфические отчеты;
-
Интеграция с системами Data Governance, в приоритете – интеграция с Arenadata Catalog. Внедрение интеграции с системами управления данными позволит обогатить контекст, используемый GigaChat, что повысит точность и полноту генерируемых ответов;
-
Встраивание генерации текста в шаблоны отчетов, создание которых уже реализовано в Luxms BI. Разработка функционала для автоматического встраивания генерируемого текста в заранее подготовленные шаблоны отчетов позволит упростить процесс подготовки документов и обеспечить единообразие представления информации;
-
Управление параметрами визуализации через GigaChat. В перспективе планируется предоставить возможность управления параметрами визуализации, такими как изменение цвета столбцов, масштабирование графиков и другие настройки, непосредственно через команды GigaChat. Это позволит пользователям более гибко и удобно настраивать визуальные представления данных, давая команды на естественном языке.
Этот проект оказался интересным и позволил по-новому взглянуть на то, как и какими словами мы ставим задачи не только нейросети, но даже коллегам или подчиненным XD
Автор: iamrozanov