Ная
· luke

Живое общение с ИИ моим голосом на ПК! MiniCPM-4.5-omni портирован на vLLM-omni

[voice-ainaia-osminicpms2svllm-omnisttttsllmopensource]

Поддержка Gemini 3.1 Flash Live + MiniCPM-o 4.5 vLLM Challenge — История разработки S2S Real-time Voice AI в Naia OS С тех пор я долго не мог публиковать обновления.

За это время произошло много событий. Nextain взяла на себя управление корейским христианским порталом (www.onmam.com) и обсуждала поддержку применения ИИ, а также была выбрана для участия в государственном проекте в Корее, что придало импульс развитию сервиса Naia. Похоже, мы сможем представить настоящие аватары Naia, а не стандартные аватары Vroid Hub.

В конце предыдущей статьи я писал, что на следующей неделе одолжу видеокарты, и ситуация, вероятно, станет проще. И вот теперь я смог сдержать это обещание. В среде с двумя RTX 3090 мы завершили первичную проверку работы MiniCPM-o 4.5, портированного на vLLM-omni и подключенного к клиенту Naia, включая живое англоязычное общение с аудиореференсом (клонирование голоса).

Кстати, мы первые, кто портировал MiniCPM-o 4.5 на vLLM-omni, и за рубежом тоже интересуются, насколько далеко мы продвинулись. В upstream > #1182 была попытка другого человека, но она не была объединена, и мы также работали по отдельному направлению. Мы достигли уровня, когда это достаточно хорошо работает, и сейчас находимся на стадии доработки до уровня, который примут мейнтейнеры upstream.

Почему MiniCPM-o 4.5 был целью?

Как я уже писал в предыдущей статье, MiniCPM-o 4.5 фактически является единственной омни-моделью, которую можно запустить на персональном RTX 3090, и которая одновременно поддерживает аудиореференс (клонирование голоса) и тонкую настройку.

  • GPT-4o / Gemini Live — Только для облака, веса не раскрываются, тонкая настройка невозможна
  • Moshi — Открытый исходный код, отличный полнодуплексный режим, но в основном английский/французский + неактивное сообщество
  • Qwen3-Omni-30B — 30B, поэтому без квантования не помещается в одну 24 ГБ карту, а при квантовании голосовой вывод искажается
  • MiniCPM-o 4.5 — 9B (комбинация Whisper-medium + Qwen3-8B + CosyVoice2 + SigLip2), работает на одной 24 ГБ карте, клонирование голоса с аудиореференсом, и возможна тонкая настройка

Однако отсутствие поддержки корейского языка пока является недостатком, и это то, куда мы можем внести свой вклад. Поэтому на этом AI-чемпионате мы подали заявку на выполнение тонкой настройки vLLM-omni для корейского языка и создание сервиса витуберов с использованием Naia-Memory под названием команды "Я помню тебя". Мы не смогли подать заявку в категорию 'отечественные', так как у нас не было омни-модели желаемого уровня.

"Разве не каждый хотел бы иметь AI-витубера, который помнит вас и говорит вашим голосом на вашем ПК?" Чтобы это стало возможным, мы считаем, что необходимы следующие технологии, и сосредоточены на них:

  1. Омни-модель, работающая локально — Не пайплайн STT/LLM/TTS, а сквозная речь-в-речь. Пайплайн-подход имеет слишком большие кумулятивные задержки и потери интонации. → MiniCPM-o 4.5
  2. Аудиореференс (клонирование голоса)"Говори этим голосом" — один раз услышав, модель общается с этим тембром. → Клонирование на основе spk_emb CosyVoice2
  3. Долгосрочная память — Система памяти, которая не сбрасывается с каждой сессией и помнит пользователя. → Naia Memory, которую мы разрабатываем отдельно (4-уровневая система памяти, вдохновленная нейронауками)
  4. Корейский язык — Вышеуказанные три должны работать на корейском для повседневного использования. → Тонкая настройка CosyVoice2 для корейского языка (данные AIHub получены, немедленно приступим при поддержке GPU)

Кроме того, есть еще одно направление, которое мы скоро представим. naia-sing — думаю, по названию вы уже догадались, что это. Ждите с нетерпением. Ниже представлены реальные демонстрации работы и дополнительная техническая информация.

Демо 1 — Разговор в клиенте Naia

Прошу прощения за мой не очень хороший английский в демонстрационном видео.

Это видео демонстрирует тестирование диалога после портирования MiniCPM 4.5-o на vllm-omni и подключения к настольному приложению Naia. Аппаратное обеспечение: RTX-3090 ×2 (2-way), bf16 без квантования. Как и ожидается от омни-модели (S2S, сквозная речь-в-речь), демонстрируется плавный ход беседы и естественное выражение эмоций. В настоящее время поддерживаются английский и китайский языки.

