Naia
· luke

Live-Gespräche mit KI in meiner eigenen Stimme, auch auf dem privaten PC! MiniCPM-4.5-omni erfolgreich auf vLLM-omni portiert

[voice-ainaia-osminicpms2svllm-omnisttttsllmopensource]

Gemini 3.1 Flash Live-Unterstützung + MiniCPM-o 4.5 vLLM-Herausforderung — Naia OS' S2S Echtzeit-Sprach-KI-Entwicklung Danach konnte ich eine Weile keine Updates für den Blog posten.

In der Zwischenzeit ist einiges passiert. Nextain hat den Betrieb eines koreanischen christlichen Portals (www.onmam.com) übernommen und Unterstützung bei der KI-Anwendung zugesagt. Zudem wurde Naia für ein koreanisches Regierungsprojekt ausgewählt, wodurch unsere Dienste an Fahrt gewinnen konnten. Es sieht so aus, als könnten wir bald echte Naia-Avatare präsentieren, anstatt nur die Standard-Avatare von Vroid Hub.

Am Ende des letzten Beitrags schrieb ich, dass ich dachte, die Situation würde sich nächste Woche entspannen, da wir uns einige Grafikkarten ausleihen würden – dieses Versprechen können wir nun endlich einlösen. In einer Umgebung mit zwei RTX 3090-Karten haben wir die erste Funktionsprüfung abgeschlossen: MiniCPM-o 4.5 wurde auf vllm-omni portiert, mit dem Naia-Client verbunden und für Echtzeit-Englischgespräche mit Audio-Referenz (Voice Cloning) verifiziert.

Übrigens: Wir sind die Ersten, die MiniCPM-o 4.5 auf vllm-omni implementiert haben, und es gibt auch im Ausland Leute, die neugierig sind, wie weit wir gekommen sind. Es gab zwar einen Versuch von jemand anderem im Upstream-Issue > #1182, dieser wurde jedoch nie gemergt, und wir haben unsere Arbeit auf einem separaten Track vorangetrieben. Es funktioniert bereits auf einem akzeptablen Niveau, und wir sind nun dabei, es so aufzubereiten, dass es von einem Upstream-Maintainer akzeptiert werden kann.

Warum MiniCPM-o 4.5 das Ziel war

Wie ich bereits im letzten Beitrag schrieb, aber um es noch einmal zusammenzufassen: MiniCPM-o 4.5 ist derzeit praktisch das einzige Omni-Modell, das eine Einzelperson mit einer einzigen RTX 3090 betreiben kann und das gleichzeitig Audio-Referenz (Voice Cloning) und Fine-Tuning ermöglicht.

  • GPT-4o / Gemini Live — Nur Cloud, Gewichte nicht öffentlich, kein Fine-Tuning möglich
  • Moshi — Open Source und exzellentes Vollduplex, aber hauptsächlich Englisch/Französisch + inaktive Community
  • Qwen3-Omni-30B — 30B, passt ohne Quantisierung nicht auf eine 24 GB Karte, und bei Quantisierung ist die Sprachausgabe fehlerhaft
  • MiniCPM-o 4.5 — 9B (Kombination aus Whisper-medium + Qwen3-8B + CosyVoice2 + SigLip2), läuft auf einer einzigen 24 GB Karte, Voice Clone mittels Audio-Referenz, und Fine-Tuning möglich

Die fehlende Unterstützung für Koreanisch ist jedoch derzeit ein Nachteil und gleichzeitig ein Bereich, in den wir uns einbringen können. Daher haben wir beim diesjährigen AI Champion-Wettbewerb unter dem Teamnamen „Remember You“ einen Vorschlag eingereicht, um vLLM-omni Koreanisch-Fine-Tuning durchzuführen und einen VTuber-Dienst mit Naia-Memory anzubieten. Für Dokpamo konnten wir uns nicht in der Kategorie „Inland“ bewerben, da kein Omni-Modell auf dem von uns gewünschten Niveau verfügbar war.

