はじめに
ChatGPTのAPIを利用したChatのシンプルなサンプルを作くってみました。
動作環境はubuntuになります。
ソース
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を使用したチャットボットの一例であり、より複雑な応答や対話管理を実現するためには、さらなるカスタマイズが必要です。