Suporte Gemini 3.1 Flash Live + Desafio MiniCPM-o 4.5 vLLM — O diário de desenvolvimento da IA de voz S2S em tempo real do Naia OS Desde então, não conseguimos publicar atualizações por um tempo.
Muita coisa aconteceu nesse meio tempo. A Nextain assumiu a operação do portal cristão coreano (www.onmam.com) e estava discutindo o suporte para a aplicação de IA, e o serviço Naia ganhou impulso ao ser selecionado para um projeto governamental coreano. Parece que poderemos apresentar os avatares reais do Naia, e não apenas os avatares padrão do Vroid Hub.
E no final do post anterior, eu havia escrito que a situação ficaria mais fácil, pois iríamos pegar algumas placas de vídeo emprestadas na semana seguinte, e agora finalmente conseguimos cumprir essa promessa. Concluímos a verificação inicial de funcionamento da portabilidade do MiniCPM-o 4.5 para vllm-omni em um ambiente com duas RTX 3090, conectando-o ao cliente Naia, incluindo conversação em inglês em tempo real e referência de áudio (clonagem de voz).
Para sua informação, fomos os primeiros a portar o MiniCPM-o 4.5 para o vllm-omni, e há pessoas no exterior curiosas sobre o progresso. Há uma tentativa de outra pessoa na > #1182 do upstream, mas ela nunca foi mesclada, e nós também seguimos uma trilha separada. Chegamos a um nível em que funciona razoavelmente bem, e agora estamos na fase de organizar o código para que seja aceitável pelo mantenedor do upstream.
Por que miramos no MiniCPM-o 4.5?
Como mencionei no post anterior, para resumir, o MiniCPM-o 4.5 é atualmente o único modelo omni que pode ser executado em uma única RTX 3090 por um indivíduo, e que permite referência de áudio (clonagem de voz) e fine-tuning simultaneamente.
- GPT-4o / Gemini Live — Apenas em nuvem, pesos não divulgados, fine-tuning impossível
- Moshi — Código aberto e excelente full-duplex, mas focado em inglês/francês + comunidade inativa
- Qwen3-Omni-30B — Como é 30B, não cabe em uma única placa de 24 GB sem quantização, e a saída de voz fica distorcida com quantização
- MiniCPM-o 4.5 — 9B (combinação de Whisper-medium + Qwen3-8B + CosyVoice2 + SigLip2), 24 GB, estamos acompanhando de perto. Roda em uma única placa, permite clonagem de voz por referência de áudio, e fine-tuning é possível
No entanto, a falta de suporte para o coreano ainda é uma desvantagem e algo em que podemos contribuir. Por isso, na AI Champion deste ano, submetemos uma proposta para realizar o fine-tuning em coreano do vLLM-omni e um serviço de VTuber usando Naia-Memory, sob o nome da equipe "Lembro-me de você". Não pudemos nos candidatar na categoria 'nacional' para o Dokpamo, pois não havia um modelo omni no nível que desejávamos.
"Quem não gostaria de ter um VTuber de IA que se lembre de você e fale com sua própria voz no seu PC?" Para tornar isso possível, acreditamos que as seguintes tecnologias são necessárias e estamos nos concentrando nelas.
- Modelo omni rodando localmente — Não um pipeline STT/LLM/TTS, mas speech-to-speech end-to-end. O método de pipeline tem latência acumulada e perda de prosódia muito grandes. → MiniCPM-o 4.5
- Referência de áudio (clonagem de voz) — "Fale com esta voz" Uma vez que você a ouve, a conversa ocorre com aquele timbre. → Clonagem baseada em spk_emb do CosyVoice2
- Memória de longo prazo — Um sistema de memória que não é reiniciado a cada sessão e que se lembra do usuário, estamos acompanhando de perto. → Naia Memory que estamos desenvolvendo separadamente (sistema de memória de 4 camadas inspirado na neurociência)
- Coreano — Os três itens acima precisam funcionar em coreano para uso diário. → Fine-tuning do CosyVoice2 em coreano (dados do AIHub garantidos, início imediato com suporte de GPU)
E, adicionalmente, há outra trilha que será revelada em breve. naia-sing — Acho que o nome já diz o que é. Fiquem ligados. Abaixo, compartilhamos uma demonstração real em funcionamento e mais detalhes técnicos.
Demonstração 1 — Conversa no cliente Naia
Por favor, desculpem meu inglês não muito bom no vídeo de demonstração.
Este é um vídeo que testa a conversa após portar o MiniCPM 4.5-o para vllm-omni e conectá-lo ao aplicativo de desktop Naia. O hardware é RTX-3090 ×2 (2-way), bf16 sem quantização. Estamos acompanhando de perto. Como é característico de um modelo omni (S2S, speech-to-speech end-to-end), o fluxo de conversa suave e as expressões emocionais naturais são preservados. Atualmente, suporta inglês e chinês.
Demonstração 2 — Página de demonstração do MiniCPM-o + Referência de áudio
Este é um fork da página de demonstração oficial do MiniCPM-o 4.5, conectado ao backend vllm-omni. Inclui um exemplo de funcionamento da referência de áudio (clonagem de voz). Ao fazer upload de um arquivo WAV, a resposta é sintetizada com o timbre e a entonação daquela voz. No lado do servidor, um cache LRU de chave SHA-256 evita o recálculo da mesma referência, resultando em quase nenhuma sobrecarga adicional após a primeira resposta.
Resumo da Implementação
Trabalhamos em três repositórios.
| Repositório | Função |
|---|---|
nextain/vllm-omni | Fork do vllm-omni — Módulo do modelo MiniCPM-o 4.5 + pipeline de 3 estágios Thinker→Talker→Code2Wav + adição de clonagem de voz (session.update.ref_audio) |
nextain/MiniCPM-o-Demo-forvLLM-omni | Fork da demonstração oficial do PyTorch — Adição do modo backend=vllm_omni, permite entrada/verificação direta da URL do vllm-omni na página audio-duplex |
nextain/naia-os | Aplicativo de desktop Naia — Adição do campo MiniCpmOConfig.refAudio de primeira classe, AudioContext → 16 kHz mono → codificador WAV base64 no navegador (webview Tauri) |
O cliente Naia se conecta diretamente ao /v1/realtime do vllm-omni (compatível com a API OpenAI Realtime), sem passar por um gateway de demonstração. Ele transmite áudio PCM16 16 kHz via WebSocket e recebe respostas em PCM16 mono de 24 kHz. Todo o trabalho foi realizado com Claude Code. Isso inclui o código do modelo, o YAML de configuração de estágio, o stage_input_processor, o proxy de backend da demonstração, o cliente TypeScript do Naia + codificador WAV + vitest.
- O Naia está passando por uma reformulação completa. Parte do Naia-os provavelmente se tornará uma estrutura com um backend CLI flexível como naia-agent, e está planejado para ser combinado com Naia-memory e Naia-ADK.
Mas o AI slop ainda...
No post anterior, escrevi que "o objetivo deste trabalho é a realização de um ecossistema Opensource nativo de IA, um experimento que visa tornar possível que a IA contribua corretamente para o código aberto sem 'AI slop'". Atualmente, essa parte continua sendo a mais difícil, e após a verificação final, novos problemas surgiram. No entanto, quis compartilhar isso o mais rápido possível, então escrevi este post antes de resolver esses problemas.
Nos últimos dias, executei outros agentes de IA como revisores adversários 4 vezes. Na primeira rodada, 2 BLOCKER + 13 MAJOR. Um deles era uma mentira óbvia, como "O cliente de exemplo não funciona — o backend é baseado em entrada de áudio, mas foi escrito como text-driven". Na segunda rodada, 1 MAJOR (o exemplo usa audioop da stdlib, que foi removido no Python 3.13). Na terceira e quarta rodadas, passou limpo. Nossas regras (2 limpos consecutivos) foram cumpridas. No entanto, não paramos por aí e executamos novamente sob a perspectiva do mantenedor do vllm-project, e os problemas persistem.
- 3 BLOCKER:
- Alteração do invariante cross-cutting (whitelist→blacklist) em
chunk_transfer_adapter.pypara funcionalidade de modelo único prompt_len_overrideé exclusivo do MiniCPM-o, mas está localizado na infraestrutura compartilhada- O side-channel
chat_template_kwargs.ref_audioviola a camada — há um precedente de campo de primeira classe ao lado
- Alteração do invariante cross-cutting (whitelist→blacklist) em
- 5 MAJOR + 8 MINOR
Embora as regras internas tenham sido aprovadas, sob os critérios de um mantenedor externo, a mesclagem não ocorreria na primeira rodada. Além disso, o upstream/main foi atualizado novamente após a base de mesclagem do nosso fork, e o trabalho de mesclagem adicional está em andamento.
Próximos Passos
- Correção de BLOCKER/MAJOR sob a perspectiva do upstream — Em andamento
- Mesclagem upstream/main + Resolução de conflitos — Em breve
- Submissão de PR — Após a conclusão dos 2 itens acima. Decisão sobre PR único vs. divisão em 2 PRs (módulo do modelo / clonagem de voz) pendente
- Fine-tuning em coreano — O próprio modelo. O maior obstáculo é que o CosyVoice2 (backbone Code2Wav) não foi treinado em coreano. Atualmente, a geração de texto em coreano funciona normalmente, mas a síntese de voz soa distorcida.
Organizaremos e compartilharemos os próximos trabalhos. Mostraremos que a IA também pode contribuir para o código aberto. Comentários e GitHub Issues são bem-vindos.
Repos
Naia: https://naia.nextain.io