- BrainTools - https://www.braintools.ru -

Cалют, Хабр!
На связи сразу две команды: GigaChat Prod Data и платформы ассистента. В этом году мы объединили наши силы, чтобы вывести интеллект [1] умных колонок Sber на новый уровень благодаря полному переходу на GigaChat 2.0.
Это означает, что базовые возможности умных колонок, такие, как коммуникация с пользователем и вызовы навыков (музыка, погода и другие), теперь под контролем искусственного интеллекта. Общение с колонками стало больше похоже на разговор с человеком. Они удерживают контекст диалога до десяти раз больше, чем ранее; значительно лучше понимают естественный язык; способны распознать в одном обращении несколько команд и выполнить их. Это открывает дверь для более сложного диалога с устройствами. Например, он может выглядеть так:
— Салют, какой самый популярный альбом Black Sabbath?
— Paranoid.
— Включи этот альбом и сделай погромче.
— Включаю Black Sabbath — Paranoid.
Умные колонки с GigaChat 2.0 дают пользователю все возможности генеративных моделей, позволяя адаптировать общение под свои нужды. Например, можно спросить: «Салют, объясни теорию относительности семилетнему ребёнку». Можно попросить дать информацию кратко или в развёрнутом формате. Кроме того, с интеграцией GigaChat появилась возможность кастомизировать общение с колонкой: выбрать не только её голос, но и общение на «ты» или «вы», стиль общения — деловой, неформальный, официальный.
В колонках применялся следующий базовый набор технологий:
— Automatic Speech Recognition (ASR) и Text-To-Speech (TTS) — если предполагалось использовать голосовой ввод и озвучивать текст для пользователя.
— NLP-платформа, в которую входят различные сервисы для распознавания намерения пользователя (intent recognition) и предобработки текста.
— Сервисы оркестрации запросов и работы с контекстом и профилем клиента, единый сервис регистрации возможных навыков колонки.
— Различные бэкенд-системы, которые реализовали сценарную и бизнес-логику конкретного навыка — например, музыки, погоды, будильника, таймера, общения с умным устройством как с собеседником. У каждого навыка, то есть умения колонки, своя NLP-логика: дополнительная обработка запроса, выполнение сценария, создание ответа пользователю.
Упрощённо предыдущий пайплайн обработки запроса в колонке выглядел так:

Пользователь делал запрос, например:
— Cалют, включи Black Sabbath.
«Салют» здесь — это споттер. Когда он срабатывал, звуковая дорожка с запросом сразу же начинала стримиться с устройства в ASR. Как только ASR выслушал пользователя и распознал текст, запрос передавался в NLP-платформу. Там выполнялся ряд операций с контекстом запроса, определялась цель пользователя и решалось, какая бэкенд-система релевантнее для ответа. В нашем примере это музыка.
Навык музыки с помощью поиска по базе hi-fi стриминга Звук формировал итоговый ответ: строку, которую услышит пользователь, и ID трека для включения на устройстве. Далее реплика колонки передавалась в TTS, где превращалась в звуковую дорожку, и затем на устройство для озвучивания. Отдельно устройство запрашивало трек для воспроизведения музыки.
Подобная архитектура ограничивала свободное общение пользователя с умным устройством. Им было сложнее вести диалог. Кроме того, сценарий различных корнер-кейсов полностью определяли команды разработки навыков. Выходило, что у пользователя нет единого способа общаться с устройством. Условно, в одном навыке можно задавать уточняющие вопросы, а в другом нет, так как команда разработки не заложила эту опцию.
Чтобы дать пользователям новые возможности, мы построили LLM-центричную систему. Так, у нас появилась системная инструкция (system prompt), которая описывает поведение [2] колонок и их базовые возможности.

