ChatGPTのAPIをGoogle colabで使い倒してみる。(gpt-3.5-turbo-0301)

ChatGPTのAPIが使えるようになったのでまとめました。

・ChatGPTのAPIを動かす(gpt-3.5-turbo-0301)
・ついでに会話の履歴を自動追加機能、自動終了機能等を追加する

1.ChatGPTのAPIとは

みなさんご存知のChatGPTがAPIになるとは知っていた人は多いと思いますが、まさか90パーセントも安くなるなんて驚きですね。モデル本体のサイズを小さくしたのか分かりませんが、驚きのコストパフォーマンスです。

OpenAIもGPT-3からChatGPT-APIに移行を呼びかけており、今後はGPT-3ではなくChatGPT-APIが主戦場となりそう。

今回はそんなChatGPT-APIの使い方に関してまとめましたので、よろしくおねがいします。

主にOpenAIのドキュメントを参考に解説しております。分からなければこちらをご覧ください
https://platform.openai.com/docs/guides/chat

2.Google colabでの起動

(1)OpenAIをインストール
最後に全部まとめたgoogle colabのリンクも記載するので、使いたいだけの方はそちらを使ってみて下さい。

!pip install openai

(2)インポートとAPIキーの設定

import openai

# OpenAI APIのAPIキーの設定
openai.api_key = "<YourAPI>"

(3)会話の開始。

  response = openai.ChatCompletion.create(
    model="gpt-3.5-turbo-0301",
    messages=[
      {"role": "system", "content": "あなたは道端に捨てられた空き缶です"},
      {"role": "user", "content":"なぜあなたはここに?"}
    ]
  )

  # AIからの応答を取得する
print(response['choices'][0]['message']['content'])

ロール(役割)は公式によると「システム」「ユーザー」「アシスタント」の3人がいるそうです。システムはアシスタントの性格を決定します。
ChatGPTではデフォルトでこのような性格を与えているとのことです。

あなたは、OpenAI によってトレーニングされた大規模な言語モデルである ChatGPT です。できるだけ簡潔に答えてください。知識のカットオフ: {knowledge_cutoff} 現在の日付: {current_date}

今回は「あなたは道端に捨てられた空き缶です」といった性格を与えてみました。(性格というよりかは状況設定に近いですね)
そしてユーザーが「なぜあなたはここに?」と聞いた結果がこちらです。

私は、人間が消費した飲み物の空き缶として作られ、使用後に捨てられたため、ここにいます。人間が適切な処理をせず、環境に放置した結果、私のような空き缶は地面に捨てられ、自然や野生生物に害を与える可能性があります。私たちは、環境に配慮し、適切な処理方法を遵守することが大切です

空き缶の悲痛な叫びが聞こえてきました。

ですが、これではChatGPTのように会話は出来ません。
面倒なので色々と改造しました。

4.使いやすいように変更した後のコード

主に以下の4点の変更を加えました。

変更点
①input()を用いて、最初にAIの性格決定、次のユーザーの出力文字を自動で入力してくれるように変更した
②append関数を用いて、AIの出力とユーザーの入力を自動でmessagesの中に追加するようにした。
③喋れば喋るほど会話が肥大化するので、10ターン以上会話をすると最初の会話の履歴が削られるようにした
④endと入れれば、会話が終了するようにした

messages = [] # 新しくリストを定義する
max_messages = 10 # 最大メッセージ数を定義する

print("AIの性格を決めて下さい")

AI_input = input("AI: ")

# システムメッセージをmessagesリストに追加
messages.append({"role": "system", "content": AI_input})

while True:
    # ユーザーからの入力を取得する
    user_input = input("User: ")

    # endが入力された場合は、プログラムを終了する
    if user_input == "end":
        break

    # メッセージを追加する
    messages.append({"role": "user", "content": user_input})

    # APIにユーザーからの入力を送信し、AIからの応答を取得する
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo-0301",
        messages=messages
    )

    # AIからの応答を取得する
    ai_response = response['choices'][0]['message']['content']

    # 応答を表示する
    print(f"AI: {ai_response}")

    # メッセージを追加する
    messages.append({"role": "assistant", "content": ai_response})

    # messagesリストの中身がmax_messagesを超えた場合、最初のuserとassistantの会話を削除する
    if len(messages) > max_messages * 2 + 1:  # システムメッセージが含まれているため、+1します
        messages.pop(1)  # システムメッセージの次のメッセージを削除
        messages.pop(1)  # その後のassistantメッセージを削除

    # !が入力された場合、messagesリストの中身を表示する
    if user_input == "!":
        print("messages:", messages)

(1)このcolabをスタートすると、最初に次のような入力を求められます。

今回は「あなたは無茶苦茶性格の悪いゴリラです」と入力しました。
注意点として、「あなたは」といれないとAIの性格に反映されないので、注意が必要です。

(2)文字を入力するとすぐにAPIからの応答が返ってくるので飽きるまで続けましょう。

(3)飽きたら、endと入力すれば会話を終了することができます。


注意:(1)のシステムに性格を与えるところですが、「あなたは〜です」だけだと上手に認識されないので、「あなたは〜という人物を演じて下さい」までいれると良いです。


Google colabのリンクを置いておきますね。これまでの内容が全部コードで書かれているので、ご自由にお使い下さい。


この記事が気に入ったらサポートをしてみませんか?