Naia
· luke

¡Conversaciones en vivo con IA con mi propia voz en mi PC! Porting de MiniCPM-4.5-omni a vLLM-omni completado

[voice-ainaia-osminicpms2svllm-omnisttttsllmopensource]

Soporte Gemini 3.1 Flash Live + Desafío MiniCPM-o 4.5 vLLM — Desarrollo de IA de voz en tiempo real S2S de Naia OS Desde entonces, no he podido publicar actualizaciones en el blog por un tiempo.

Mientras tanto, han sucedido muchas cosas. Nextain se ha encargado de la operación del portal cristiano de Corea (www.onmam.com) y ha estado discutiendo el soporte para la aplicación de IA, y el servicio de Naia ha ganado impulso al ser seleccionado para un proyecto gubernamental coreano. Parece que podremos presentar los avatares reales de Naia, no solo los avatares básicos de Vroid Hub.

Y al final del artículo anterior, escribí que la situación se facilitaría ya que habíamos acordado pedir prestadas algunas tarjetas gráficas la próxima semana, y ahora finalmente hemos podido cumplir esa promesa. Hemos completado la primera verificación de funcionamiento de MiniCPM-o 4.5 portado a vLLM-omni y conectado al cliente Naia en un entorno de dos RTX 3090, incluyendo conversación en inglés en tiempo real con referencia de audio (clonación de voz).

Como referencia, somos los primeros en subir MiniCPM-o 4.5 a vLLM-omni, e incluso en el extranjero hay quienes se preguntan hasta dónde hemos llegado. Hay un intento de otra persona en el upstream > #1182, pero nunca se ha fusionado, y nosotros también hemos estado trabajando en una pista separada. Hemos llegado a un nivel en el que funciona razonablemente bien, y ahora estamos en la etapa de organizar el código para que sea aceptable por los mantenedores del upstream.

¿Por qué MiniCPM-o 4.5 fue el objetivo?

Como mencioné en el artículo anterior, para resumir, MiniCPM-o 4.5 es actualmente el único modelo omni que puede ejecutarse en una sola RTX 3090 a nivel personal y que permite la referencia de audio (clonación de voz) y el fine-tuning simultáneamente.

  • GPT-4o / Gemini Live — Solo en la nube, pesos privados, no se puede hacer fine-tuning
  • Moshi — Código abierto y excelente full-duplex, pero principalmente inglés/francés + comunidad inactiva
  • Qwen3-Omni-30B — Al ser 30B, no cabe en una sola tarjeta de 24 GB sin cuantificación, y la salida de voz se corrompe con cuantificación
  • MiniCPM-o 4.5 — 9B (combinación de Whisper-medium + Qwen3-8B + CosyVoice2 + SigLip2), se ejecuta en una sola tarjeta de 24 GB, clonación de voz con referencia de audio, y permite fine-tuning

Sin embargo, la falta de soporte para el coreano es una desventaja y, al mismo tiempo, una oportunidad para nuestra contribución. Por ello, en este AI Champion, presentamos nuestra intención de realizar el fine-tuning en coreano de vLLM-omni y un servicio de VTuber utilizando Naia-Memory bajo el nombre de equipo "Te Recuerdo". No pudimos aplicar en la categoría 'nacional' para Dokpamo porque no había un modelo omni al nivel que deseábamos.

"¿A quién no le gustaría tener un VTuber de IA que te recuerde y hable con tu propia voz en tu PC?" Para hacer esto posible, creemos que se necesitan las siguientes tecnologías, y nos estamos centrando en ellas:

  1. Modelo omni ejecutándose localmente — No una tubería STT/LLM/TTS, sino de voz a voz de extremo a extremo. El enfoque de tubería tiene una latencia acumulada y una pérdida de prosodia demasiado grandes. → MiniCPM-o 4.5
  2. Referencia de audio (clonación de voz)"Habla con esta voz" Una vez que se le da una muestra, conversa con ese timbre. → Clonación basada en spk_emb de CosyVoice2
  3. Memoria a largo plazo — Un sistema de memoria que no se reinicia con cada sesión y recuerda al usuario. → Naia Memory que estamos desarrollando por separado (sistema de memoria de 4 niveles inspirado en la neurociencia)
  4. Coreano — Los tres anteriores deben funcionar en coreano para su uso diario. → Fine-tuning de CosyVoice2 en coreano (datos de AIHub asegurados, se iniciará inmediatamente con soporte de GPU)

Y adicionalmente, hay otra pista que pronto revelaremos. naia-sing — creo que el nombre ya les da una idea. ¡Estén atentos! A continuación, compartimos demostraciones de funcionamiento real y detalles técnicos adicionales.

Demo 1 — Conversación en el cliente Naia

Por favor, disculpen mi inglés no tan bueno en el video de la demostración.

Este es un video que muestra una conversación de prueba después de portar MiniCPM 4.5-o a vLLM-omni y conectarlo a la aplicación de escritorio Naia. El hardware es RTX-3090 ×2 (2-way), bf16 sin cuantificación. Como es característico de un modelo omni (S2S, speech-to-speech de extremo a extremo), el flujo de la conversación es suave y las expresiones emocionales naturales se mantienen intactas. Actualmente, soporta inglés y chino.

