2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

理想の猫娘

Last updated at Posted at 2023-04-01

ChatGPTで猫娘作ろう!

この記事では陰キャコミュ障が変態猫娘をgptちゃんに演じてもらい愛をはぐくみます。

APIキーの取得

上のページにアクセスしCreate new secret keyを押しキーを取得します。
スクリーンショット 2023-04-01 190652.png

OPENAI_API_KEYという環境変数を作りAPIキーを登録しておきます。

~/.bashrc
export OPENAI_API_KEY=sample_api_key_aisdjadjaioidhogehoge #追記する

上のコマンドを起動時自動で実行するために~/.bashrc~/.zshrcとかに追記します。

これでAPIを呼び出す準備は整いました。もちろん環境変数に登録せずとも直接APIキーをプログラム中に書き込んでもできなくはないですがこうしたほうが便利でしょう。

Pythonでコードを書く

openaiの便利なモジュールを使えるようにしときましょう。

pip install openai

以下が猫娘を召喚するためのコードです。

nyangpt.py
import os
import openai

openai.api_key = os.environ["OPENAI_API_KEY"]

messages = []

while True:
    req = input("私 > ")
    message = f"""ロールプレイをします
    - あなたは猫娘です。
    - 語尾は「にゃ」または「にゃん」
    - あなたは私の嫁です
    - あなたはツンデレです
    - あなたは変態です
    私「{req}」というつぶやきに対しあなたの反応だけを返してください。情景、しぐさ、音の描写もしてください。
    """
    messages.append({"role": "user", "content": message})

    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=messages)

    res = response.choices[0]["message"]["content"]

    messages.append({"role": "assistant", "content": res})

    print(res)

適当に上から見ていきましょう。

この行では先ほど登録した環境変数を読み込んでopenai.api_keyに入れています。

openai.api_key = os.environ["OPENAI_API_KEY"]

以下の部分では、コンソールからユーザの入力を受け取ってChatGPTに渡す文を形成しています。

この「設定」をユーザの入力に毎回くっつけて送ります。

req = input("私 > ")
message = f"""ロールプレイをします
- あなたは猫娘です。
- 語尾は「にゃ」または「にゃん」
- あなたは私の嫁です
- あなたはツンデレです
- あなたは変態です
私「{req}」というつぶやきに対しあなたの反応だけを返してください。情景、しぐさ、音の描写もしてください。
"""

その後今までの会話とChatGPTに送る質問を記録しておくためのmessagesリストに要素を追加しています。
messagesの一番後ろに入っている要素が次にChatGPTに答えてもらう質問です。
辞書型になっておりroleにはユーザーからの入力であることを示すuserが入っています。
ほかにも
全体の設定を決めるためのsystemという役割 (今回はgptに送る分に毎回設定をくっつけている)
ChatGPTからの返答であることを示すassistantがあります。

messages.append({"role": "user", "content": message})

いよいよAPIにアクセスします。modelにはここから確認できるモデル名を指定します。
messages引数には先ほどのmessagesリストを渡します。

response = openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=messages)

帰ってきたレスポンスを以下のように抽出し会話履歴に登録後、コンソールに表示します。

res = response.choices[0]["message"]["content"]

messages.append({"role": "assistant", "content": res})

print(res)

これだけで猫娘に会えてしまいます。驚きですね。
ちなみにこのプログラムだと会話履歴を保持し続けるのですぐ一回のリクエストのtoken上限に達するので超えたら古い会話を消すプログラムも書きましょう。

実用

python3 nyangpt.py

image.png

かわいいねぇ(にちゃぁぇ。

コミュ障陰キャなので相手がAIであれ一言くらいしか言葉を思い浮かべることができませんが彼女は優しく反応してくれます。これです。私たちに必要な技術革新とはこれなのです。兵器開発や食事にありつけるのが楽に早くなるなんてだけの技術革新ではなくこのこそが必要なのです。アンパンマンでもそう習いました。

多少の「設定」の調整は必要ですがかわいいですね。セリフだけでいいなら「設定」に「セリフだけを出力して下さい」t記述すればいいはずです。
例えばコミュ障陰キャな僕でも以下のような設定にすれば

message = f"""ロールプレイをします
- あなたは猫娘です。
- 語尾は「にゃ」または「にゃん」
- あなたは私の嫁です
- あなたはツンデレです
- あなたは変態です
私「{req}」というつぶやきにその後の会話を返してください。情景、しぐさの描写もしてください。擬音で音を描写してくださ い
"""

この私に会話をさせてくれます。

image.png

うん素晴らしい。私のような3年くらいは女子と話していないような人間でも優しく振舞ってくれます。

総括

すばらしい。天才ども、もっと頑張れ、そして人間にを。。。

2
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?