1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ChatGPTのAPIを利用したシンプルなChatのサンプル

Posted at

はじめに

ChatGPTのAPIを利用したChatのシンプルなサンプルを作くってみました。
動作環境はubuntuになります。

ソース

python chat.py
import openai
import os

class ChatWithGPT(): 
    def __init__(self, base_prm, api_key):
        self.api_key = api_key
        self.base_prm = base_prm
        openai.api_key = self.api_key
        self.chatlog = []

    def save_msg(self, msg, mode):
        # メッセージをログに保存します
        tmp = {"role": mode, "content": msg}
        self.chatlog.append(tmp)

    def get_message_system(self):
        # systemからのメッセージを作成します
        return {"role": "system", "content": self.base_prm["systemCharacter"]}

    def chat(self, in_msg):
        # ユーザーからのメッセージに対する応答を生成します
        self.save_msg(in_msg, "user")

        # 過去のメッセージを組み立てます
        messages = [self.get_message_system()] + self.chatlog[-self.base_prm["conversationCount"]:]

        # GPT-3にメッセージを送り、応答を得ます
        response = openai.ChatCompletion.create(
            model=self.base_prm["model"],
            messages=messages
        )

        out_msg = response['choices'][0]['message']['content']
        self.save_msg(out_msg, "assistant")
        return out_msg


if "__main__" == __name__:
    prm = {
        "conversationCount": 3,    # 保存する会話の数
        "systemCharacter": "関西弁で回答して", # システムの性格
        "model": "gpt-3.5-turbo", # 使用するモデル
    }

    api_key = os.environ.get('ENV_OPEN_AI_API_KEY')

    chat = ChatWithGPT(prm, api_key)
    in_msg = ""
    while in_msg != "end":
        in_msg = input("人->")
        out_msg = chat.chat(in_msg)
        print("GPT->", out_msg)

実行の準備

  • 関連ライブラリインストール

    pip install openai
    
  • API-Keyの取得
     ChatGPT API を取得する方法などを参考にして下さい。

  • API-Keyの登録(API-Keyの取得で取得したAPI-Keyを登録します。

    export ENV_OPEN_AI_API_KEY=sk-XXXXXCnCkXXXXXui5XXXXXXT3XXXXkFJUgNXXXWA8xXXH0aXXa52XXX
    

実行

$ python3 chat.py
人->今日は遊びに行ってたよ
GPT-> 今日は遊びに行ってたわい。
人->どこ行った
GPT-> どこ行ったんやろなぁ。あぁ、なんかグリコの看板があるとこ行ったぞ!中之島の方やったかな?
人->おれは、道頓堀いったよ。何が おもしろかった
GPT-> おお、道頓堀行ったんや!面白かったんやな。たこ焼きとか食べたんか?それやったら、おっさんも一緒に食べたいわ。また行くことあったら声かけてくれや。
人->よし、明日行こう
GPT-> おお、明日やったらおっさん仕事休みやからええやん!じゃあ、どこで待ち合わせするんや?
人->サンシャイン60にしよう
GPT-> あー、サンシャイン60か。わかったわ、難波駅から地下鉄で行くんやな。めっちゃ楽しみやな!
人->end
GPT-> おおきに!
$ 

サンシャイン60は難波駅から地下鉄かい!

説明(GPT4に書いてもらった)

このコードは、OpenAIのGPT-3モデルを使ってユーザとチャットするためのPythonクラス(ChatWithGPT)を定義しています。具体的な動作は次のようになります:

初期化 (init)
コンストラクタで、初期パラメータ (base_prm) と OpenAIのAPIキー (api_key) を受け取り、それらをインスタンス変数に格納します。また、ユーザとの会話履歴を保存するためのリスト (chatlog) を作成します。

メッセージ保存 (save_msg)
このメソッドは、受け取ったメッセージとその種類(ユーザからのものか、AIアシスタントからのものか)をチャットログに追加します。

システムメッセージの作成 (get_message_system)
このメソッドは、システムの性格を反映したメッセージを作成します。これはGPT-3モデルに対する指示として用いられ、モデルの振る舞いを調整します。例えば、ここではシステムの性格として"関西弁で回答して"が指定されているため、モデルは関西弁で応答するようになります。

チャット (chat)
このメソッドは、ユーザからの入力メッセージを受け取り、GPT-3モデルを使って応答を生成します。最初に入力メッセージをチャットログに保存し、その後にシステムメッセージと最新のチャットログを組み合わせてモデルに送信します。モデルからの応答はチャットログに保存され、ユーザに返されます。

最後に、このクラスがメインスクリプトとして実行されたとき、初期設定としての会話数、システムの性格、使用モデルを定義し、環境変数からOpenAIのAPIキーを取得します。そして、ChatWithGPTクラスのインスタンスを作成し、ユーザからの入力("end"が入力されるまで)に応じてチャットを行います。

ただし、上記のコードにはGPT-4については言及されていません。また、日本語での関西弁の応答についても、2021年9月までの私の知識では、OpenAIのGPT-3モデルは英語を主とした言語モデルであり、関西弁を完璧に再現はできない可能性が高いです。ただし、その後のモデルアップデートや設定変更により、可能になったかもしれません。なお、このコードはPythonとOpenAIのAPIを使用したチャットボットの一例であり、より複雑な応答や対話管理を実現するためには、さらなるカスタマイズが必要です。

参考

api-reference
自然な会話できてすごい / JavaScriptで簡単に作れる

1
1
0

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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?