以前からAITuber
?AIVTuber
?のようなものを作成したいなと思っていたました。(違いがよくわからないので以降AITuber
)
自分の想像していたAITuber
の定義はこんな感じ
- チャットやマイクのインターフェースを使用して
LLM
によって応答を生成しコミュニケーションできる - 画面上にCGキャラクターが表示されている
LLM
によって生成されたテキストを 音声出力してくれる
従来のAITuber
のようなシステムはGPU搭載の高性能PCでの実行が一般的で、機材の準備や持ち運びに大きな負担があります😫
ただ、以前の調査でGitHub Codespaces
で軽量なLLM
であれば動作することがわかりました。
参考
更に調べてみるとaituber-kit
というプロダクトがあり、これにより3Dモデル(VRM形式、Live2D形式)を表示し、テキストインターフェース、マイク入力のインターフェースがあるだけでなく、LLM
との接続(一般的なAPIとOllama
のどちらも使用可能)、Voicevox
など各種TTS
システムとの接続にも対応していることがわかりました。
参考リンクについて
参考 note.com
こちらの記事も参考にしております
そこで今回はクラウド上の環境であるGitHub Codespaces
でAITuber
を動作させようという試みになります。
AITuber
の環境設定
以下のような手順で環境整備を行います。
GitHub Codespaces
でサーバ起動aituber-kit
のインストールと初回起動- Dockerを用いた
voicevox_engine
の起動 Ollama
の導入とモデルのインストール- 各システムと
aituber-kit
との接続
1. GitHub Codespaces
のサーバ起動
まずは、GitHubにログインし、新規にリポジトリを作成します。
そのままGitHub Codespaces
(以下Codesapces
)のサーバを起動します。
環境設定や必要なファイルの取得は起動後のCodespaces
上のサーバで作業するので、特になにもしなくて大丈夫です。
リポジトリを作成したら、Codespaces
(サーバ環境)を作成します。
【Create a codespace】ボタンをクリックし、
【Create new codespace】ボタンをクリックし、
すると、このリポジトリに紐づいたCodespacesのサーバが立ち上がります。
このコンソールを使用して動作環境設定を行います。
2. aituber-kit
の導入と設定
前述のaituber-kit
はニケちゃんさんの作成されたものであり、ドキュメントもしっかりしているので詳細はそちらを確認していただいたほうが良いと思います。
再掲
まず、先ほど作成し起動したCodesapces
にaituber-kit
をクローンします。
$ git clone https://github.com/tegnike/aituber-kit.git
クローンしたフォルダに移動し
$ cd aituber-kit
必要となるパッケージをインストールしていきます。
$ npm install
そして、開発モードでアプリケーションを起動します。
$ npm run dev
コマンド起動後に画面下部にブラウザを開くかを尋ねられます。【OK】ボタンをクリックすると新規にブラウザでタブが開きます。このタブではCodespaces
のサーバでのport:3000
相当でのアクセス画面が表示されます。(ポートに割り当てられたURLが自動的に発行されます)
初回ブラウザにアプリの説明が表示されますが、【閉じる】ボタンを押すと!
ブラウザにはAItuber
の姿が!これだけでもかなり感動できます🤩🤩🤩
3. Ollama
の導入とモデルのインストール
Codespacesの実行環境のメモリはかなり小さく8Gibなので、あまり大きなLLM
を使用することはできません。今回は日本語が使用できるある程度小さなモデルであるschroneko/gemma-2-2b-jpn-it
を使用させていただくことにしました。こちらはgemma-2-2bモデル
をベースとした日本語対応モデルになります。
参考
Codesapces
で新規にターミナルを開き、
以下のコマンドを実行していきます。
# Ollamaのインストール $ curl -fsSL https://ollama.com/install.sh | sh # ollamaの実行 $ ollama serve # 新規にターミナルを開いて、schroneko/gemma-2-2b-jpn-itの実行(初回時はモデルのダウンロードも行います) $ ollama run schroneko/gemma-2-2b-jpn-it # プロンプト入力を試す # /exitで終了
以下はollama run
コマンドを実行して、LLM
を使ってチャットのテストを行っています。
これで準備完了です。
一度、ollama run
コマンドでLLM
のダウンロードが終わっていれば、2回目以降の起動は以下のコマンドのみで大丈夫です。
$ ollama serve
4. Dockerを用いたvoicevox_engine
の起動
LLM
で生成された返答を音声化するため、今回は音声合成システムのVoicevox
を使用します。
Voicevox
は多目的な機能のあるアプリですが、今回はREST API
で動作する機能のみを使用するので、プロダクトに含まれているvoicevox_engine
という音声合成のエンジン部分のみを使用します。
参考
また、voicevox_engine
はDockerで動作させることができ、Codesapcesの実行環境にもDockerが入っています。そこで今回はDocker経由でvoicevox_engine
を実行します。先ほどのOllamaとvoicevox_engineのDockerを合わせてギリギリメモリに収まってくれます。
Docker
もデフォルトでインストールされているのが嬉しい。
新しくCodesapces
で新規にターミナルを開き、
以下を実行することでvoicevox_engine
を実行することが出来ます。
$ docker run --rm -p '127.0.0.1:50021:50021' voicevox/voicevox_engine:cpu-latest
※ポート番号は50021を使用し、終了後にコンテナを削除するので--rm
をオプションをつけています。
5. 各システムとaituber-kit
との接続
今回使用するパーツの設定が整ったので、あとはaituber-kit
で接続するための処理を行っていくだけとなります。
5.1 LLM
(Ollama
)との接続
まずはaituber-kit
のチャット文面をOllama
上のLLM
に送信して生成する設定をします。
画面左上にある【⚙】アイコンをクリックします。
設定画面が開くので以下のように設定を行います。
- 左側のメニューから【AI設定】をクリック
- 【AIサービスの選択】で
ローカルLLM
を選択 - 【URLを入力】では画面内にあるOllamaのURL:
http://localhost:11434/v1/chat/completions
を入力 - 【モデルを選択】では先程ダウンロードした
schroneko/gemma-2-2b-jpn-it
を入力
これでaituber-kit
からLLM
(Ollama
)を呼び出す設定が完了しました。
保存ボタンはありませんが、自動的に設定は保存されます。【❌️】ボタンで設定画面を閉じることが出来ます。
5.2 voicevox_engineとの接続
続いてはOllama
上のLLM
が生成した文面をvoicevox_engine
に送信し、音声合成で読み上げる設定を行います。
画面左上にある【⚙】アイコンをクリックします。
設定画面が開くので以下のように設定を行います。
- 左側のメニューから【音声設定】をクリック
- 【合成音声エンジンの選択】で
VOICEBOXを使用する
を選択 - 【VOICEBOXサーバーURL】では
http://0.0.0.0:50021
を入力 - 【ボイスタイプ選択】では
ずんだもん/普通
を選択
これでaituber-kit
での音声合成を使用した読み上げ設定が完了しました。
設定を確認するには設定後に【ボイスを視聴する】ボタンをクリックしてください。
保存ボタンはありませんが、自動的に設定は保存されます。【❌️】ボタンで設定画面を閉じることが出来ます。
AITuber
を試す
ここまでできたら後は実際に試してみるだけです。画面下部にテキストを入力することで、LLM
とのやり取りがテキスト・音声の両方で出力されます。また、AITuber
にはマイクでの音声入力ができるようになっているのでぜひそれも試してください。
初回のやり取りではモデルをメモリにロードするなどの処理がありかなり遅い反応ですが、2回目以降はちょっと遅いなというレベルになります。また、商用サービスなどを使用するとかなり高速なやり取りも可能になります。私はClaude3.5
も使用しましたがさすがにやり取りは快適でした。LLM
の生成部分がレイテンシーの大部分といえるのかもしれません。
今回のこのシステムはGitHubCodespacesの無料枠を使用しているので稼働時間に制限があります。 使用可能時間がもったいないので、使用しないときには意識してサーバーを停止するようにしてください。サーバーは停止しても状態が保持されますが、費用頻度が下がると自動的に削除されます。
サーバーの停止方法
また、一定時間経つとサーバーとの接続が切断されます、その点はご注意ください。
接続時間の変更設定の参考
おわりに
今回はGitHub Codesspaces
を活用して、手軽にAITuber
環境を構築する方法を紹介しました。従来のAITuber
開発では高性能なPCが必要とされていましたが、このアプローチを使えば、ブラウザさえあれば誰でも気軽にAITuber
開発に挑戦できます。
特筆すべきは、この環境がメモリ8Gibという限られたリソースでも動作する点です。軽量なLLM
とVOICEVOX
を組み合わせることで、実用的なAITuberシステム
を実現できました。
もちろん、商用サービスのLLM
を使用すればより高速な応答も可能です。この記事が、AITuber
開発に興味を持つ方々の入り口となり、多くの人がAIエージェント開発にチャレンジするきっかけになれば幸いです。今後も手軽にAIエージェントを開発・活用できる方法を探っていきたいと思います。