От навыков мы перешли к функциям. Теперь бэкенды, которые ранее выполняли всю NLP-логику, работают как API: они выполняют только нужную ветку сценария с заданными параметрами. С технической точки зрения [3] каждый навык стал рассматриваться как JSON-схема (далее «функция»), которая содержит детальную инструкцию: когда запускать навык, какие параметры передавать, как формировать ответ для пользователя и как комбинировать несколько функций.
Для перевода умных колонок на GigaChat 2.0 ключевой задачей стало создание универсальной системы-оркестратора. Она не только поддерживает естественное общение, но и самостоятельно управляет навыками. В GigaChat реализован нативный механизм вызова функций. Он анализирует запрос пользователя с учётом всего контекста диалога: промпта, вызовов функций, предыдущих пар запрос-ответ. На базе этой информации GigaChat решает, ответит ли на вопрос самостоятельно или вызовет функцию для получения дополнительного контекста. Точнее, заполняет аргументы функций на основе их описаний и сигнатур, а затем формирует итоговый ответ с учётом данных от бэкенд-системы.
Единой точкой ответа пользователю также стал GigaChat. Именно это позволило легко реализовать кастомизацию общения: смену стиля ответа, голоса, обращения на «ты» или «вы».
Обновлённые умные колонки на GigaChat 2.0 включают в себя три основных компонента. Это навыки — возможность использовать внешнюю функциональность для решения задач человека; болталка — умение интересно и проактивно поддерживать диалог с пользователем; безопасность — предотвращение использования устройства для создания вредоносного или дискредитирующего контента. Каждая из них реализует свою бизнес-логику, но вместе они составляют единый инструктивный датасет для дообучения LLM.
В общей сложности мы перевели на GigaChat 2.0 более 25 навыков, включая самые популярные — музыку, управление плеером, прогноз погоды. Переход на функции значительно улучшил систему по трём причинам:
1. Разрозненные навыки с их внутренней логикой [4] превратились в единую систему, работающую в общем контексте. Это позволяет избежать типичных для колонок ситуаций, когда они внезапно «забывают» предыдущий запрос. Меняется и коммуникация пользователя с устройством — оно становится полноценным собеседником, способным выполнять более сложные и разнообразные задачи.

2. Механизм мультивызовов позволяет одновременно использовать несколько функций. Это значительно повышает эффективность обработки запросов, делая взаимодействие с колонкой более простым и удобным.