Демо 2 — Демо-страница MiniCPM-o + Аудиореференс

Это форк официальной демонстрационной страницы MiniCPM-o 4.5, подключенный к бэкенду vllm-omni. Он включает пример работы аудиореференса (клонирования голоса). При загрузке WAV-файла ответ синтезируется с тембром и интонацией этого голоса. На стороне сервера используется LRU-кеш с SHA-256 ключами, чтобы избежать повторных вычислений для одинаковых референсов, поэтому после первого ответа дополнительных накладных расходов почти нет.

Сводка по реализации

Работа велась в трех репозиториях.

РепозиторийРоль
nextain/vllm-omniФорк vllm-omni — модуль модели MiniCPM-o 4.5 + 3-стадийный пайплайн Thinker→Talker→Code2Wav + добавление клонирования голоса (session.update.ref_audio)
nextain/MiniCPM-o-Demo-forvLLM-omniФорк официальной демонстрации PyTorch — добавлен режим backend=vllm_omni, возможность прямого ввода/проверки URL vllm-omni на странице audio-duplex
nextain/naia-osНастольное приложение Naia — добавлено поле MiniCpmOConfig.refAudio первого класса, AudioContext → 16 кГц моно → кодировщик base64 WAV в браузере (Tauri WebView)

Клиент Naia напрямую подключается к /v1/realtime (совместимому с OpenAI Realtime API) vllm-omni, минуя демонстрационный шлюз. Через WebSocket передается аудио PCM16 16 кГц, а в ответ принимается моно аудио PCM16 24 кГц. Вся работа выполнялась с помощью Claude Code. Это включает код модели, YAML-конфигурацию стадий, stage_input_processor, прокси бэкенда демонстрации, TypeScript-клиент Naia + WAV-кодировщик + vitest.

  • Naia находится в процессе полной переработки. Часть Naia-os, вероятно, станет структурой с бэкендом в виде гибкого CLI с naia-agent и будет объединена с Naia-memory и Naia-ADK.

Но "AI slop" все еще присутствует

В предыдущей статье я писал, что "цель этой работы — реализация AI-native Opensource экосистемы, эксперимент, который позволит ИИ корректно вносить вклад в открытый исходный код без "AI slop" (небрежности ИИ)". И сейчас это самая сложная часть, и после финальной проверки снова выявились проблемы. Однако я хотел поделиться этим как можно скорее, поэтому написал этот пост до решения этих проблем.

За последние несколько дней я четыре раза запускал других AI-агентов в качестве враждебных рецензентов. В первом раунде было 2 BLOCKER + 13 MAJOR. Один из них был откровенной ложью, например: "Пример клиента не работает — бэкенд основан на аудиовходе, но написан как текстовый". Во втором раунде 1 MAJOR (пример использовал audioop из stdlib, удаленный в Python 3.13). В третьем и четвертом раундах — чистый проход. Наши правила (2 последовательных чистых прохода) были соблюдены. Но на этом я не остановился и запустил еще раз с точки зрения мейнтейнера vllm-project, и проблемы все еще остаются.

  • 3 BLOCKER:
    • Изменение сквозного инварианта (whitelist→blacklist) в chunk_transfer_adapter.py для функциональности одной модели
    • prompt_len_override предназначен только для MiniCPM-o, но находится в общей инфраструктуре
    • Сайд-канал chat_template_kwargs.ref_audio нарушает слои — рядом есть прецедент поля первого класса
  • 5 MAJOR + 8 MINOR

Внутренние правила пройдены, но по критериям внешних мейнтейнеров слияние не произойдет в первом раунде. Кроме того, upstream/main снова обновился после merge-base нашего форка, и работы по слиянию продолжаются.

Следующие шаги

  1. Исправление BLOCKER/MAJOR с точки зрения upstream — в процессе
  2. Слияние upstream/main + разрешение конфликтов — скоро
  3. Подача PR — после завершения вышеуказанных двух. Решение о едином PR или разделении на 2 PR (модуль модели / клонирование голоса) пока отложено
  4. Тонкая настройка для корейского языка — сама модель. Самым большим препятствием является то, что CosyVoice2 (основа Code2Wav) не обучался на корейском языке. В настоящее время генерация корейского текста работает нормально, но синтез речи звучит искаженно.

Я продолжу систематизировать и делиться дальнейшей работой. Мы покажем, что ИИ тоже может вносить вклад в открытый исходный код. Комментарии и GitHub Issue приветствуются.


Репозитории

Naia: https://naia.nextain.io

Popular Posts

CC BY-NC-SA 4.0This post is licensed under CC BY-NC-SA 4.0.

Комментарии

Вы можете оставить комментарий без входа

...