ずんだもんと対話するAIシステム開発記

今回の「移動中雑談Podcast:We Are On The Way」第9回目は、竹内さん(@rikson_en)が参加した会社の合宿イベントで取り組んだ「ずんだもん」と対話するAIシステムについての報告でした。

前回までRustやWebRTCなどの下準備を進めていた竹内さん、合宿での成果はどうだったのでしょうか?

AI患者役「ずんだもん」との対話システム

竹内さんが合宿で開発したのは、「オンライン模擬診療」のシナリオを想定したAI対話システムです。
医師役の人間が音声で質問すると、AIが患者(ずんだもん)役として応答します。
具体的には以下の処理フローです。

  1. 人間からの音声入力
    マイクで音声を拾い、ローカルで動かせるWhisper.cppを用いてSpeech-to-Text(音声→文字)変換。

  2. 対話生成(ChatGPT)
    テキスト化された質問をChatGPTに送り、プロンプトで指定したキャラクター「ずんだもん」の性格・口調で応答テキストを生成。
    「ずんだもん」は一人称が「僕」だったり、子供っぽく怒りっぽい設定を盛り込んでいます。

  3. 音声合成
    ChatGPTの応答テキストを「ずんだもん」公式音源を使ってVoicevoxで合成音声化。

  4. 結果出力
    合成音声をスピーカー(または仮想マイクなど)を通じて再生し、人間はヘッドホンやスピーカーでずんだもんの「声」を聞くことができます。

成果と課題

成果:

  • 基本的な対話ループを実装できたこと。
  • 実際に、ずんだもんが「僕、熱があるのだ」などと個性的な口調で応答する様子が確認できたこと。

課題:

  • Whisper.cppを使った日本語の音声認識精度が低く、不安定な対話につながった。
  • 本来はWebRTCでのオンライン音声入出力を想定していたが、合宿内では安定した実装に至らず、ローカル環境での物理的なマイク・スピーカー運用に留まった。
  • スピーカー音をマイクが拾うことで、ずんだもんが延々と自分の声に反応してしまうなど、ハウリング的な問題が発生。

なぜ「ずんだもん」?

「ずんだもん」は、もともとVoicevoxなどで提供されている公式キャラクター音源。子供っぽい声と特異な口調で人気があり、オリジナルの性格設定をプロンプトでChatGPTに与えることで、よりキャラクター性豊かな応答を生成できる点が魅力でした。

合宿での学び

合宿ではチームメンバーの協力もあり、以下のような学びが得られたそうです。

  • C++やRust、GStreamer、Voicevox、ChatGPTといった異なる技術スタックを組み合わせる難しさ
  • 音声認識・生成とリアルタイム通信(WebRTC)の融合の難易度
  • チーム内で問題点を協力して解決するプロセスの重要性

合宿期間中は完全な完成形には至らなかったものの、竹内さんは大きな達成感を得ていました。

次のステップ

竹内さんは、今後この対話システムをWebRTCと統合し、オンラインで実際に人間がブラウザ越しに「ずんだもん」と話せる環境を整えたいと語っています。また、Whisperの日本語精度や音声処理の安定性向上、エコー・ループバック問題の解決など、改善の余地は多々あります。

将来的には模擬診療だけでなく、教育やトレーニング、バーチャルアシスタントなど、さまざまな領域で応用可能な技術になるかもしれません。

まとめ

今回のエピソードは、技術的な挑戦の生々しい報告でした。合宿でのトライアルは100%成功したわけではありませんが、Rust・音声合成・チャットAI・仮想マイクといった多様な要素を組み合わせ、ある程度の成果を出せたことは素晴らしい一歩です。

次回以降、竹内さんのシステムが更に進化し、本格的なWebRTC対応や精度向上が実現するかもしれません。ぜひ引き続きチェックしてみてくださいね。