AI / ML Technology

Unityで対話できるAIキャラクターを作る(4)

AI / ML
スポンサーリンク

どうも。前回から2か月近く経ってしまいました、Reveです。
4回に分けて書いてきた「AIで対話できるキャラづくり」もいよいよ大詰め。今回は、肝心の「AI(ChatGPT)による対話内容の生成」に入っていきます。

ChatGPTのAPIを有効化

まずはChatGPTをUnityなど外部アプリケーションで使うため、API(OpenAI API)のユーザー登録をします。
ChatGPTのサイトにアクセスして、右上の”Sign up”を押すことで新規アカウントを作成します。登録はメールアドレスのほか、GoogleアカウントやMicrosoftアカウントも使えます。

次に、OpenAI APIのアカウント管理からAPIキーの作成に進みます。
APIキーは、「+Create new secret key」を押すと作成画面が出るので、名前を入れて(任意)からボタンを押すことで作れます。なお、APIキーは作成した瞬間しか確認できないので、絶対に表示されたAPIキーを忘れずメモしておきましょう。

管理画面でもAPIキーに含まれる英数字全ては見えません

なお、OpenAI APIの初回登録時に18ドル分のクレジットが自動的に付与されます。有効期限は3か月で、期限切れか18ドル分使い切ると無料枠が終わります。
ただ、1回のアクセスで数セント位しか消費しないので、ガンガン使い倒すくらいでちょうどいい印象でした。

UnityでChatGPTを動かす

APIにアクセスするクラス

続いてUnityからOpenAI APIの回答を取得できるよう、APIアクセス用のクラスを作成します。今回はねぎぽよしさんが作成したクラスをお借りしました。

ChatGPT APIをUnityから動かす。|ねぎぽよし
こんにちは。 先日AIエージェント開発の技術解説記事を書いて「今後ChatGPTライクのAPIが出てきた瞬間に進化すると思う」という話をしたのですが… まさか3日後にChatGPT APIが出てくるとは思いませんでした。 というわけで今回はUnityからChatGPT APIを叩く方法について書いてみます。 ...

このクラスはUniTaskを利用しているため、クラスの導入前にUniTaskをインストールしておきます。以下のURLを参照して、パッケージマネージャーから入れておきます。

GitHub - Cysharp/UniTask: Provides an efficient allocation free async/await integration for Unity.
Provides an efficient allocation free async/await integration for Unity. - GitHub - Cysharp/UniTask: Provides an efficient allocation free async/await integrati...

GPTからの回答のキャラ付け

APIを叩くことで回答は取得できますが、そのままでは如何にもAIといった無機質な回答しか得られません。

ChatGPTはこれまでに無いほど自然な回答を返してくれる事で急速に利用者が増えましたが、「プロンプト」と呼ばれる指令や条件設定によってキャラクターを「注入」することで、さらに回答の語彙や口調を理想のキャラクターに近づけることができます。

汎用プロンプト - ChatGPT用キャラ口調設定Wiki
ChatGPTに送信するプロンプトは英語の方が記憶力が良くなるらしい。*1キャラ名はXXXと表記し、適宜置換を行っていく。各項目ごとに設定する部分はYYYと表記する。※2023/5/1微修正汎用プロンプトと和訳...

APIでも同じ事は可能で、プロンプトを作成してあらかじめAPIにPOSTすることでキャラクターを覚えさせます。そんな訳で、キャラクター設定とChatGPTからの回答を得るためのクラスを作りました。

プロンプトは「Context」というプロパティに出力されますが、この中身が一部フィールド(変数)になっていて、値を入力することで色々なキャラクターを演じさせる事が出来ます。フィールドの役割は以下の通りです。

  • character:キャラクター名
  • firstperson:自分自身の呼び方
  • secondperson:相手の呼び方
  • personality:性格
  • numletter:文字数制限
  • endings:語尾
  • phrases:セリフの一例

APIにプロンプト(Context)を送信した後は、変数openAIApiKeyに作成したAPIキーを入れたうえで、以下の流れでChatGPTからの回答を取得します。

  1. SetUserMessage(string)で質問を変数messageに設定
  2. RequestChatGPT()を実行して回答をリクエスト
  3. ChatGPTからの回答を入力にして、OnRequestSuccessに登録されたイベント関数(VoicePeakの音声出力)を実行
テキスト入力にSetUserMessageをセット
ボタンにRequestChatGPTをセット
GPTへのリクエスト成功時にVoicePeakの音声出力を実行

VoicePeakの音声出力については、ControlVoicePeakクラスのIVoicePlayer.Play(string)で処理しています(以下を参照)。

なお、今回は「邪神ちゃんドロップキック」の主人公「邪神ちゃん」に合わせた性格付けをしています。

Unityで実行

設定が完了したらエディタで実行してみます。質問を入力欄に書いてからボタンを押すと、回答をしゃべります。

今までの4記事を組み合わせて作ったものがこちら。

【Unity】巷で流行りのChatGPTで邪神ちゃんエーアイ!を作りましたの 【VOICEPEAK 邪神ちゃん】 #邪神ちゃんを喋らせるんですの
生成した回答(セリフ)も表示するようにしています。

上記動画の制作経緯は、アニメ・邪神ちゃんドロップキックの『邪神ちゃんVOICEPEAK コンテスト~邪神ちゃんを喋らせるんですの~』というコンテストが4月にあり、作ってみたくなったので、
VOICEPEAK無料版とChatGPTを使って動画を作りました。仕様は、
①ChatGPTに邪神ちゃんに関する質問を入力
②邪神ちゃんの性格を学習させたChatGPTが回答
③VOICEPEAKを使って邪神ちゃんの声で時々つっこむ
というもので、邪神ちゃんらしく面白おかしくできたと思います(*‘ω‘ *)
主催者が求めているもの/方向性が違うんだろうな…とは薄々感じてました… 結果は相変わらずの鳴かず飛ばず、どこにも引っ掛かりませんでしたが楽しかったからOK❣

4回に分けてUnityとChatGPT(OpenAI API)で対話できるAIキャラクターの作り方を書いてみました。
皆さんも好きなキャラクターでしゃべるAIを作ってみませんか?

タイトルとURLをコピーしました