VoiceMem: голосовой ассистент помнит все прошлые разговоры и учитывает факты из них без задержки в диалоге

voicemem
Схема двух полушарий VoiceMem: левое хранит сущности, людей и знания, правое эмоции, опыт и предпочтения

Команда из Nanyang Technological University, NUS, Tsinghua и CUHK выпустила VoiceMem — фреймворк быстрой памяти для голосовых ассистентов, работающих в реальном времени. VoiceMem хранит факты и эмоциональный портрет пользователя в двух параллельных графах и успевает достать нужное, пока пользователь договаривает фразу, точнее за 134 мс. Устроено это так: речевая модель не может держать в контексте всю историю общения, поэтому после каждого разговора отдельная LLM вытаскивает из него короткие утверждения и складывает их в базу по одной записи на утверждение: «я вегетарианец», «у меня аллергия на орехи», «сестру зовут Аня». Когда пользователь задаёт новый вопрос, из базы достаются несколько подходящих записей и дописываются в промпт обычным текстом, перед самим вопросом.

На бенчмарке долгосрочной памяти LoCoMo VoiceMem отвечает правильно в 91.2% случаев, доставая пять записей общей длиной 430 токенов. Mem0, который работает у неё под капотом в роли хранилища, на тех же вопросах выдаёт 61.68% и тратит 6956 токенов, EverMemOS 83.13% при 1899 токенах. Эти записи подставляются в промпт заново на каждой реплике, поэтому их суммарная длина определяет и цену запроса, и то, сколько места в контексте остаётся под сам разговор. Поиск занимает 134 мс против 1440 мс у Mem0 и целиком помещается в паузу, которую и так выжидает детектор голосовой активности (VAD). Проект открыт под Apache 2.0: код, дообучение и скрипты оценки лежат на GitHub, веса и вспомогательные модели на Hugging Face, обучающий датасет ChatMem-400K выложен отдельно. Демо и видео доступны на странице проекта.

Почему голосу нужна отдельная память

Обычные движки памяти для текстовых агентов рассчитаны на другой режим работы. Во-первых, они достают до 100 записей за раз, а речевая модель столько контекста не переварит. Во-вторых, извлечение у них занимает 2–3 секунды, тогда как на паузу между репликами без потери ритма диалога можно потратить лишь 100–200 мс. Авторы формулируют задачу так: требуется держать точность при бюджете в 5 записей и не добавлять слышимой задержки. Плюс к этому голосовому ассистенту важно помнить не только факты, но и отношение пользователя к людям и событиям, а это отдельный тип памяти со своей логикой обновления.

Левое полушарие: схема, сущность, запись

Вместо того чтобы искать по всей базе, VoiceMem строит над хранилищем лёгкий двухуровневый индекс. Верхний уровень это схемы (грубые смысловые слоты вроде work, health, daily_life), нижний это сущности (конкретные люди, события, понятия). Каждая сущность принадлежит ровно одной схеме и хранит ссылки на записи в бэкенде. Пока пользователь говорит, стриминговый матчер по частичной расшифровке находит подходящие схемы и сущности, расширяет их соседями на один переход по сильным и слабым связям и получает компактный пул кандидатов. Поиск идёт только по этому пулу.

Отсюда важное свойство: задержка не зависит от K. Поиск держится около 134 мс и при K=3, и при K=100, потому что маршрутизация по схемам ограничивает пул кандидатов ещё до ранжирования. Схемы не задаются раз и навсегда: если группа сущностей регулярно извлекается вместе, она проходит проверку LLM-судьёй на релевантность, важность и полноту и выделяется в новый кластер.

Три фазы работы VoiceMem: стриминговая предобработка, управление левым и правым полушарием, запрос к сменному бэкенду памяти
Фаза I извлекает расшифровку, сущности, эмоцию и голосовой отпечаток, фаза II управляет графами, фаза III обращается к сменному бэкенду.

Правое полушарие: кто такой пользователь

Пока левая часть фиксирует что произошло, правая описывает, кто перед моделью. Здесь два типа узлов. Независимые узлы хранят устойчивые черты («часто чувствует себя одиноко»), кросс-сущностные привязаны к конкретному объекту из левого графа («не любит еженедельные планёрки с Бобом»). Разделение принципиальное: если их смешать, ситуативная реакция превратится в постоянную черту характера либо потеряется причина эмоции.

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

