Флоу комфорта: как искусственный интеллект в колонках Сбер научился создавать сценарии умного дома. sft.. sft. Блог компании SberDevices.. sft. Блог компании SberDevices. ИИ.. sft. Блог компании SberDevices. ИИ. искусственный интеллект.. sft. Блог компании SberDevices. ИИ. искусственный интеллект. колонки Сбер.. sft. Блог компании SberDevices. ИИ. искусственный интеллект. колонки Сбер. обучение ии.. sft. Блог компании SberDevices. ИИ. искусственный интеллект. колонки Сбер. обучение ии. Производство и разработка электроники.. sft. Блог компании SberDevices. ИИ. искусственный интеллект. колонки Сбер. обучение ии. Производство и разработка электроники. промпт.. sft. Блог компании SberDevices. ИИ. искусственный интеллект. колонки Сбер. обучение ии. Производство и разработка электроники. промпт. Умный дом.. sft. Блог компании SberDevices. ИИ. искусственный интеллект. колонки Сбер. обучение ии. Производство и разработка электроники. промпт. Умный дом. Умный дом Сбер.
Флоу комфорта: как искусственный интеллект в колонках Сбер научился создавать сценарии умного дома - 1

Салют, Хабр!

Я Иван, руковожу направлением голосового управления умным домом в SberDevices. Недавно мы обучили ГигаЧат в интеллектуальных колонках Сбер помогать в создании сценариев автоматизации голосом. Эта задача была неизбежной: общение на естественном языке — закономерный этап развития умных устройств. И непростой: реализовать управление умным домом на естественном языке сложнее, чем «болталку». Во-первых, у каждого юзера в умном доме свой набор комнат и устройств, их функций, названий. Во-вторых, умному дому нельзя ошибаться.

Сегодня расскажу, где в пайплайне обработки запроса общение с бэкендом, почему выбрали обучение на уровне контекста вместо supervised fine-tuning и что такое сценарная машина.  

Часть первая: войти в фичу

Ранее я уже рассказывал на Хабре, как мы учили колонки Сбер проактивно создавать сценарии автоматизации в форме диалога. Если человек произносил фразу, которую можно понять как некое событие в доме — например, «Салют, я проснулся», «я ухожу» — ассистент предлагал некий набор подходящих действий в умном доме и согласовывал с пользователем. Условно: «Ага, понял, ты уходишь. Выключить весь свет? Выключить кондиционер?». После ОК от пользователя ответы сохранялись в приложении как сценарий.

В таком виде фича покрывала самые распространённые алгоритмы. Но вселенная возможных автоматизаций требовала более гибкого и точного решения на естественном языке. Для Умного дома Сбер и совместимых устройств других брендов сценарии можно настраивать в приложении Салют, и всё же часть аудитории предпочла бы голосовое создание сценариев. А значит, нам нужна была эта функция в умном доме.

Тут коротко напомню пайплайн коммуникации с ГигаЧатом в умной колонке: 

  • NLP-платформа Intent Recognizer 

  • Ранжировщик с эмбеддером. Они помогают определить, какие функции потребуется GigaChat для этого запроса.  

  • ГигаЧат.

После распознавания и превращения в текст команда оказывается в Intent Recognizer. Он способен перенаправить команду в одно из множества разветвлений-навыков. Одно из них — так называемый навык умного дома.

У команды две пути: либо она уйдет сразу в навык, если определилась Intent Recognizer как относящаяся к умному дому, либо попадает в ГигаЧат, а тот уже при необходимости вызывает функцию умного дома (так, например, работают мультикоманды). Но для создания сценариев голосом через колонку потребовалось изменить пайплайн. 

Ключевая фраза для запуска функции — «Салют, создай сценарий». Можно использовать также её синонимы: «Помоги создать сценарий» и так далее. Intent Recognizer опознаёт это как команду умного дома и передаёт навыку. Навык начинает монопольный захват диалога. 

