【Unity】ChatGPT+VOICEVOXでAIキャラクターを作るRTA
はじめに
こんにちは、2月に入社したカミオです。Unityエンジニアとしては2人目です!
ChatGPT触ってますか?
普通に使っても楽しいですが、テキストだけの会話だと味気ないですよね。
音声入力→音声返答が理想ですが、とりあえず音声返答ができれば味も出てきそうです。
RTAということで、「細かいことはいいから、とにかく手元で動くものが見たい!」
という方に向けた記事となっています。
新規UnityProjectの作成が完了したらタイマースタートです。
開発環境
- Windows11
- Unity 2021.3.2f1
- mochi-neko/ChatGPT-API-unity 0.5.0
- mikito/unity-voicevox-bridge 0.2.1
OpenAIのAPIキーを発行する
ChatGPTを自分のアプリで利用するためには、OpenAIのAPIキーが必要です。以下の記事に詳しい手順が書かれています。
https://laboratory.kazuuu.net/how-to-get-an-openai-api-key/
UnityでChatGPTを使う
ChatGPTのAPIを使用するには、リクエストを投げてレスポンスを受け取ってデシリアライズして......としなければなりませんが、RTAなのでショートカットを使いましょう!@mochi_neko_7さんが公開している、ChatGPT-APIのクライアントライブラリです。
https://github.com/mochi-neko/ChatGPT-API-unity
PacakgeManger の Add package from git URL で以下のURLを入力しAddを押します。
https://github.com/mochi-neko/ChatGPT-API-unity.git?path=/Assets/Mochineko/ChatGPT_API#0.5.0
そして以下のクラスを作成し、適当なオブジェクトにアタッチして再生します。
using Mochineko.ChatGPT_API;
using UnityEngine;
public class AICharacter : MonoBehaviour
{
const string APIKey = "OpenAIのAPIキー";
const string RolePrompt = "語尾に「にゃん」をつける";
async void Start()
{
var connection = new ChatCompletionAPIConnection(APIKey, new SimpleChatMemory(), RolePrompt);
var response = await connection.CompleteChatAsync("こんにちは", default);
Debug.Log(response.Choices[0].Message.Content);
}
}
こんな感じのログが出れば成功です。
RolePromptを書き換えることで、口調や性格を指定できたりします。(プロンプト職人の腕の見せ所)
VOICEVOXのインストール
VOICEVOXは、テキストから音声を合成できる無料ソフトウェアです。最近YouTubeやニコニコ動画などでよく利用されていますね。
今回はVOICEVOXを使用してChatGPTの返答を読み上げてもらいましょう。
以下のサイトからインストールしてください。
https://voicevox.hiroshiba.jp/
インストールが終わったらアプリを起動しておきます。
UnityでVOICEVOXを使う
VOICEVOXのエンジンはHTTPサーバーなので、HTTP APIが使えます。APIということはリクエストを投げてレスポンスを受け取ってデシリアライズして..................
と、面倒なのでショートカットを使います(RTA)
@mikito0521さんが公開している、VOICEVOXクライアントライブラリです。
https://github.com/mikito/unity-voicevox-bridge
PacakgeManger の Add package from git URL で以下のURLを入力しAddを押します。
https://github.com/mikito/unity-voicevox-bridge.git?path=Assets/VoicevoxBridge/
AICharacterクラスでVOICEVOXを使って読み上げできるように修正します。
using Mochineko.ChatGPT_API;
using UnityEngine;
using VoicevoxBridge;
public class AICharacter : MonoBehaviour
{
[SerializeField] VOICEVOX voicevox;
const string APIKey = "OpenAIのAPIキー";
const string RolePrompt = "語尾に「にゃん」をつける";
const int SpeakerId = 1; // ずんだもんの声
async void Start()
{
var connection = new ChatCompletionAPIConnection(APIKey, new SimpleChatMemory(), RolePrompt);
var response = await connection.CompleteChatAsync("こんにちは", default);
var message = response.Choices[0].Message.Content;
Debug.Log(message);
voicevox.PlayOneShot(SpeakerId, message);
}
}
VOICEVOXコンポーネントをアタッチし、AICharacterに渡しておきます。VOICEVOXのAudioSourceは勝手に追加されるので、空で問題ないです。
再生し、ChatGPTの返答が読み上げされれば成功です。
(読み上げされない場合、VOICEVOXアプリが起動されているかどうか確認)
SpeakerIdを変更すれば他のキャラクターの声にもできます。
まとめ
VOICEVOXによる読み上げが確認できたところでタイマーストップです。APIキーの発行やVOICEVOXのインストール時間にもよりますが、Unityでの作業は5分程度で完了しました。
多分これが一番早いと思います。
完走した感想ですが、ライブラリ様々ですね。
これをきっかけにAIキャラクターに手を出す人がいてくれれば幸いです。
よいAIライフを......