ChatGPT＋3Dモデルの音声対話エージェントを15分で開発する方法⚡️

先日、タイトルの件についてRTAをしました。

https://twitter.com/uezochan/status/1631611713802862593

その結果、だいたい2時間くらいで以下のようなChatGPT＋3Dモデル対話エージェントが完成しました。

https://twitter.com/uezochan/status/1631678673584807936

RTAではユーザーの話しかけに対する反応速度が遅くなっていたり（長文の読み上げ音声の生成＆ダウンロードに時間がかかっている）、そもそも2時間って結構大変だなーみたいなのがあるので、基本的に"Out-of-the-Box"で動くサンプルを公開しました。
この記事ではChatGPTとおしゃべりするまでの手順と、その次に進みたい（自らもっとカスタマイズしたい）方向けのTipsを説明したいと思います。

# 音声認識・音声合成・ChatGPTのAPIKeyの取得

まずはAPI Keyの類を準備します。音声認識・音声合成としてGoogle / Azure / Watsonのいずれかを準備してください。

- [Google](https://cloud.google.com/speech-to-text?hl=ja)
- [Azure](https://azure.microsoft.com/ja-jp/products/cognitive-services/speech-services)
- [Watson](https://www.ibm.com/jp-ja/cloud/watson-speech-to-text)

サービスにより設定手順が若干異なりますが、この記事では、APIKeyだけ設定すればOKかつスピードの速いGoogleを利用しますので、APIKeyを控えておきます。

次にOpenAIのAPIも利用できるようにして、APIKeyを控えておきましょう。

- [OpenAI API](https://openai.com/blog/openai-api)

# プロジェクトの準備

Unityを起動して3Dプロジェクトを作成したら、以下のライブラリをこの順番でインポートします。なおこの記事ではUnity2021.3 LTSを使用しています。

- [UniTask 2.3.3](https://github.com/Cysharp/UniTask/releases/tag/2.3.3)
- [OVRLipSync v29](https://developer.oculus.com/downloads/package/oculus-lipsync-unity/)
- [ChatdollKit 0.5.3](https://github.com/uezo/ChatdollKit/releases/tag/v0.5.3)
- [ChatdollKit Demo 0.5.3](https://github.com/uezo/ChatdollKit/releases/tag/v0.5.3)
- [Anime Girl Idle Animations Free](https://assetstore.unity.com/packages/3d/animations/anime-girl-idle-animations-free-150406)

読み込みが完了したら、`ChatdollKit/Demo`フォルダの中の`DemoChat`シーンを開きます。ここまでうまくいったら、出来上がりとしてはこんな画面になっていると思います。![スクリーンショット 2023-03-05 0.46.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/53296/7be3c807-9356-ad7f-557d-1f5ee7e06c13.png)

# ChatGTPデモアプリの設定

はじめに音声認識・音声合成の設定をしていきます。ヒエラルキー上で`ChatdollKit`を選択して、インスペクターの`Chatdoll Kit`にて`Speech Service`を選択してください。
するとAPIKeyや言語設定など必要項目が表示されますので、あわせて入力します。Googleの場合はAPIKeyのみ入力すればOKです。
![スクリーンショット 2023-03-05 0.47.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/53296/6b40cb7f-bc72-0c47-0183-a23686f25400.png)
また、`Chat GPT Skill`を探して、ここにOpenAIのAPIKeyを入力します。
![スクリーンショット 2023-03-05 0.50.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/53296/506b6d6b-e183-7754-0433-a831a544902f.png)

# 動作確認

なんと、もう設定完了です。それでは再生ボタンを押して「こんにちは」と話しかけてみましょう。「どうしたの？」と聞き返されてメッセージボックスに「Listening...」と表示されたら、そこからは好きなように会話してください。
![スクリーンショット 2023-03-05 0.56.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/53296/9bf3f360-76da-0617-8b6b-44211f5f49f6.png)
おつかれさまでした。おそらくここまで15分くらいでできたんじゃないかと思います。

とはいえ、これでめでたしめでたしになる方は少ないと思いますので、ここから先何がしたいか？を私なりに想像していかに「次のステップ」につながるTipsを書いていきたいと思います。

# プロンプトエンジニアリングを楽しむ

インスペクターでChatGPTSkillの`UserRole`、`AssistantRole`、`Condition`をいじることで、さまざまなプロンプトエンジニアリングができると思います。
この入力に応じて、`system`メッセージとしては以下の内容が送信されます。

```
[Roles]
user: {UserRoleの設定値}
assistant: {AssistantRoleの設定値}

[Condition]
{Conditionの設定値}
```

これらの値を変更することで、デフォルトの雑談エージェントではなくさまざまなタスクをこなせるようになったりとか、キャラクター設定や口調を変化させることができます。いろいろ試してみましょう！

# かわいい・かっこいい声に変更する

クラウドサービスの音声合成ではいまいち対話していて楽しくありません。VOICEVOXやVOICEROIDのサーバーを立てて、それに繋ぎましょう。

- [VOICEVOX](https://voicevox.hiroshiba.jp) 無料で利用できる音声読み上げソフト。キャラクターも充実！！

サーバーのたて方についてはネットで検索するかChatGPTに聞いていただくとして、ChatdollKitでのVOICEVOX利用方法は以下の通りです。
![スクリーンショット 2023-03-05 1.06.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/53296/75fb362c-7737-84c8-917d-aa4ccdef0263.png)
VOICEROIDも同じようにアタッチしてサーバーアドレスを入力すればOKです。

# 3Dモデルを変更する

ヒエラルキーからChatdollKitDemo（3Dモデルの女の子）を削除して、ご自身で用意されたVRMファイルを読み込んだらヒエラルキーに配置します。
その3Dモデルのオブジェクトをインスペクターの`Model Controller`の`Avatar Model`にセットしてから、メニューの`Setup ModelController`と`Setup Animator`を実行すればOKです。アイドルアニメーションを変更するには、3DモデルのAnimatorコンポーネントに設定されたコントローラーの`Default`ステートのものを修正してください。
![スクリーンショット 2023-03-05 1.16.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/53296/58423172-c711-ca1d-48fa-3196e18ad529.png)

VRoidなどで生成したVRMではない場合、実行時にエラーが発生する場合があります。その場合、以下の項目を見直して正しく設定してください。

- `Model Controller`の`Face`に、表情のシェイプキーが設定されたSkinnedMeshRendererを設定（基本的に顔のはず）
- `Model Controller`の`Blink`に、モデルのまばたきを制御するためのシェイプキーを入力
- `OVRLipSync Context Morph Target`に、表情のシェイプキーが設定されたSkinnedMeshRendererを設定（基本的に顔のはず）
- 上記の`Viseme to Blend Targets`に各音素のシェイプキーを設定。この辺はネットをみてください

以上、ChatGPT＋3Dモデルの音声対話エージェントのセットアップ方法と、その声と見た目、そして話し方や性格を等変更するためのTipsでした。

ずっとChatdollKitを使う必要もないと思いますので、慣れてきたらご自身でプラットフォームから作ってみるのも良いでしょう。

それでは、Enjoy AI Virtual Agent!