Usagi-Chat

Discord のボイスチャットで人間と一緒に会話する AI Bot。VAD・音声認識・LLM・音声合成をすべてローカルで動かし、リアルタイムの音声対話を実現した。

公開日: 2026/06/30

  • Python
  • Silero VAD
  • Kotoba-Whisper
  • Ollama
  • VOICEVOX
  • Docker

Status: 研究中

Usagi-Chat は、Discord のボイスチャットに参加して、人間の発話に音声で応答する AI Bot。

テキストチャットの Bot はすでに作っていたが、「VC で普通に喋りかけたら返事をしてくれる」体験を作りたくて開発した。
音声認識から応答生成・音声合成まで、外部 API を使わずすべてローカル GPU で完結させている。
音声合成には VOICEVOX: 中国うさぎを使用した。

アーキテクチャとしては悪くなかったが、肝心の文字起こし性能が低かったため、まだあまり自然な会話になっていない。
また、そもそも選んだキャラが無口なキャラであるために活発な会話が成立しない場面も多かった。
もっと活発な、オタクくんに絡んでくるギャルみたいな娘を選ぶべきだったかも。

実装のポイント

  • リアルタイム音声パイプライン - ユーザーごとの PCM 音声を受信し、Silero VAD が 300ms の無音を検出して発話を確定。発話中も 1 秒ごとに Kotoba-Whisper で逐次文字起こしし、複数ユーザーを並列処理する。
  • 受信処理を軽く保つ - Discord の受信コールバックはフレームをキューへ渡すだけにして、重い処理は後段へ分離。Bot の再生中も受信と VAD は止めない。
  • 複数人 VC での振る舞い - VC に人間が 1 人なら全発話に応答し、2 人以上ならウェイクワード(「うさぎ」)を含む発話だけに応答。応答しなかった発話も会話履歴として LLM に渡すので、人間同士の会話の流れを踏まえた返事ができる。
  • 感情つき音声合成 - LLM から Structured Outputs で返答文と感情を受け取り、感情ごとに VOICEVOX の話速・ピッチ・抑揚を切り替えられる。感情なしモードとの推論時間比較もできるようにした。
  • 運用まわり - 会話内容・感情・各処理時間を SQLite に記録(生音声は保存しない)。CUDA や STT の依存はベースイメージに分離し、アプリ更新時のビルドを高速化。

← プロジェクト一覧へ