Четыре этапа внутри паузы

Извлечение разбито на стадии и запускается до конца реплики. Пока человек говорит, идут потоковое распознавание, детект сущностей и эмоции. На 200 мс тишины считается эмбеддинг запроса и разворачиваются графы обоих полушарий. На 400–500 мс остаётся только обращение к бэкенду. Порог VAD обычно стоит на 500 мс, так что до начала ответа есть окно в 400 мс, а плотный поиск по двум графам стоит 134 мс.

Временная диаграмма: хвост речи 0–200 мс, упреждение 200–400 мс, поиск 400–500 мс, ответ модели после срабатывания порога VAD
Поиск разложен по стадиям и прячется в молчании, которое VAD всё равно отсчитывает.

Результаты

На фактических бенчмарках (LoCoMo, LongMemEval, Memora) средний балл VoiceMem 76.39. Это на 24.12 пункта выше Mem0 и на 15.90 выше подачи всей истории диалога целиком. Наибольший отрыв там, где ответ требует нескольких воспоминаний сразу: во временных рассуждениях разрыв достигает 54.9 пункта. На бенчмарках персоны средний результат 74.16 с GPT-4o-mini в роли отвечающей модели, что на 1.89 пункта выше прежнего лидера MemOS, и 76.56 с дообученной моделью.

Таблица сравнения VoiceMem с Mem0, Zep, LangMem, A-MEM, MemoryOS, MemOS, MemoryBank, EverMemOS и Emotional RAG по одиннадцати подкатегориям
Сравнение с десятью конкурентами по одиннадцати подкатегориям фактической памяти.

Отдельно авторы собрали ChatMem-Bench: 316 вопросов по 15 314 репликам и 53 часам аудио. VoiceMem выигрывает в 11 категориях из 14, средний балл 68.73 против 53.95 у MemOS. Самый заметный разрыв в паралингвистике и звуковом окружении, где расшифровка просто не содержит нужной информации: текстовые решения набирают от 3.23 до 26.92, VoiceMem от 45.16 до 53.84.

Что даёт каждый механизм

Абляции на четырёх датасетах показывают, что вклад вносят все компоненты. Больше всего теряется без верхнеуровневого индекса (минус 9.9 на LoCoMo), следом идёт правое полушарие (минус 6.3), то есть эмоции и персона несут информацию, которой в фактическом хранилище нет. Увеличение бюджета почти ничего не добавляет: переход с K=5 на K=100 даёт всего 2.3 пункта при восьмикратном росте токенов.

Любопытна и получившаяся структура хранилища. В левом графе 510 записей, шесть слотов заданы заранее, ещё два выросли сами и покрывают 254 записи, почти половину базы. Ни один из них не помещается внутрь заданного слота: «Питомцы и активности на воздухе» собирают 48% записей из daily_life, 27% из health и 17% из relationships. Индекс не привязан к конкретному хранилищу: со штатным Mem0 прирост 29.52 пункта, с Zep 22.92, с LangMem 15.76.

Четыре сценария сравнения GPT-live и VoiceMem: распознавание скрытого расстройства, понимание предпочтений, память о событии недельной давности, вопрос про песню в кафе
Четыре сценария, где ответ меняется в зависимости от запомненного: тембр голоса, предпочтения, событие недельной давности и звук из прошлого.

Обучение и ограничения

Чтобы речевые модели вообще умели принимать память на вход, авторы дообучили Qwen2.5-Omni, Qwen3-Omni и Step-Audio2-Mini через онлайн-дистилляцию от закрытых учителей. Данные для этого генерировались циклом: построение памяти синтетического пользователя, генерация зависящих от памяти диалогов, фильтрация и ручная доработка. Так получился ChatMem-400K.

Часть слабых мест авторы называют сами. Подробное описание ChatMem-Bench отложено в отдельный технический отчёт, так что воспроизвести его пока сложнее, чем прогнать LoCoMo. Качество бэкенда всё ещё ограничивает результат: LangMem и Mem0 стартуют с разницей в 5.50 пункта, а финишируют с разрывом в 19.26. Стоит учитывать и то, что часть выигрыша на аудиокатегориях объясняется не только удачной архитектурой: конкуренты работают с расшифровкой, в которой звуковых данных нет в принципе.


neurohive telegram
Подписаться
Уведомить о
guest

0 Comments
Старые
Новые Популярные