こんにちは、うにです!
2024年はブログ更新頑張るぞ!とか言いながら、すっかり更新が滞っておりました。
何をやっていたかというと、ChatdollKitでアバターをAIアシスタント化してみよう!という試みにはまっております。。
ChatGPTなど、LLMモデルのAPIを叩いてアバターにおしゃべりさせることってできないかな?と考えてみたときに、
見つけたうってつけの開発フレームワークが「ChatdollKit」。
これがまたすばらしい作りこみで、
デモ通り動かすまでならコード一切触らず、2時間もかからずできちゃいます。
デモ通りに動かしてみても「うわー!」という感じなのですが、拡張性の高さにも感動します。無料で公開されてるのすごいよ…
ということでまだまだ始めたばかりなのですが、初心者がChatdollKitを触ってみてつまづいたところ、追加で試してみたことをいくつか備忘録的に残しておきます。
という方の参考になりますとうれしいです。
(追記)カスタマイズを重ねて、最終的には机上に置ける
「デジタルフィギュア 兼 スマートリモコン 兼 おしゃべりAIアシスタント」
に進化しました。↓
ChatdollKitについて。AIアシスタント作成にぴったり
ChatdollKitとは?
ChatdollKitは、「お好みの3Dモデルを使って音声対話可能なチャットボットを作るためのフレームワーク」です。
開発者様にて公開されている各種パッケージ、マニュアルはこちら。
マニュアルから動画からデモ用シーンから、もう至れり尽くせり!
めちゃくちゃわかりやすいです。時々出てくるシグネットちゃんがかわいいんだなあ…
うにはUnityでほとんどスクリプトを書いたことがない人間ですが、
スクリプトの中身を触らなくてもUnity操作だけでおしゃべりまではできるようになっていて、初心者には大変入門しやすい設計でした。
自分で作るのはちょっとな~という方は、アプリとしてリリースされているものもあるみたいです!
ChatdollKit導入でつまづいたところ
インストール時のエラー
必要なパッケージを記載通りのバージョンでUnityにインポートしたけれど、エラーが多発…
■依存ライブラリ
■ChatdollKitのパッケージ
構文エラーばっかりがダーッと出てくる
エラー箇所を見に行ってみると、Unity2019.4.31にはサポートされていない記法が含まれている?みたい。
これだとエラー
using var streamRequest = new UnityWebRequest(
string.IsNullOrEmpty(ChatCompletionUrl) ? “https://api.openai.com/v1/chat/completions” : ChatCompletionUrl,
“POST”
);
以下に書き換えるとエラー解消
UnityWebRequest streamRequest = new UnityWebRequest(
string.IsNullOrEmpty(ChatCompletionUrl) ? “https://api.openai.com/v1/chat/completions” : ChatCompletionUrl,
“POST”
);
だいたい要領は分かったので、地道に直せばいけるかな?と少し頑張ってみましたが、
ボリュームがなかなかありそうだったので断念。
ということで潔く2021.3.34のUnityをインストールし、解決しました。
いっぱい入れたはずのアニメーションを実行してくれない
起動時に手は振ってくれるし、設定したIdleモーションも反映されているのに、
「会話の流れでアニメーションを実行してくれない」問題。
デバッグコンソールには「Animation waving_arm is not registered.」のメッセージ。
アニメーターにはちゃんと登録されてるのに…?
どこでアニメーションが紐づいているんだろう?と遡っていったところ、
RegisterAnimationという関数の中身をちゃんと定義してあげる必要があったみたいです。
\Demo\Scripts\Main.csに
public void RegisterAnimation(string name, Model.Animation animation)
{
animationsToPerform.Add(name, animation);
をみつけたので、この「Main.cs」をVRMChatdollkitにアタッチしてみたら解決しました。
文脈にあわせて踊ったり照れたり怒ったりしてくれます!愉快ですね。
リップシンクが動かない
実行したらおしゃべりもできるし、表情も変わるのに、
「リップシンクだけが頑なに動いてくれない」問題。
リップシンクに関係しそうなところを順番に確認したところ、
「U Lip Sync」の参照が違うオブジェクトになってしまっていたのが原因でした。
序盤に「ChatdollKit/Prefabs/ChatdollKit」をヒエラルキーに入れたらいいのか「ChatdollKit/Prefabs/ChatdollKitVRM」を入れたらいいのかでマゴマゴしてしまった影響で、
コンポーネントの値をコピペしたときに参照がずれてしまっていたみたいです。
あるあるですね。
(VRMモデルを使用している場合は「ChatdollKit/Prefabs/ChatdollKitVRM」を選べば大丈夫そうです)
追加で試してみたこと
Idle時とSleep時のモーションを設定
Main.csでIdle時のアニメーションを細かく設定できます。
この関数。
// Animation and face expression for idling
//modelController.AddIdleAnimation(new Model.Animation(“BaseParam”, 6, 10f));
ときどき姿勢を変えてくれたり、目線を外したりしてくれると一気に実在感がでて良い感じです。
同じくMain.csにsleep時のアニメーションを設定できる処理も用意されていましたので、
一定時間放置するとフワーと浮きながらループで回転しつづける感じにしてみました。
ときどき伸びをしたり、椅子に座ってウトウトしたりします。
初めてアニメーションクリップを自作しましたが、なかなか上手にできたのでは!
スッ…とsleepモードに切り替わる瞬間がお気に入りです。
天気を教えてくれる機能を追加
Assets/ChatdollKit/Examples/ChatGPT/FunctionSkills/WeatherSkill.cs
というダミーのサンプルコードが含まれていたので、これをベースにAPIで天気を取得する処理を追加して、ChatdollKitVRMのprefabにアタッチしました。
実装している方がおられたので参考にさせていただきました。
その他機能の追加
天気のFunctionSkill追加がうまくいったので、調子に乗って
を追加してみました。
素人工作もいいとこなのでコード公開は躊躇われるのですが…もう少し内容理解が深まったら別途記事にするかもしれないです。
ニュースを聞いてみたらこんな感じの会話になります。
(音声が出ます)
VOICECOX「雨晴はう」ちゃんのかわいい声で喋ってくれます!
「ずんだもん」他、クオリティの高い音声からイメージに合うものを選べます。
強制リロードボタンの追加
音声をうまくキャッチできない?か何かで、まれに会話が止まってしまうときがあります。
VisualStudioでデバッグ実行したりしているのですが、デバッグ時はなかなか再現せず、どこで止まっているのかよく分かりません…。
とりあえず暫定対策として、固まったときにエスケープできるようにReloadボタンを追加しました。
こちら参考にさせていただきました。
あんまり長い会話を記憶しておくような用途でもないので、
目下のところはこれでも十分かな~という感じです。
今後試したいこと
■スマホでの動作確認(Android端末を用意するところから…)
■QRコード・カメラ情報の取り込み
■別衣装の反映
■英会話対応
■リマインダー機能や自発的会話機能の実装(→実装済み)
■活動量計APIとの連携
■スイッチ制御機能の実装
などなど、やってみたいことポンポン出てきてたのしい!
まだまだ処理の全貌がよく掴めていないので、いろいろ魔改造しながら理解を深めていきたいです。
つづきはこちら!↓
まとめ
本記事では、好きなアバターでAIアシスタントをつくってみるにあたり、ChatdollKitを触ってみてつまづいたところ、追加で試してみたことをまとめてみました!
コーディングしたところは指示通りになるけど、プロンプト部分は指示通りになるとは限らないので、
いつも予想を少し超えた会話が生まれるのが楽しいです。
(さっき、晩御飯なににしようかな?と聞いたら「七草粥はどうかな?」と言われました。七草粥…?)
なにも分からないけどChatdollKit触ってみたい!という方の参考になりますと幸いです!
最後までお読みいただき、ありがとうございました♪