Как думает Алиса в умном доме
Незаметно для пользователей под капотом Алисы поменялась вся архитектура — и она стала ещё быстрее, качественнее и умнее. Вместе с Пашей Каплей рассказываем, как это произошло!
6 января 2026Незаметно для пользователей под капотом Алисы поменялась вся архитектура — и она стала ещё быстрее, качественнее и умнее. Вместе с Пашей Каплей рассказываем, как это произошло!
6 января 2026В начале сентября прошла масштабная конференция big tech night. На ней Павел Капля, руководитель продуктовой разработки Алисы, поделился тем, как голосовой помощник незаметно переходит от поинтентной обработки к агентной модели на базе Function calling. А о том, что всё это значит, рассказываем в статье по мотивам выступления Паши.
Алиса состояла из разных сценариев, каждый из которых отвечал за свою область: Аудио, Видео, Интернет вещей, Генеративная модель, Таймеры, Погода. Когда от пользователя поступал запрос, компонент NLU (Natural Language Understanding) обрабатывал его и находил все возможные «смыслы» — интенты, которые могут в нём содержаться.
Например, в запросе «Включи свет» может быть несколько интентов:
включить свет по всей квартире — сценарий «Интернет вещей»;
включить свет в той комнате, где находится устройство, — сценарий «Интернет вещей»;
включить песню «Свет» — сценарий «Аудио»;
включить клип на песню «Свет» — сценарий «Видео».
Что именно имеет в виду пользователь, модель не распознавала. Поэтому запрос отправлялся сразу во все сценарии. Каждый из них в результате либо выдавал свой вариант ответа, либо признавал, что вовсе не может ответить. Такой подход работал не оптимально, поэтому в системе был преклассификатор.
Преклассификатор отбирал только те сценарии, что могут ответить на найденные интенты. Допустим, в нашем примере он сразу отбросил бы сценарии «Таймеры» и «Погода». Соответственно, модель обращалась к меньшему количеству сценариев и быстрее давала ответ. Но даже с преклассификатором обработка запроса шла неидеально.
Когда все сценарии выдавали результаты, постклассификатор обрабатывал их, выстраивал по релевантности и выбирал самый подходящий. Этот ответ и выдавался пользователю.
Но вот наступила эпоха LLM.
И сделали прототип. NLU, преклассификатор и постклассификатор заменили на LMM. А большинство сценариев реализовали в виде Function calling.
Ещё изменили содержание запроса к LLM. Теперь он состоит из диалога, набора доступных модели функций с описаниями (бывшие сценарии) и контекста.
Контекст для LLM это данные, изображение на главном экране (если ТВ-станция) и устройство, на которое поступил запрос. По умолчанию LLM этих данных не знает, так что может растеряться, если ей скажут «Поставь напоминание на завтра» и система не добавит контекст. Ведь «завтра» — оно когда?
Всё это части эффективного промпта, благодаря которому модель сразу вызывает нужную функцию (Function calling) и пишет аргумент вызова в формате JSON. JSON — это универсальный формат данных, который могут генерировать и анализировать разные языки программирования.
Эта схема была хороша на бумаге, а на практике выявили проблему. Запросы отправляются в LLM ещё несколько раз после вызова функции: сначала на основе первоначального промпта, потом на основе добытых дополнительных данных.
Команда стала искать пути оптимизации.
RAG над функциями. Retrieval-Augmented Generation (RAG) показывает LLM только функции, релевантные запросу. Это приводит к тому, что промпт становится короче. А чем он короче, тем быстрее работает модель — без потери качества.
Один запрос — один сервер. В рамках обработки одного запроса делается несколько последовательных вызовов модели, где промпт только увеличивается. Команда настроила систему так, чтобы все шаги обработки выполнялись на одном и том же сервере с LLM, а не размывались по разным железкам. Один сервер хорош тем, что даёт возможность использовать KV cache.
KV cache. Можно сказать, что это память модели о текущем запросе. Технология позволяет модели, прочитав один раз префикс, не перечитывать его заново при повторных запросах, а брать из кэша.
Сокращение длины генерации. Команда сделала ещё несколько шагов, чтобы внутренняя генерация стала короче:
Уменьшила длину идентификаторов: было hfk7sda65onm, стало id1. Кстати, это работает не только с идентификаторами, но и с целыми наборами данных.
Настроила один токен для ситуаций, когда LLM признаёт, что не может справиться. Вместо пересказа всей задачи модель просто говорит: «Это тебе», — и перекидывает задачу ассистенту.
Система расширяется, меняется архитектура — но обучающие данные и изначальный алгоритм обработки запросов уже не стереть, к тому же часть системы по-прежнему им пользуется. Как сделать так, чтобы модель не запуталась в новых и старых алгоритмах и правильно их применяла, а набор примеров для обучения оставался актуальным?
Команда нашла выход: версионировать функции. Создали механизм, где одна и та же функция может быть выполнена по нескольким разным схемам. Данные для обучения теперь привязываются не просто к функции, а к конкретной версии её схемы. Описание аргументов и результатов функций написано на языке Protobuf (Protocol Buffers).
В итоге модель продолжает учиться на чётких непротиворечивых примерах и не путается в старых и новых форматах. Вся система может работать с разными версиями функций одновременно: например, старые устройства используют API v1, а новые — API v2. При этом модель понимает обе версии и корректно работает со всеми пользователями. А также версионирование функций даёт возможность постепенно обновлять систему, не ломая её и не допуская сбоев в работе.
Алиса слушает тишину 300 миллисекунд после того, как пользователь закончил запрос. Именно такой промежуток нужен, чтобы убедиться, что дополнений не будет.
Так как Алиса использует частичное распознавание для обработки запросов (Partial), речь «режется» каждые 0,4 секунды — примерно на каждом слове. Когда пользователь заканчивает говорить, Алиса слушает тишину ещё один Partial. За это время она успевает обработать все предыдущие части запроса и, как кажется пользователям, сразу начинает давать ответ.
Прежде всего, на 11% снизилась доля перезапросов. А значит, Алиса стала лучше понимать пользователей. Соответственно, сократилось количество ответов вроде «Извините, я не поняла».
Обновлённая архитектура повлияла на процесс разработки и внедрения новых функций. Теперь их можно внедрить за несколько часов: для этого достаточно корректно описать функцию — и она начинает работать сразу, часто даже без дообучения модели. Так минимальное усилие со стороны разработчиков быстро превращается в работающую фичу. Это приносит всей команде невероятное ощущение потока и эффективности.
Система стала мультиинтентной, то есть научилась распознавать и выполнять в одном запросе несколько намерений. Например, фраза «включи фильм и сделай громкость 20» больше не ставит её в тупик. Ассистент может агрегировать данные из разных источников — ТВ-программы, погоды, новостей, чтобы дать комплексный ответ.
Также модель имеет доступ к структурированным объектам: истории просмотров, деталям фильмов.
Новая технология позволила команде запустить полноценное голосовое управление графическим интерфейсом на ТВ-станции. Модели дали доступ к контексту всего экрана и способность «нажимать» на любые элементы. Это первый шаг к бесшовному взаимодействию, при котором наличие пульта становится опциональным.
А ещё мы задали Паше пару вопросов — просто не могли удержаться!
Ты работаешь в Яндексе с 2018 года. Расскажи, на какую работу приходил изначально и чем занимаешься сейчас?
Я пришёл на позицию Java-разработчика и занимался сервисом, отвечал за продажу и покупку фильмов и подписки в Алисе, а также выдачу промокодов новым владельцам устройств. Сейчас я возглавляю всю продуктовую разработку Алисы, строю и превращаю технологии в продукты, с которыми взаимодействуют все пользователи.
Сколько лет занял переход Алисы с одной архитектуры на другую? Насколько большая команда работала над проектом?
Первый концепт появился летом 2023, в проекте участвовало несколько десятков разработчиков, ML-инженеров, аналитиков, менеджеров и QA.
Какие у вас планы на ближайшее время? На чём планируете сосредоточиться в 2026 году?
Недавно мы запустили новое семейство моделей Alice AI и анонсировали агентов на основе этих моделей, которые скоро появятся у наших пользователей. Кстати, проект с реализацией и внедрением Function calling стал базовым кирпичиком, из которого они выросли.
Что посоветуешь тем, кто только начинает свой путь в IT?
Найти себе проект, от которого будешь кайфовать, чувствовать отдачу и гордиться. А потом не побояться на него податься и сделать всё, чтобы заниматься именно им.