対象読者
- とりあえずOpenAIのAPIを呼び出して簡単なChatBot作りたい方向け
1.環境構築
- Intelij IDEA or Pycharm
https://footprints.link/articles/ja/n-machida/python-development-environment-using-intellij-idea - python: 3.12.2
2.APIキーの取得
下記記事を参考にアカウント作成とAPIキーを発行します。
https://nicecamera.kidsplates.jp/help/feature/ai-kata/openapi_apikey/
※ すでにアカウントを作成している場合、3ヶ月以上経っているとAPIキーの無料期間が過ぎているため、クレジットを購入しないとコードを実行しても429エラーになるので注意です。
エラー例
RateLimitError: Error code: 429 - {'error': {'message': 'You exceeded your current quota, please check your plan and billing details. For more information on this error, read the docs: <https://platform.openai.com/docs/guides/error-codes/api-errors.'>, 'type': 'insufficient_quota', 'param': None, 'code': 'insufficient_quota'}}
3.動くChatbot
環境構築とAPIキーを取得できましたら、下記サンプルコードを実行してみてください。
恐らく問題なければ対話形式で簡単なChatbotが動くはずです。
from openai import OpenAI
client = OpenAI(api_key="OPENAI_API_KEY")
messages = []
while True:
try:
user_input = input("You: ")
messages.append({"role": "user", "content": user_input})
res = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=messages,
)
messages.append(res.choices[0].message)
print("Assistant", res.choices[0].message.content)
except KeyboardInterrupt:
print("Exiting...")
break
結果
4. APIのパラメーターについて
OpenAIモデルのAPIドキュメントは以下になります。
https://platform.openai.com/docs/api-reference/embeddings/create
パラメータを使って色々試してみると面白いかもしれません。
res = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=messages,
n=3,
stop= ...
//
)
- model: AIのエンジンを指定する
- max_tokens: 生成するトークンの最大数 (デフォルト:16, 最大:2048)
- temperature: ランダムさ
- n: 生成する結果数
- stop: どんな単語が出現したら文章生成を打ち切るかを指定
5. Chatbotの性格を変えてみる
コードを少し変更してみて、Chatbotに性格を与えてみることにします。
from openai import OpenAI
import argparse
client = OpenAI(api_key="OPENAI_API_KEY")
def main():
parser = argparse.ArgumentParser(description="Chatbot")
parser.add_argument("--personality", type=str, default="親切で優しい", help="Personality of the chatbot")
personality = parser.parse_args()
messages = [{"role": "system", "content": f"あなたは会話型チャットbotです。性格は、{personality}です。"}]
while True:
try:
user_input = input("You: ")
messages.append({"role": "user", "content": user_input})
res = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=messages,
)
messages.append(res.choices[0].message)
print("Assistant", res.choices[0].message.content)
except KeyboardInterrupt:
print("Exiting...")
break
if __name__ == "__main__":
main()
ここで大事なポイントはmessagesに与えているroleです。
roleには3種類あり,
- system
- user(入力側)
-
assistant(チャットモデル)
を各メッセージに付与することで会話の流れを表現しています
- system は、AIアシスタントの設定を記述でき、AIに人格を与えるようなことができます。
- assistant はAIからの回答(出力)、 user はユーザーからの発信(入力)です。基本的には user として聞きたいことを送る形になります。
試しに、性格を与えたChatbotに挨拶してみましょう。
デフォルトの性格は、「親切で優しい」みたいです。
python chatbot.py
You: こんにちは!
Assistant こんにちは!いかがしましたか?お話しましょう!
次に、引数として性格を指定して実行してみます。
python chatbot.py --personality="卑屈"
You: こんにちわ!
Assistant あ、こんにちは...。どうも、ごきげんよう。
You:
ぼっちちゃんみたいですね。
おわりに
簡単に調べた程度の知識ですが
色々なモデルを試したり、roleの与え方次第でAIの口調を変えたり色々できそうですね♪