- Apple Silicon上でSwift/MLXにより実装されたPersonaPlex 7Bモデルが、リアルタイム双方向音声対話をサポート
- 従来のASR→LLM→TTSという3段階の音声パイプラインを1つのモデルに統合し、テキスト変換なしで音声入力と出力を直接処理
- **4ビット量子化(quantization)**によりモデルサイズを16.7GBから5.3GBに削減し、68ms/step(RTF 0.87)でリアルタイムを上回る処理速度を達成
- MimiオーディオコーデックとDepformer構造を活用し、音声品質の劣化なしに効率的なストリーミングを実現
- Swiftネイティブ環境でサーバーなしに動作し、音声アシスタント・対話型エージェント開発の基盤技術として重要
qwen3-asr-swiftとPersonaPlex 7Bの統合
- qwen3-asr-swiftライブラリがApple Silicon上でNVIDIA PersonaPlex 7Bを統合し、**双方向音声対話(full-duplex speech-to-speech)**機能をサポート
- 入力音声をリアルタイムに処理しながら、同時に応答音声を生成
- ASR、TTS、多言語合成機能を含む統合音声処理ライブラリへと拡張
- モデルは4ビット量子化された5.3GB版として、Hugging Faceの
aufklarer/PersonaPlex-7B-MLX-4bitで提供
従来の音声パイプラインの単一化
- 従来の音声アシスタントはASR → LLM → TTSの3段階構成で、各段階で遅延(latency)と感情表現の損失が発生
- PersonaPlexはこれを単一モデルに統合し、**音声トークン(audio tokens)**を直接処理
- **17本の並列ストリーム(12.5Hz)**で音声をリアルタイム変換
- KyutaiのMoshiアーキテクチャをベースに、18種類の音声プリセットとロールベースのシステムプロンプトをサポート
モデル構造と変換
- 元の16.7GB PyTorchチェックポイントをMLX最適化safetensorsへ変換
- 変換スクリプト(
convert_personaplex.py)が重みの分類、4ビット量子化、プリセット抽出、Hugging Faceへのアップロードを自動処理
- Temporal Transformer(70億パラメータ)とDepformerをともに4ビットへ圧縮
- Depformerは段階ごとの重み切り替え(MultiLinear)構造を用いて2.4GB → 650MBへ縮小
- 品質劣化なしで3.7倍の容量削減
音声処理パイプライン
- Mimi Encoder/Decoderを通じて24kHz音声を16個のコードブックトークンへ変換
- Temporal Transformerがユーザー・エージェントの音声ストリームを統合処理
- Depformerが16段階でエージェント音声トークンを生成
- Mimi Decoderがこれを再び24kHz音声へ復元
- Mimiコーデック、KVキャッシュ、RoPE、SwiGLU、RMSNormなど既存TTSモデルの構成要素をそのまま再利用
システムプロンプトと対話制御
- PersonaPlexはテキストベースのシステムプロンプトで対話スタイルを制御
- プロンプトがない場合、モデルが話題から逸れたり冗長に応答したりする
- CLIまたはAPIでassistant、customer service、teacherなどのプリセットを選択可能
- 同じ質問でも、プロンプトの有無によって応答品質が大きく変化
性能とリアルタイム処理
- M2 Max(64GB)環境で68ms/step、RTF 0.87を記録し、リアルタイムを上回る処理速度を達成
- 80msのフレーム予算(12.5Hz)内で安定動作
- ASR、TTS、Speech-to-Speechを1つのライブラリ内で統合テスト可能
- E2E検証ではASRを通じて応答音声を再びテキスト化し、話題の一貫性を確認
ストリーミングと最適化
respondStream() APIが2秒単位の音声チャンクをリアルタイム生成
- **AsyncThrowingStream<AudioChunk>**形式で即時再生が可能
- 主な最適化は4点:
- eval()統合によるGPU同期の削減
- Bulk audio extractionによるデコード効率の向上
- Prefill batchingによる初期段階の並列処理
- Temporal transformerのコンパイルによる450回以上のMetalカーネル呼び出しの最適化
--compileフラグまたはmodel.warmUp()でカーネル融合を有効化可能
実行とデプロイ
- GitHubリポジトリ: ivan-digital/qwen3-asr-swift
swift build -c releaseでビルド後、CLIコマンドでASR、TTS、Speech-to-Speechを実行可能
- 初回実行時には約5.3GBのモデルダウンロードが必要
- MLXフレームワークベースで、PythonやサーバーなしのSwiftネイティブ環境で完全動作
技術的意義
- Apple Siliconのユニファイドメモリ構造とMetalアクセラレーションを活用し、高性能音声モデルのオンデバイス実行を実証
- 単一モデルベースのリアルタイム音声対話の実装により、AIアシスタント・コールセンター・教育向け音声インターフェースなど幅広い応用可能性を確保
- NVIDIA、Kyutai、Alibaba Qwen、FunAudioLLM、Apple MLXなど複数のオープンソースエコシステムの統合成果として評価される
1件のコメント
Hacker News の意見
このプロジェクトは本当に気に入った。以前 PersonaPlex を Blackwell デバイスで動かそうとして失敗したが、今回は Mac で試してみるつもり
音声エージェントをかなり長く扱ってきた立場から、いくつか注意点がある。VAD→ASR→LLM→TTS パイプライン でも RTT が 1 秒未満ならリアルタイムのように感じられる。自分のプロジェクト ova、それから voice-agent、parakeet.cpp のような例が参考になる
PersonaPlex コミュニティと話してみると、完全な full-duplex 構成は精度や性能の面でまだ難しく、学習も厄介だという。一方で ASR→LLM→TTS 構成はモジュール式なので、小さな LLM と大きな LLM、ローカルと API ベースのエンドポイントを自由に組み合わせられる柔軟性がある
従来の STT→LLM→TTS 構成は、ツール呼び出し、高度なコンテキスト管理、RAG などと相性がいい。人と直接会話するエージェントと内部のサブエージェントを分離して レイテンシ と コンテキスト負荷 を減らす方式がうまく機能している
full-duplex 構成の方がよりダイナミックに感じられるが、実際に音声エージェントへどう統合するかはまだうまく見えていない。Discord で意見交換してみたい
qwen3-asr-swift が ASR、TTS、PersonaPlex を 1 つの Swift パッケージにまとめているので、必要な構成要素はすでに揃っている。PersonaPlex は 低レイテンシのバックチャネル と自然なターンテイキングを担い、別の LLM がツール呼び出しを実行する
問題はこの 2 つの オーケストレーション だ。いつ「脳」が「口」を上書きするべきか、PersonaPlex が未検証の答えを自信ありげに話さないようにするにはどうすべきか、ツールの結果が既存の発話と衝突したときにどう処理するかは、まだ未解決の課題だ
このプロジェクトは興味深いが、個人的には 7B ローカルモデル にツール呼び出し機能があればよかったと思う。現バージョンは単に wav ファイルを入力として受け取る proof of concept レベルだ
文章の LLM 的な書きぶり があまりに人工的に感じられて、プロジェクトの品質が疑わしく思えた
M1 Max MacBook でデモを動かしてみたが、応答に 10 秒以上かかり、内容も的外れだった
もちろん特定用途では役立つかもしれないが、そのあたりはもっと学びたい
この技術はかなり 危険そうに見える。関連記事: The Guardian の報道
以前見た Sesame が最高の full-duplex デモだった。今はどうなっているのか気になる(リンク)
自分は whisperKit のファンだ。最近 TTS 機能 が追加されて、さらに良くなった。話者分離(speaker diarization) とユーザー定義辞書にも対応している
1 台のデバイスで 4 つのモデルを同時にリアルタイム動作させた負荷テストもある:
テスト動画
自分の携帯電話が迷惑電話をこのモデルに 自動転送 して、偽の個人情報をゆっくり流し込みながら天気やスポーツの話を混ぜるシステムを作りたい
PersonaPlex を アウトバウンドコール用にファインチューニング しようと試みている。Kyutai/moshi-finetune の LoRA 方式を適用したが、スケーリング係数を 5 に上げないと動かず、他の部分が壊れてしまう
GPT-5.3 Codex がコードレビュー中に 話者 A/B が逆になっている と指摘したので、データセットを再生成しているところだ。
自分の GitHub(runvnc) に moshi-finetune と personaplex のバージョンがあり、Gradio アプリ でデータ生成と学習ができる。まだ使えるレベルの結果は出ていない
自分は MacWhisper をよく使うが、Whisper Large v3 Turbo モデルは悪くないものの レイテンシ が蓄積していく。オンライン LLM で後処理すると品質は良くなるが速度が遅い
モデルリンク, FluidAudio GitHub
Discord コミュニティも活発で、VAD, TTS, EOU のような最新機能についての議論も盛んだ