Именно навык во флоу создания сценариев «коммуницирует» и с ГигаЧатом, и с бэкендом Умного дома Сбер. Строго говоря, в интеллектуальных колонках используется несколько разных версий ГигаЧата — в соответствии с задачей. Для создания сценариев мы, протестировав варианты, выбрали ГигаЧат 2 Макс, более мощную модель: она обеспечила лучшее соотношение качество/latency.

Часть вторая. Как обучали ГигаЧат

Вторая реплика пользователя приходит в тот же навык умного дома. Но теперь он передаёт её в ГигаЧат — вместе с системным промптом. 

На этом этапе в реализации встал выбор между supervised fine-tuning и обучением на уровне контекста. Первый вариант пришлось быстро отбросить, потому что: 

  1. Как уже ясно, у каждого пользователя свой контекст — набор устройств, их названий и комнат. 

  2. Выходит, даже если сгенерировать набор диалогов для обучения модели на одном аккаунте (= в одном умном доме), она не обязательно сможет адекватно работать с другим. Генерация обучающих данных через LLM слишком трудоёмка примерно по тем же причинам: слишком много неточностей и ошибок. 

  3. Ergo, задача подготовки правильных тестовых данных в нужном объёме для обучения слишком сложна, а при любой попытке срезать углы мы рискуем качеством модели.

В результате создание сценариев использует обучение на уровне контекста. При каждом входе в функцию модель получает системный промпт. Он динамический и сформирован в подходе RAG — retrieval-augmented generation, генерация с расширенным поиском. 

Для разработки промпта мы проанализировали около 150 тысяч уже существующих сценариев. Оказалось, что самые частотные условия, при которых сценарий запускается — это (от самого частого к менее):

Флоу комфорта: как искусственный интеллект в колонках Сбер научился создавать сценарии умного дома - 2

В итоге динамическая часть системного промпта содержит:

  • Данные об умном доме пользователя — набор устройств и проч. Их отдаёт в промпт навык умного дома.

  • История предыдущего диалога, которая позволяет ГигаЧату быть в контексте.

  • Примеры опций для каждого из устройств, отсортированные по частотности на основе аналитики. В целом опций намного больше, чем примеров в промпте. Например, в опциях для колонки есть «включить спокойную музыку». Но ГигаЧат понимает, что точно так же способен добавить в сценарий энергичную музыку. Или грустную. Другой вариант — только для умного света Сбер существует 16 млн оттенков. Разумеется, в примеры опций попадут только несколько.

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

Также системный промпт содержит примеры диалогов. Они служат модели референсом.  

Есть в промпте и постоянная часть. Она задаёт задачу для ГигаЧата и формулирует критерии успеха. Определяет, что модель должна учитывать пользовательские настройки ассистента в колонке: пол персонажа, предпочитаемое обращение — на «ты» или «вы». И напоминает, что нужно соблюдать принцип кооперации Грайса. В него входят четыре максимы: 

  • качество ответов (только правдивая информация);

  • количество (не больше и не меньше данных, чем требуется);

  • релевантность (без отклонений от темы);

  • ясность (лаконичные ответы без двусмысленности).

Это один из базовых подходов к успешной коммуникации в целом, не только к искусственному интеллекту.

Флоу комфорта: как искусственный интеллект в колонках Сбер научился создавать сценарии умного дома - 3

Промпт также задаёт формат ответа навыку умного дома. Ведь ГигаЧат должен не только понять, какой нужен сценарий, но и выдать результат диалога в такой форме, которую сможет обработать навык.

Скрытый текст
{
  "chain_of_thoughts": "Пользователь хочет, чтобы подсветка в спальне включалась каждое утро в 6 часов.",
  "replica": "Будем включать подсветку в спальне каждое утро в 6 часов. Подтверждаешь?",
  "offers": [
    {
      "description": "Подсветка спальни утром",
      "name": "Сценарий утренней подсветки",
      "conditions": [
        {
          "time": "6:00",
          "repetition": "MO,TU,WE,TH,FR,SA,SU"
        }
      ],
      "actions": [
        {
          "command": "включи подсветку в спальне"
        }
      ]
    }
  ],
  "is_final": false
}

