概要
kmizuさん作のgpt-voice-chatを使って、Whisper APIとChatGPTにVOICEVOXを統合してずんだもんと音声で会話してみました。同ソフトはまだ概念実証的な段階で、動かすためにはコードを弄りながら調整が必要です。一方でChatGPTによって「魂」を与えられたずんだもんとの会話はとても刺激的で、未来を感じさせるものでした。この体験を多くの人に共有したいので、WSL2環境で動かした時のメモを残しておきます。
どんなことが出来るのか、まずはこちらの動画のデモを見てください。
うおおおkmizuさんのコードを使ってChatGPTとずんだもんの融合に成功したぞおおおおオレがずっと待ってた未来がきた!!!https://t.co/E0LGBgxJbV pic.twitter.com/8XiQsZbtyG
— べりんぐ (@_Bassari) March 19, 2023
ここでは以下の流れで「会話」が実現しています。
- 私の声がWhisper APIへ入力され、文字起こしが返ってくる
- 文字起こし結果がChat GPT APIへ入力され、返答が返ってくる
- 返答がVOICEVOX Engine のAPIへ入力され、音声起こしが返ってくる
- 音声起こし結果が再生される
図にするとこんなイメージです。
Chat GPTに比べるとWhisperはまだ知られていないかもしれませんが、Open AIが開発した音声認識モデルで、こちらもAPI利用が可能です。
whisperapi.com
調べるとChat GPT + Whisper + VOICEVOXの組み合わせには様々な方々がアプローチしているようです。
- Whisper API, ChatGPT API, VOICEVOXを使ってAIと会話する
- Whisper APIとChatGPT APIを使用して、超速で返答してくれるAIキャラクターを作ったよ! - Qiita
- ChatGPTを使ったAI音声対話システムを作ってみた - 佐藤百貨店
この仕組みを色んなものに統合して、生成モデルにキャラクラーの性格をうまいこと色付けすればキャラクターが身近にいる生活を相当なリアリティで再現できそうです。夢の世界が目の前まで来てるなと。本格的に特定のキャラクターに寄せるには独自にチューニングしたモデルを用意する必要がありそうですが、取り急ぎChat GPTでも一人称や語尾などの設定情報を付加することで十分それらしい会話は可能です。
好きなキャラクターに囲まれて暮らす「楽園」を実現するためのパーツは既に出揃っていて、後はどれだけ情熱と工夫を注げるかだけの段階まで来ているように思えます。
元々大好きだったVOICEVOXですが、こういう切り口でも広がりのある世界なのだと再認識しました。何かしら作っていきたい。(GPT統合以外にもクラウド対応とか)
環境
Host OS
$ver Microsoft Windows [Version 10.0.22621.1413]
(実は今回WSLでVOICEVOX(GUIアプリケーション)を動かすのと、簡単に音声入力/出力を扱うのにWSLgを使うためにWin11に上げました。ただ、VOICEVOX Engineのサーバサイド単体でも動かせるっぽいのでWSLg不要かも...)
github.com
WSL2
$wsl -l -v NAME STATE VERSION * Ubuntu-20.04 Running 2
このUbuntuに以下をインストールしてあります
- openjdk 17.0.6 2023-01-17
- sbt 1.8.0(以下を参考にインストール)
sbt Reference Manual — sbt のインストール
- VOICEVOX Linux 版 0.14.5
手順メモ
- wslの適当なディレクトリにkmizu/gpt-voice-chatをcloneする
以下から確認できます。
~/gpt-voice-chat$ cat api_key.txt [API Key]
- 同じくgpt-voice-chatをcloneしたフォルダ直下に、空ファイル[profile.txt]を作る。(取り敢えず動かす分にはprofile.txt自体不要なので、Main.scalaを弄ってつぶしてもよい)
gpt-voice-chat/Main.scala at master · kmizu/gpt-voice-chat · GitHub
- wsl側のcurl&VOICEVOXを使用する場合、VOICEVOXTalker.generateVoiceOnWindows()を使ってほしくないので、以下ファイルの分岐から[ || osVersion.contains("wsl")]を消します。(雑)
val succeed: Boolean = if(os.contains("windows")/* linuxへ流したいので消す*/ || osVersion.contains("wsl") /*ここまで*/) { generateVoiceOnWindows(encodedAnswer, output) } else if (os.contains("linux")) { generateVoiceOnLinux(encodedAnswer, output) }
gpt-voice-chat/VOICEVOXTalker.scala at master · kmizu/gpt-voice-chat · GitHub
ホスト側のWindowsで動いているVOICEVOXが使えれば望ましいのですが、以下の事情で利用しませんでした。
・wslからホスト側のWindowsのlocalhost(VOICEVOX)に何故かcURLが打てない
(【WSL2】WSL2側からホストのlocalhostで立っているAPIサーバーのAPIをcURLで叩く方法 - Qiitaのようにwsl側のIPアドレスを調べてそこへcURL打つようにしたのですが、VOICEVOXから反応がなくタイムアウトしました。アプリ側でlocalhostからしか叩けないようにしている??)
・筆者の不勉強によりWindows側のコマンドラインやcURLの仕組みがよく分からない
- gpt-voice-chatをcloneしたフォルダで以下コマンドを実行。これによってsbtがビルドと実行をやってくれます。
:~/gpt-voice-chat$ sbt "run voicevox"
ダブルクウォートのrun以降でargsを渡せるので、そこでエンジンとしてvoicevoxを指定しています。(voicepeakも選べます)
:~/gpt-voice-chat$ sbt "run voicevox" [info] welcome to sbt 1.8.0 (Eclipse Adoptium Java 17.0.6) [info] loading project definition from /home/hikitan/gpt-voice-chat/project [info] loading settings for project root from build.sbt ... [info] set current project to gpt-voice-chat (in build file:/home/hikitan/gpt-voice-chat/) Multiple main classes detected. Select one to run: [1] com.github.kmizu.gpt_voice_chat.GuiMain [2] com.github.kmizu.gpt_voice_chat.Main Enter number: | => root / Compile / selectMainClass 38s
「チャット開始です」が表示されたらマイクから声を吹き込んでみましょう。VOICEVOXから反応が得られたら成功です。
[info] running com.github.kmizu.gpt_voice_chat.Main voicevox チャット開始です
一先ずここまで来れば後は流れで動かせるのではないでしょうか(詰まった方&もっといいやり方あるよって方はご連絡ください~)