3. Интеграцию новых сценариев удалось значительно упростить благодаря общему интерфейсу для разработки и использованию подхода zero-shot. Добавляя более сложные сценарии с опцией переспроса, работой в контексте и множественными вызовами, мы не только улучшаем качество базовой модели GigaChat, но и снижаем затраты на дальнейшую разработку. Это становится возможным благодаря тому, что всё больше сценариев начинают работать «из коробки» без аналогичных примеров в обучающей выборке модели.
Существуют два основных подхода, чтобы добавить новый навык, и оба требуют подробного продуктового и технического описания функциональности. В zero-shot подходе нужно составить подробное описание функции, которое включает её поведение [5] в краевых случаях, ожидаемые значения аргументов и результатов, а также подкрепить [6] описание примерами использования (few-shot). После этого оно передаётся в модель без обучения [7]. Она использует функцию, опираясь исключительно на данные из описания.
Основное преимущество этого подхода — относительно быстрая реализация, поскольку данные для обучения собирать не нужно. Однако этот подход лучше использовать на больших моделях, таких как GigaChat Max; в общем случае zero-shot подход характеризуется ограниченной точностью из-за возможных ошибок модели в интерпретации функций, особенно если их описание недостаточно чёткое.
При дообучении также требуется детальное описание функции. Но кроме этого, нужен чистый набор данных, куда входят разнообразные диалоги с примерами корректного поведения колонки с точки зрения работы с функциями. Это более трудозатратный подход, зато он обеспечивает максимальное качество благодаря дополнительному обучению модели.
Поскольку для умного устройства важную роль играет скорость получения ответа (latency), необходимо было использовать относительно небольшую и быструю модель-оркестратор. Подходящим выбором для этого стала квантизованная версия GigaChat 2 Pro. Улучшение качества сценариев происходило исключительно через дообучение, без zero-shot подхода. Кстати, такие данные дополнительно повысили общее качество GigaChat при работе с функциями.
В процессе интеграции навыков в GigaChat мы выработали процесс, который проходим для добавления новой функции:
1. Сбор продуктовых требований. Это первый и самый важный шаг. Ошибка [8] на этом этапе может привести к перезапуску всего дальнейшего процесса, а значит, трате времени и ресурсов. На выходе мы получаем полноценное техническое задание, куда входят сценарии использования навыка, требования к заполнению аргументов и ответов на основе запущенного навыка.
2. Создание описания функции. На этом этапе формируется итоговый JSON с описанием, который будет передан в контекст LLM. Мы с учётом всех продуктовых требований создаём полную, но лаконичную инструкцию для GigaChat. Для проверки качества финальной инструкции проводится тестирование в режиме zero-shot.
3. Сбор обучающих диалогов. С помощью нескольких разработанных пайплайнов для предразметки на GigaChat Max мы получаем диалоги всех необходимых типов:
Примеры вызова функции, где она используется корректно и по назначению.
Ситуации, когда запрос пользователя недостаточно понятен, требуется переспросить.
Диалоги, где функция доступна, но её использование не требуется.
Примеры, в которых функция нужна, но в данный момент недоступна.
Обработка ошибок, возвращённых системой бэкенда.
Сложные запросы, требующие одновременного вызова нескольких функций.
Мы дополнительно собираем диалоги со сложным контекстным взаимодействием пользователя с колонкой. Для этого используем интерактивные проекты создания диалогов на платформе разметки TagMe. На подобных проектах разметчики ведут полноценный диалог с моделью, каждый раз выбирая лучший ответ из нескольких возможных. Кроме того, мы раздали тестовые колонки с GigaChat 2.0 нашим AI-тренерам. Они воспроизводят сложные сценарии взаимодействия, выявляют ошибки и составляют отчёты, то есть фактически проводят ручное тестирование каждой новой версии.
4. Валидация обучающей выборки. На этом шаге мы проверяем все созданные диалоги с помощью команды наших AI-тренеров в разрезе каждого из трёх компонентов — навыков, болталки и безопасности.
5. Обучение и тестирование качества. Полученные данные используются для обучения модели, которая затем тестируется. О метриках расскажем чуть ниже.
Чтобы вместе с GigaChat заработали все нужные функции, нам потребовался отдельный сервис. По замыслу он упрощает модели выбор, возвращая только функции, соответствующие запросу пользователя.
Для этого мы обучили отдельную модель-ранжировщик; она на основе контекста диалога оценивает, насколько каждая из функций релевантна запросу, и возвращает несколько самых подходящих. Помимо реплик пользователя и колонки, контекст содержит данные о текущем состоянии устройства — настройках будильника, состоянии плеера, таймера, напоминаний… Благодаря этому модель способна не только определить нужную функцию, но и уточнить, что именно хочет пользователь. Например, когда человек просит колонку удалить будильник, GigaChat не должен сразу вызывать соответствующую функцию. В контексте модель видит доступный навык будильника и с опорой на продуктовую инструкцию, заложенную в описании функции, может переспросить, какой именно будильник удалить.
При переходе на GigaChat 2.0 мы хотели добавить в общение с колонками больше разнообразия и сделать пользовательский опыт [9] по-настоящему уникальным.
Теперь можно настроить взаимодействие с устройством под себя: выбрать не только голос, но и обращение на «ты» или «вы», стиль общения, который больше соответствует характеру и настроению пользователя. В общей сложности доступно 18 сочетаний настроек.
Для обучения колонок мы применяли методику supervised fine-tuning — в разном объёме для разных стилей. Потребовалось выделить продуктовые требования к ответам и затем по разным источникам — ключевые сценарии в диалогах с ассистентом. Мы сформировали конфигурацию, которая позволяла получить 5–6 разнообразных ответов. Одна группа AI-тренеров по сценарию формировала различные диалоги, выбирая лучшие ответы на каждом шаге; другая валидировала и классифицировала диалоги на корректность и покрытие определённых сценариев. Если ответы плохо себя показывали по распределению комбинации сценария и стиля ответа, они вновь отправлялись к первой группе на генерацию.
Исходя из анализа проблем на тестовых сетах, мы сформировали группу LLM и алгоритмических проверок на зацикливания и повторы в ответе, речевые клише и ответы, которые не соответствовали заданному стилю. В сумме получился сбалансированный набор данных для тренировки модели. Он закрывает различные сценарии и содержит наилучшие, самые качественные ответы, в том числе по стилю.
Кроме того, переход на GigaChat 2.0 позволил сделать колонку более эмпатичной. Модель «из коробки» умеет распознавать эмоции [10] по тексту запроса, его сути и контексту диалога, а благодаря дообучению она способна сформулировать ответ с учётом настроения пользователя.
Генерация ответов нейросетью позволила уйти от универсальных предзаписанных фраз и древовидных сценариев, работающих по принципу «если X, то Y». Лексика колонок стала богаче, у них появились эмоции [11] (там, где это действительно нужно). А если они ошибутся, то признают ошибку — и это тоже очень по-человечески.
Для оценки каждого из компонентов мы разработали набор метрик. Часть из них замеряется автоматически, а остальные с помощью наших AI-тренеров.
Метрики болталки
Эту метрику мы замеряем вручную: AI-тренеры по методологии ALAP (assistant LLM answer properties) размечают диалог и оценивают ответы по различным критериям. Например:
Впечатление [12]. Это комплексный критерий, который оценивают самым первым, до оценки других, чтобы сохранить непредвзятость; общая удовлетворённость ответом колонки по пятибалльной шкале.
Контекстность. Модель понимает, о чём идёт речь в диалоге, не переспрашивает зря и не повторяет длинные ответы и конкретные формулировки, которые уже озвучивала. Всего два варианта оценки: «хорошо» и «плохо».
Персонажность. Та самая возможность настроить взаимодействие с устройством и стиль его общения, о которой рассказывали выше. AI-тренер оценивает, насколько ответ отражает нужный стиль и использует ли колонка характерную для него лексику. При этом так называемая персонажность требуется не всегда. Например, если пользователь спрашивает: «Который час?», это, условно, фактологический вопрос — нужно просто назвать время.
Метрики навыков
Чтобы тестировать использование навыков в обновлённых интеллектуальных колонках, мы используем несколько собственных бенчмарков, собранных в том числе из обезличенных логов. На них мы замеряем классификационные метрики использования навыков. Ниже приведены значения на двух основных корзинах:
Recall – на них мы проверяем, что модель корректно вызывает нужную функцию при условии нескольких схожих доступных;
FPR (сложные реплики, где использование навыка не требуется) – на них убеждаемся, что модель не использует навык тогда, когда он не нужен.
|
|
gpt4o |
GigaChat 2 Pro fp8 |
GigaChat 2 MAX |
|
Recall-корзина |
0,86 |
0,98 |
0,99 |
|
FPR-корзина |
0,89 |
0,98 |
0,98 |
За счёт большой обучающей выборки мы смогли достичь сравнимого качества на Pro и Max моделях в большинстве простых кейсов. Однако в сложных контекстных взаимодействиях модель с большим количеством параметров всё же опережает более легковесную версию.
Метрика Goal Completion Rate (GCR)
Чтобы полноценно оценить качество работы умных колонок в реальных условиях, требуется комплексная end-to-end метрика. В нашем случае это GCR, Goal Completion Rate (метрика выполнения целей). Мы замеряем её применительно к нашим трём основным компонентам — навыки, болталка и безопасность — с помощью специально подготовленных сценариев.
GCR мы тоже замеряем вручную: AI-тренеры проверяют успешность каждого шага в рамках сценария, учитывая качество ответов колонок и корректность работы бэкенда. Это позволяет объективно оценить качество работы устройств в условиях, максимально приближенных к реальному использованию. Если любой из компонентов в сценарии не отработал, кейс получает 0 баллов. Далее мы считаем долю успешных кейсов в сценарии.
Измерения показали, что качество ответов обновлённых колонок на сложные контекстные связки запросов выросло более чем в два раза. Сейчас этот показатель составляет более 80%. С учётом сложности сценариев это очень хороший показатель. Но, разумеется, мы не планируем на этом останавливаться.
Чтобы перевести умные колонки на GigaChat 2.0, наши команды улучшали как сам GigaChat, так и инфраструктуру умных колонок. Именно этот комплексный подход позволил превратить умные устройства в интеллектуальные: научить их естественно общаться, поддерживать долгие и содержательные беседы, креативить, объяснять. Словом, помогать своим владельцам каждый день.
Автор: flu-flu
Источник [13]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/14228
URLs in this post:
[1] интеллект: http://www.braintools.ru/article/7605
[2] поведение: http://www.braintools.ru/article/9372
[3] зрения: http://www.braintools.ru/article/6238
[4] логикой: http://www.braintools.ru/article/7640
[5] поведение: http://www.braintools.ru/article/5593
[6] подкрепить: http://www.braintools.ru/article/5528
[7] обучения: http://www.braintools.ru/article/5125
[8] Ошибка: http://www.braintools.ru/article/4192
[9] опыт: http://www.braintools.ru/article/6952
[10] эмоции: http://www.braintools.ru/article/9540
[11] эмоции: http://www.braintools.ru/article/9387
[12] Впечатление: http://www.braintools.ru/article/2012
[13] Источник: https://habr.com/ru/companies/sberdevices/articles/900694/?utm_source=habrahabr&utm_medium=rss&utm_campaign=900694
Нажмите здесь для печати.