Demo 2 — Página de demostración de MiniCPM-o + Referencia de audio

Este es un fork de la página de demostración oficial de MiniCPM-o 4.5, conectada al backend de vLLM-omni. Incluye un ejemplo de funcionamiento de la referencia de audio (clonación de voz). Al subir un archivo WAV, sintetiza la respuesta con el timbre y la entonación de esa voz. En el lado del servidor, un caché LRU con clave SHA-256 evita el recálculo de la misma referencia, por lo que apenas hay sobrecarga adicional después de la primera respuesta.

Resumen de la implementación

Hemos trabajado en tres repositorios.

RepoRol
nextain/vllm-omniFork de vllm-omni — Módulo del modelo MiniCPM-o 4.5 + Pipeline de 3 etapas Thinker→Talker→Code2Wav + Adición de clonación de voz (session.update.ref_audio)
nextain/MiniCPM-o-Demo-forvLLM-omniFork de la demo oficial de PyTorch — Adición del modo backend=vllm_omni, permite la entrada/verificación directa de la URL de vllm-omni en la página audio-duplex
nextain/naia-osAplicación de escritorio Naia — Adición del campo de primera clase MiniCpmOConfig.refAudio, AudioContext → 16 kHz mono → codificador WAV base64 en el navegador (Tauri webview)

El cliente Naia se conecta directamente a /v1/realtime de vLLM-omni (compatible con la API en tiempo real de OpenAI) sin pasar por una pasarela de demostración. Envía audio PCM16 de 16 kHz a través de WebSocket y recibe respuestas en PCM16 mono de 24 kHz. Todo el trabajo se realizó con Claude Code. Esto incluye el código del modelo, el YAML de configuración de etapas, el procesador de entrada de etapas, el proxy del backend de la demostración, el cliente TypeScript de Naia + el codificador WAV + vitest.

  • Naia está siendo completamente renovado. Parte de Naia-os parece que se convertirá en una estructura con un backend CLI flexible como naia-agent, y se integrará con Naia-memory y Naia-ADK.

Pero el "AI slop" aún persiste

En el artículo anterior, escribí que "el propósito de este trabajo es la realización de un ecosistema de código abierto nativo de IA, un experimento para demostrar que la IA puede contribuir correctamente al código abierto sin 'AI slop'". Actualmente, esa es la parte más difícil, y la revisión final ha revelado problemas una vez más. Sin embargo, quería compartir esto lo antes posible, así que escribí esta publicación antes de resolver esos problemas.

Durante los últimos días, ejecutamos otros agentes de IA como revisores adversarios 4 veces. En la primera ronda, obtuvimos 2 BLOCKER + 13 MAJOR. Uno de ellos era una mentira obvia como "El cliente de ejemplo no funciona — el backend está basado en entrada de audio pero está escrito de forma text-driven". En la segunda ronda, 1 MAJOR (el ejemplo usa audioop de la stdlib, que fue eliminado en Python 3.13). En la tercera y cuarta ronda, obtuvimos pases limpios. Cumplimos nuestra regla (2 pases limpios consecutivos). Pero no nos detuvimos ahí y lo ejecutamos una vez más desde la perspectiva de un mantenedor de vllm-project, y los problemas persisten.

  • 3 BLOCKER:
    • Cambio de la invariante transversal (whitelist→blacklist) en chunk_transfer_adapter.py para la funcionalidad de un solo modelo
    • prompt_len_override es específico de MiniCPM-o pero está ubicado en la infraestructura compartida
    • El canal lateral chat_template_kwargs.ref_audio viola la capa — hay un precedente de campo de primera clase al lado
  • 5 MAJOR + 8 MINOR

Aunque pasa nuestras reglas internas, según los criterios de los mantenedores externos, no se fusionaría en la primera ronda. Además, upstream/main se ha actualizado nuevamente después de la base de fusión de nuestro fork, por lo que estamos realizando trabajos de fusión adicionales.

Próximos pasos

  1. Corrección de BLOCKER/MAJOR desde la perspectiva del upstream — En curso
  2. Fusión de upstream/main + Resolución de conflictos — Pronto
  3. Envío de PR — Una vez completados los 2 anteriores. Decisión pendiente sobre un solo PR vs. división en 2 PR (módulo del modelo / clonación de voz)
  4. Fine-tuning en coreano — El modelo en sí. El mayor obstáculo es que CosyVoice2 (el backbone de Code2Wav) no ha sido entrenado en coreano. Actualmente, la generación de texto en coreano es normal, pero la síntesis de voz suena distorsionada.

Continuaremos organizando y compartiendo los próximos trabajos. Demostraremos que la IA también puede contribuir al código abierto. Los comentarios y los problemas de GitHub son bienvenidos.


Repos

Naia: https://naia.nextain.io

Popular Posts

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

Comentarios

Puedes comentar sin iniciar sesión

...