„Würde nicht jeder einen KI-VTuber haben wollen, der sich auf dem eigenen PC an einen erinnert und mit der eigenen Stimme spricht?“ Um dies zu ermöglichen, halten wir die folgenden Technologien für notwendig und konzentrieren uns derzeit darauf.

  1. Omni-Modell, das lokal läuft — Nicht eine STT/LLM/TTS-Pipeline, sondern Speech-to-Speech End-to-End. Der Pipeline-Ansatz hat zu viel kumulative Latenz und Intonationsverlust. → MiniCPM-o 4.5
  2. Audio-Referenz (Voice Cloning)"Sprich mit dieser Stimme": Einmal vorgespielt, und die Konversation erfolgt in dieser Klangfarbe. → Spk_emb-basiertes Klonen von CosyVoice2
  3. Langzeitgedächtnis — Ein Speichersystem, das sich an den Benutzer erinnert und nicht bei jeder Sitzung zurückgesetzt wird. → Unser separat entwickeltes Naia Memory (4-stufiges, von der Neurowissenschaft inspiriertes Gedächtnissystem)
  4. Koreanisch — Die oben genannten drei müssen auf Koreanisch funktionieren, um im Alltag genutzt werden zu können. → CosyVoice2 Koreanisch-Fine-Tuning (AIHub-Datenbeschaffung abgeschlossen, sofortiger Start bei GPU-Unterstützung)

Und zusätzlich gibt es noch einen weiteren Track, den wir bald veröffentlichen werden: naia-sing — Sie können sich wahrscheinlich vorstellen, worum es geht. Bleiben Sie gespannt. Unten teilen wir auch eine tatsächliche Demo und weitere technische Details.

Demo 1 — Konversation im Naia-Client

Bitte entschuldigen Sie mein nicht so gutes Englisch im Demo-Video.

Dies ist ein Video, das Gespräche testet, indem MiniCPM 4.5-o auf vllm-omni portiert und mit der Naia-Desktop-App verbunden wird. Die Hardware besteht aus 2x RTX-3090 (2-Wege), bf16 ohne Quantisierung. Typisch für ein Omni-Modell (S2S, End-to-End Speech-to-Speech) bleiben der flüssige Gesprächsverlauf und die natürlichen emotionalen Ausdrücke vollständig erhalten. Derzeit werden Englisch und Chinesisch unterstützt.

Demo 2 — MiniCPM-o Demo-Seite + Audio-Referenz

Dies ist ein Fork der offiziellen MiniCPM-o 4.5 Demo-Seite, die mit dem vllm-omni-Backend verbunden ist. Er enthält ein Beispiel für die Funktion der Audio-Referenz (Voice Cloning). Beim Hochladen einer WAV-Datei wird die Antwort mit der Klangfarbe und Intonation dieser Stimme synthetisiert. Auf Serverseite wird durch einen SHA-256-Key-LRU-Cache die Neuberechnung derselben Referenz vermieden, sodass nach der ersten Antwort kaum zusätzlicher Overhead entsteht.

Zusammenfassung der Implementierung

Wir haben an drei Repositories gearbeitet.

RepoRolle
nextain/vllm-omnivllm-omni Fork — MiniCPM-o 4.5 Modellmodul + Thinker→Talker→Code2Wav 3-Stufen-Pipeline + Hinzufügung von Voice Clone (session.update.ref_audio)
nextain/MiniCPM-o-Demo-forvLLM-omniFork der offiziellen PyTorch-Demo — Hinzufügung des backend=vllm_omni-Modus, direkte Eingabe/Verifizierung der vllm-omni-URL auf der Audio-Duplex-Seite möglich
nextain/naia-osNaia Desktop-App — Hinzufügung des MiniCpmOConfig.refAudio First-Class-Feldes, AudioContext → 16 kHz Mono → base64 WAV-Encoder im Browser (Tauri WebView)

