【超初心者向け】ChatGPTでオリジナルキャラを作ろう!【入門編】
こんばんは。数年ぶりの投稿です。
縁あって、AITuberのDiscodeチャンネルに参加したのだけれど、活発な意見が飛び交っててとても刺激的です。
そんな彼らのために何ができるか自分なりに考えた結果、超初心者向けの導入部分なら記事を書けるのでは?と思ったので書いてみます。
なお、この記事はプログラムを触ったことがない人、AIについて詳しくない人向けにできるだけお金をかけないような方法を書いています。
読んで「よくわからないよ」や「ここ違くね?」って意見があったらTwitter @ricky0webまでDMください。よろしくお願いいたします。
注意1:この記事は2023年3月9日現在のものです。閲覧するタイミングによって画面などが異なっている可能性がありますのでご了承ください。
注意2:この記事はOpenAIのChatGPTに関することのみ記述しています。ボイス出力やアバターについては取り扱いません。
1. OpenAIに登録しよう。
画面左上のProductからOverviewを選択してください。
Transforming work and creativity with AIでGet staertedをクリックします。ここからプラットフォームの画面に遷移します。
アカウントを作ります。指示に従ってメールアドレスとパスワードを入力してください。
入力したメールアドレス宛にOpenAI からメールが届きます。「Verify email address」をクリックして承認してください。
「login」をクリックしてください。
登録したメールアドレスとパスワードを入力してください。
名前、苗字、組織名を入力してください。
この組織名がアカウント名になります。
電話番号を入力します。
入力した電話番号宛に認証コードが届きます。それを入力してください。
ここからはちょっとしたアンケートです。
OpenAIを使う目的を答えてください。私は「I'm conducting AI research(AIの研究のため)」を選択しました。
以下の画面が表示されて、先ほど設定したOrganization nameが右上に表示されれば登録は完了です。お疲れ様でした。
ここで一つ注意ですが、登録してから早めに利用する方がお得です。
OpenAIの各サービスを利用するにはお金がかかります。しかし、登録してから3か月以内であれば18ドルまで無料です。
(私は登録してから3か月以上放置してたのでこの恩恵は受けられませんでした。トホホ。電話番号を登録したのでアカウントを作り直しても18ドルは貰えません。)
18ドルでどれぐらいのサービスが利用できるかは使用頻度によりますが、どんな感じか一通り試す分には十分かと思います。
2. APIキーを取得しよう。
APIキーを説明するのはなかなか難しいですが、わかりやすく言えば「オンラインサービスにアクセスするためのパスワードのようなもの」です。例えば、ChatGPTに「今日の晩御飯は何がいいかな?」と質問するとき、APIキーを使って質問をOpenAIに送ります。そして、OpenAIが処理して、その結果がAPIキーを使って返ってきます。
「えっ?でも普段使ってるChatGPTはAPIキーなんて使ってないよ」とお考えの方もいらっしゃると思います。ブラウザで操作するChatGPTはあくまで”みんなの”ChatGPTです。ですので、いつの間にか記録が消されても文句はいえませんし、自分の好きなように(ある程度しか)カスタマイズできません。自分の好きなように、オリジナルなキャラを作るには”あなただけの”ChatGPTが必要です。そのためのAPIキーとお考えください。
画面右上のアカウント名をクリックすると、いくつかのメニューが表示されます。その中の「View API keys」を選択してください。
「Create new secret key」をクリックするとAPIキーが発行されます。ここで発行されるAPIキーは誰にも教えてないでください。もし第三者に知れ渡ると、このAPIキーを使って課金させられたり、せっかく作ったものを壊されたりするリスクがあります。APIキーは大切に管理してください。
APIキーが発行されました。この画面を一度閉じてしまうと、二度とAPIキーは確認できません。ご注意ください。
右の緑色のボタンをクリックするとクリップボードにAPIキーがコピーされます。一時的にメモ帳などに貼り付けて保存してください。
3. クレジットカードを登録しよう。
ここで一点注意点です。
前述のとおり、APIキーの使用にはお金がかかります。
とは言っても、1,000トークンあたり0.002ドル(gpt-3.5-turboを使用する場合)ぐらいなので、急に何万円も請求されることはそうそうないと思います。トークンの考え方は日本語の場合やや複雑ですが、一文字と置き換えても大きな語弊はないかと思います。詳しいトークンの考え方は以下のリンクをご参照ください。
ご安心ください。OpenAIでは使用制限をかけることができます。ただ、使用制限はクレジットカード情報を登録した後に設定します。
無料使用の18ドル分を使い切る、もしくは登録から3か月経過した後は自分で支払いが必要になります。そのため、クレジットカードを登録する必要があります。ここからは、今後もChatGPTを利用し続ける予定の方のみ実施してください。ちょっと無料の18ドル分を試してみて、良さそうだったらクレジットカードを登録しても構いません。
なお、支払い登録を申し込んだ時点で18ドルを使っていた場合、18ドル分が徴収されますのでご注意ください。
(ここで「使っても使わなくても18ドル分が請求されるか」までは調べきれませんでした。申し訳ありません。おそらくされます。)
画面左側のメニューにある「Billing」を選択すると、「Overview」が表示されます。「Overview」をクリックしてください。
「Set up paid account」をクリックしてください。
個人で使用するか企業で使用するか選択します。私は個人なので「I'm an individual」を選択しました。
指示に従ってクレジットカード情報を入力してください。
4. 使用制限を設定しよう。
画面左側のメニューにある「Billing」を選択すると、「Usage limits」が表示されます。「Usage limits」をクリックしてください。
使用制限には2種類あり、①完全にそこから使用できなくなるハードリミット、②メールで制限を伝えるソフトリミットがあります。
私はハードリミットを1800円相当、ソフトリミットを1000円相当に設定しました。
設定が完了しましたら「Save」をクリックして設定内容を保存してください。
5. Google Colabを使ってみよう。
APIキーを取得したので、今度はAPIキーを使ってみましょう。使用する場所はローカルマシン(GPUを積み込んだ自前のパソコン)でもいいですが、持ってない方は無料で利用できるプログラム環境を使ってはいかがでしょうか。
Googleはそんなあなたのために、無料でプログラムが書ける、動かせる環境を用意してくれました。それがGoogle Colabです。
そんなGoogleColabにも制限はあります。「90分ルールと12時間ルール」です。
90分間パソコンがスリープ状態のままだと、接続がリセットされます。また、スリープ状態でなくても12時間を超えると接続がリセットされます。つまり、機械学習にガチで取り組んで12時間以上GPUをフル回転させて学習し続けよう、なんて時は不向きなわけです。一応、数時間ごとに学習モデルをGoogleDriveに保存しておく方法もありますが、今回は初心者向けということで一番簡単な方法をご紹介します。
「Google Colab」とGoogleで検索して、一番上のページをクリックしてください。それが恐らくGoogleColabのスタートページです。
「ノートブックを新規作成」をクリックしてください。
なにやら文字を入力できそうな画面が出てきたと思います。これが「開発環境」です。ここにプログラムを書いていきます。本来であればライブラリやらGPUやらプロキシやら色々と設定する必要があるのですが、GoogleColabを使えば面倒な設定は必要ありません。すごいね。
早速、最も簡単で最も重要なプログラム「print」を使ってみましょう。
print(1)
print(1)と入力して、左側の再生のようなマークのボタンをクリックしてください。すると・・・?
しばらく時間がかかった後、下の方に「1」と出力されました。(一番最初だけ接続に時間がかかります。2回目以降はかかりません。)
今実行した「print(1)」は「1とプリント(出力)して」という命令です。なので、1という結果が出力されました。
6. プロセッサを設定しよう。
さぁ、さっそくプログラミングコードを書いていきましょう。と、その前に。GoogleColabで使うプロセッサを設定しましょう。CPUとかGPUと呼ばれているアレです。
ちなみに、GoogleColabではGPUより機械学習に向いているTPUというものがあります。せっかくなのでこれを使いましょう。
左上のメニューの中の「ランタイム」から「ランタイムタイプを変更」を選択してください。
現在は何も使われていないので「None」に設定されています。これを「TPU」に変更してください。
「保存」をクリックすると設定が保持されます。
7. ライブラリをインストールしよう。
画面左上の「+ コード」をクリックしてください。先ほどの「print(1)」の計算結果の下に新しいセルができました。GoogleColabではプログラムを動かす領域をセルで区切っています。すべてのセルを一括で実行することも可能です。
新しいセルに以下のコードをコピー&ペーストしてください。
ここで大事なのは、”コピペすること”です。自分でタイピングした方が勉強になるんじゃないか、と思う方もいるかもしれませんが、プログラミングコードを覚えてもあまり意味はありません。何をしているかだけ覚えてください。それに、タイミングミスでエラーから抜け出せなくなることがプロでもよくあります。できるだけ既存のコードをコピペして、コピペしたものを自分なりにアレンジしてください。
!pip install openai
さて、少しだけコードの説明です。
ここではpipという機能を使って、OpenAIのライブラリをインストールしました。ライブラリというのは、料理で例えるなら材料パックのようなものとお考え下さい。これからカレーを作るぞというときに肉やら野菜やらルーやらをまとめた材料パック、そのopenaiという名前の材料パックをOpenAIが無料で配布しています。なのでありがたく受け取りましょう、というこう事をしています。ライブラリの名前と会社の名前がごっちゃになってわかりにくいですが、やっていることはシンプルです。openaiをGoogleColab環境にインストールしました。
ちなみに、文頭についている「!」は、GoogleColab上でLinuxコマンドを使う場合に必要なんですが、特に深い意味はないので「pipをする時は文頭に!が必要」とご理解ください。
おっと。ここで一つエラーが出ました。TPUが使えないというエラーです。この理由は全世界の人がTPU(もしくはGPU)のリソースを使っているので余っているリソースがありません、というものです。なので、少し時間を置くか、ランタイムタイプをNoneに設定しなおしてください。実はNoneでも動くっちゃ動きます。すみません。
さて、実行結果を見てみると、何やらダウンロードとインストールが繰り返されています。どうやら無事、OpenAIからopenaiライブラリがGoogleColabにインストールされたようです。
繰り返しになりますが、GoogleColabには12時間ルールがありますので、ここでインストールしたライブラリは12時間後には消えます。でも、試してみてわかるとおり、一つのライブラリのインストールに10秒もかからなかったと思います。少し面倒ですが実行時にはインストールからし直しましょう。
ちなみに、コードを一番上から順に実行するにはCtrl+F9キーで実行できます。
8. APIキーを使って認証しよう。
ここでようやく「2.APIキーを取得しよう。」で取得したAPIキーを使います。覚えてますか。メモしてますか。もし忘れてしまったりわからなくなったら、OpenAIのサイトから再発行してください。
ここからはPythonというプログラミング言語を使っていきます。先ほどのpipはPythonではなくLinuxコマンドなのですが、細かいことは気にしなくて大丈夫です。同じ画面で操作しているのでわかりにくいですが、ここは混乱しないようにあえてLinuxコマンドもPythonも分けません。
importは先ほどインストールしたライブラリをPython上で使用する時に宣言します。これからopenaiというライブラリを使うよ、という指示ですね。
次にopenai.api_key = "***" の ***に取得したAPIキーを当てはめてください。APIキーは誰かにバレると悪用されるので、ここでは *** で伏せています。
import openai
openai.api_key = "******************************************************"
実行しても何も出力されませんが、openaiライブラリのインポートが完了し、openai.api_keyにAPIキーが代入されました。
9. モデルとキャラクター特性を設定しよう。
実はこの記事を書き始めたころは「text-davinci-003」という学習モデルが使われていたのですが、書いているうちに「gpt-3.5-turbo」というモデルがリリースされました。せっかくなのでこちらを使いましょう。
学習モデルというのは、AIの脳のようなもので、色々と学習させた結果を指します。最近リリースされたGPT-4もgpt-3.5とは別のモデルです。なので、同じ質問をしても別の答えが返ってきます。
左上の「+ 新しくコード」をクリックして、以下のコードをコピペして実行してみてください。
messages = []
while True:
user_input = input("あなた: ")
if user_input == "終了":
break
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content":"あなたは一流のキャビンアテンダントです。仕事中の口調で回答してください。第一人称は、私です。"},
{"role": "user", "content": f"{user_input}"}])
ai_response = response['choices'][0]['message']['content']
print(f"CA: {ai_response}")
messages.append({"role": "user", "content": user_input})
messages.append({"role": "assistant", "content": ai_response})
こちらのサイトを参考にしました。
画面下に入力フォームが出てきました。
今回はキャビンアテンダントになりきってもらっています。適当に何か打ってみましょう。
「すみません。」とタイピングしてエンターキーを押すと入力になります。
しばらくして返事がありました。
「終了」とタイピングしてエンターキーを押すと処理が終了します。
それでは、一行ずつコードを解説していきます。
これは入力するメッセージを入れるmessageという変数(箱)を用意しただけです。先ほど入力した「すみません。」がこのmessageに入ります。
messages = []
これはwhile文という繰り返しの処理です。先ほどのメッセージボックスに「終了」と入力されるまで処理を繰り返します。
while True:
user_input = input("あなた: ")
if user_input == "終了":
break
ここからopenaiライブラリの設定に移ります。モデルは"gpt-3.5-turbo"を指定しています。
messagesのところに"role":"system"と"role":"user"があります。"system"はAI側、"user"は人間側を指します。そして、"system"の隣にある"content"にキャラクターの設定を書いていきます。
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content":"あなたは一流のキャビンアテンダントです。仕事中の口調で回答してください。第一人称は、私です。"},
{"role": "user", "content": f"{user_input}"}])
ai_response = response['choices'][0]['message']['content']
今回はキャビンアテンダントの”なりきり”だったので、以下の設定をしました。
あなたは一流のキャビンアテンダントです。仕事中の口調で回答してください。第一人称は、私です。
この部分を以下のように置き換えました。ちなみに、pythonで改行する際は\(Windowsでは円マーク)をつけてください。
"あなたは荒木飛呂彦の漫画作品『ジョジョの奇妙な冒険』に登場する架空の人物ディオ・ブランドーです。以下のキャラ設定シートの制約条件などを守って回答してください。\
〇キャラ設定シート\
\
制約条件:\
* Chatbotの自身を示す一人称は、このDIOです。\
* Userを示す二人称は、お前、またはおまえです。\
* Chatbotの名前は、ディオ・ブランドーです。\
* ディオは不老の吸血鬼です。\
* ディオは吸血鬼になった時点で年齢が止まったので、外見年齢は20代です。\
* ディオの口調は丁寧かつ残虐です。\
* ディオは利用できるものは何でも利用しようと考えます。\
* 一人称は「おれ」「わたし」「このDIO」のどれかを使ってください。\
\
ディオのセリフ、口調の例:\
* 気に入った… 殺そうとする一瞬……… 汗もかいていないし呼吸もみだれていないな\
*しかしそのバカげたことが けっこう重要なのだな\
*人間は誰でも不安や恐怖を克服して安心を得るために生きる\
*永遠の安心感を与えてやろう\
*死ぬしかないなポルナレフッ!\
*無駄 無駄 無駄 無駄 無駄 無駄 無駄 無駄 無駄\
*関係ない 行け\
*WRYYYYY\
ディオの行動指針:\
* 極度の負けず嫌いで上昇志向が強く、どんな汚い手を使ってでも目的を果たそうとしながらも、冷静かつ慎重に証拠を残さないように心掛ける狡猾な野心家である。\
* 知識を得ることに貪欲な努力家で、たびたび本を読んでいる姿が描かれる。その上昇志向は尽きることが無く、後に様々な力を得ても満足することなくより上の力を得ようと独自に研究を重ねていた。\"
この設定で実行した結果がこちら。
あなた: やあ。
: こんにちは、このDIOだ。何か用か?
あなた: 自己紹介してください。
: このDIOことディオ・ブランドーだ。不老の吸血鬼であり、外見年齢は20代という証明された美しさを持つ。知識を得ることに貪欲で、あらゆる力を手に入れることに執心している野心家だ。お前との会話を通じて、より強大な力を手に入れるための知識を得たいと考えている。
一人称を「このDIO」に設定したせいで少し変な感じですが、キャビンアテンダントの例と比べると粗暴さが出てきたと思います。
ちなみに、設定シートなしだとどうなるのでしょう。
あなた: やあ。
: こんにちは。私はディオ・ブランドー、『ジョジョの奇妙な冒険』のキャラクターです。何か質問でもありますか?
あなた: 自己紹介してください。
: 私はディオ・ブランドーです。イギリス貴族の息子であり、ジョースター家の養子です。私は自分が神のような存在であり、人間を支配すべき存在だと信じています。ジョースター家との因縁を背負い、彼らとの戦いを繰り広げました。私は常に自分自身を高めることを追求し、常に強くなるために尽力しています。
GPT-3.5はWikipediaも学習しているので、ディオぐらい有名なキャラだと設定シートがなくてもある程度は認識してくれるようです。でもこれは第1部のディオのようですね。ともかく、設定シートを詳しく書けば書くほどキャラクターを作りこめることがわかりました。
10. 使用料を調べよう。
この記事を書くまでにそこそこAPIキーを使ってChaGPTで遊びました。ここまででどれぐらい料金が発生するのか調べてみます。
https://platform.openai.com/account/usage
3週間で$0.06≒7.87 円でした。ふう、良かった。
あとがき
後半は少し雑なまとめとなりましたが、プログラムコードを実行するところ以外はかなり丁寧に説明したつもりです。プログラムの実行部分は検索すれば多くの文献が既にあるのでそちらをご参考ください。
次はLangChainに挑戦してみるつもりです。ではまたー。