Задача искусственного интеллекта — провести диалог в свободной форме, понять логику алгоритма или алгоритмов. (Да, ГигаЧат способен решить, можно ли воплотить идею в одном сценарии или понадобятся несколько). Далее он передаёт последовательность действий в навык умного дома в виде JSON. Готово… но пока только со стороны ГигаЧата.

Бонус: тестируем ГигаЧат

У кейса с созданием сценариев автоматизации голосом есть дополнительная сложность: тестирование ответов модели. Стандартно берётся набор тестовых данных, которые прогоняют через модель, получают от неё ответы и сравнивают с ожидаемым результатом. 

Но этот подход хорошо работает для короткого ответа модели. А создание сценария — это уникальный диалог с обменом несколькими репликами. Поэтому мы использовали подход бенчмарка LLM Arena, где судьёй в соревновании также становится искусственный интеллект. Участники тестирования — это:

ГигаЧат-помощник

Модель с динамическим промптом, эффективность которой мы проверяем в тесте. Её задача — создать сценарий. У неё есть стартовая реплика диалога, «полученная» от пользователя: переменная «start», заложенная в наборе тестовых данных.

ГигаЧат-пользователь

Вспомогательная модель, что имитирует владельца умного дома. Промпт содержит её задачу, некоторое количество примеров и идею (idea) сценария, которую модель «хочет» создать. Idea — это также переменная в тестовых данных, а значит, динамическая часть промпта.

ГигаЧат-судья

Модель, которая получает на вход переменную idea и созданный после диалога сценарий. Она должна вынести решение, соответствует сценарий идее или нет, прокомментировать, почему так решила, и выдать true или false в соответствии со своей оценкой.

Пример тестовых данных:

‘idea’ Когда я скажу «гости», включай музыку для вечеринки и гирлянды

‘start’ Хочу, чтобы по команде создавалась атмосфера для приёма гостей

Часть третья, где дело за бэкендом

Когда ГигаЧат выполнил свою часть задачи, то есть передал в навык умного дома JSON с желаемым сценарием или сценариями пользователя, начинается проверка, насколько он/они выполнимы. Это, как уже упоминалось, одна из сложностей задачи: у каждого пользователя свой набор устройств с уникальными названиями и неуниверсальными функциями; свои комнаты. Поэтому мы дополнительно проверяем сценарии вне модели. Например, на случай, если в примерах для категории умного света есть функция «включить северное сияние», а у конкретной лампочки функции нет.

Навык умного дома формирует из JSON набор действий, которые нужны по сценарию. Он же классифицирует действия внутри: какие относятся к умному дому, какие к другим устройствам — например, к умной колонке, на которой в рамках сценария нужно включить музыку. Проверяет, можно ли выполнить действия. Если да — добавляет ID устройства, участвующего в сценарии; информацию о комнате. 

Сценарий уже в виде низкоуровневых команд попадает в так называемую сценарную машину на бэкенде умного дома. Она реализована как конечный автомат. С точки зрения устройства это сервис на GO над очередью, а та — над базой PostgreSQL. Он умеет один за другим исполнять задачи из этой очереди. Плюс есть API для управления сценариями — от создания до остановки. 

Заключение  

По моим наблюдениям уже сейчас интеллектуальные колонки и телевизоры — самый востребованный способ управления умным домом. Во-первых, они позволяют отдавать команды на естественном языке; во-вторых, можно командовать устройствами дистанционно, не находясь в конкретной комнате (или даже в конкретной квартире — например, если устройства на даче). Искусственный интеллект способен взять на себя часть этих задач… при условии, что главным по-прежнему останется человек. Колонки и телевизоры всегда рядом — и всегда готовы предоставить интерфейс для взаимодействия человека и искусственного интеллекта.

Автор: IvanGolubev

Источник