Der Naia-Client verbindet sich direkt mit vllm-omnis /v1/realtime (OpenAI Realtime API-kompatibel), ohne ein Demo-Gateway zu durchlaufen. Über WebSocket wird PCM16 16 kHz Audio gestreamt und Antworten werden als 24 kHz Mono PCM16 empfangen. Die gesamte Arbeit wurde mit Claude Code durchgeführt. Dazu gehören Modellcode, Stage-Konfigurations-YAML, stage_input_processor, Demo-Backend-Proxy, Naias TypeScript-Client + WAV-Encoder + Vitest.

  • Naia wird derzeit komplett überarbeitet. Ein Teil von Naia-os wird voraussichtlich eine Backend-Struktur mit einem flexiblen CLI als naia-agent erhalten und soll mit Naia-memory und Naia-ADK kombiniert werden.

Aber der AI-Slop ist noch da

Im vorherigen Beitrag schrieb ich: „Das Ziel dieser Arbeit ist die Realisierung eines KI-nativen Open-Source-Ökosystems, ein Experiment, um zu ermöglichen, dass KI ohne ‚AI Slop‘ korrekt zu Open Source beitragen kann.“ Dieser Teil ist immer noch der schwierigste, und bei der abschließenden Überprüfung sind erneut Probleme aufgetaucht. Da ich dies jedoch so schnell wie möglich teilen wollte, habe ich diesen Beitrag verfasst, bevor ich diese Probleme gelöst habe.

In den letzten Tagen habe ich andere KI-Agenten viermal als adversarische Reviewer eingesetzt. In der ersten Runde gab es 2 BLOCKER + 13 MAJOR. Einer davon war eine offensichtliche Falschaussage, wie "Beispiel-Client funktioniert nicht — Backend ist audio-eingabebasiert, aber textgesteuert geschrieben." In der zweiten Runde gab es 1 MAJOR (Beispiel verwendet audioop aus der stdlib, das in Python 3.13 entfernt wurde). In der dritten und vierten Runde gab es einen Clean Pass. Unsere Regel (2 aufeinanderfolgende Clean Passes) wurde erfüllt. Aber ich habe es nicht dabei belassen und es noch einmal aus der Perspektive eines vllm-project Maintainers laufen lassen, und es ist immer noch dasselbe.

  • 3 BLOCKER:
    • Änderung der Cross-Cutting-Invariante (Whitelist→Blacklist) in chunk_transfer_adapter.py für eine einzelne Modellfunktion
    • prompt_len_override ist MiniCPM-o-spezifisch, befindet sich aber in der Shared Infra
    • chat_template_kwargs.ref_audio Seitenkanal verletzt Layer-Prinzip — es gibt einen First-Class-Feld-Präzedenzfall daneben
  • 5 MAJOR + 8 MINOR

Es besteht unsere internen Regeln, aber nach externen Maintainer-Standards wird es in der ersten Runde nicht gemergt werden. Hinzu kommt, dass upstream/main nach dem Merge-Base unseres Forks erneut aktualisiert wurde, und weitere Merging-Arbeiten sind im Gange.

Nächste Schritte

  1. Behebung von BLOCKER/MAJOR aus Upstream-Sicht — In Arbeit
  2. Merge von upstream/main + Konfliktlösung — Bald
  3. PR-Einreichung — Nach Abschluss der beiden oben genannten Punkte. Entscheidung über einen einzelnen PR vs. Aufteilung in 2 PRs (Modellmodul / Voice Clone) steht noch aus.
  4. Koreanisch-Fine-Tuning — Das Modell selbst. Die größte Hürde ist, dass CosyVoice2 (Code2Wav-Backbone) nicht auf Koreanisch trainiert wurde. Derzeit ist die koreanische Texterzeugung normal, aber die Sprachsynthese klingt fehlerhaft.

Die weiteren Arbeiten werde ich ebenfalls zusammenfassen und teilen. Wir werden zeigen, dass auch KI zu Open Source beitragen kann. Kommentare oder GitHub Issues sind willkommen.


Repos

Naia: https://naia.nextain.io

Popular Posts

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

Kommentare

Sie können ohne Anmeldung kommentieren

...