Правильные слова для правильного результата: история внедрения сервиса GigaChat в Luxms BI

Нельзя просто так взять и…
Сейчас нейросети — это хайп, который, кажется, прошёл свой пик завышенных ожиданий на кривой Гартнера, и внутри компании мы периодически спорим о полезности нейросетей и об их будущем. Один из споров даже вышел за пределы компании на Форум 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 самому себе в рамках интеграции
При этом мы сохранили возможность самому задать вопрос GigaChat или даже дать ему дополнительный контекст.
Промты и более глубокие детали реализации пока не раскрываем — в настоящее время занимаемся обеспечением патентной защиты наших наработок.
Четкая формулировка запроса критически важна для получения корректного и полезного результата.

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