メインコンテンツへスキップ

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のリンクを置いておきますね。これまでの内容が全部コードで書かれているので、ご自由にお使い下さい。


     
     

    Nero

     
     
    Aimsales株式会社代表|東京AI祭 主催 |東大松尾研アントレ教育MACC所属|MS ,Google for Startup|元 Stability AI Japan|理科大4年(復学!!) コード書くのとAI触るのと営業など

    あなたへのおすすめ