Pythonを使ってChatGPTを活用してみる

こんにちは。インフラグループDBチームのKです。

 最近何かと話題のChatGPTですが、以前AIのビジネスに関わっていたことがある私にはディープラーニング以来の驚きです。
ディープラーニングは深層学習と呼ばれるもので、自動で特徴量を抽出し学習していく技術であり、画像認識等様々な分野で大きな効果を出していました。

 ChatGPTは自然言語技術を用いたAIになり、まるで人間のように振る舞い、対話や文章を生成することができます。
ベースは大規模言語モデル(LLM:Large Language Models)と呼ばれる大量のテキストデータを使ってトレーニングされた自然言語処理のモデルになります。大量のデータを学習させ、ファインチューニングすることで実現しているようです。

詳細は以下のリンクをご参照ください。
https://openai.com/blog/chatgpt

現在、様々な企業にてChatGPT活用への取り組みが行われてますが、今回は開発という視点からPythonを使ってChatGPTを簡単に試してみたいと思います。
PythonでChatGPTを活用するには、ChatGPTが提供しているAPIを使用します。APIは有償となり従量課金モデルになります。料金体系はトークンという単位で課金され、APIへリクエスト時およびレスポンス時のデータサイズに依存します。日本語は英語と違ってマルチバイトのため、使用トークンが増える傾向にあるので注意が必要です。

以下、PythonでChatGPTを使用するまでの流れになります。

  1. APIキーの発行
  2. クレジット上限金額の設定
  3. PythonからAPI実行

1. APIキーの発行

では早速、APIキーの発行を行ってみます。APIキーを発行するには、事前にOpenAIのアカウント登録を済ませておく必要があります。
以下のURLより登録可能です。Googleアカウントの使用も可能です。
https://openai.com/product

ログインが完了したら、右上のアカウントアイコンから「View API keys」を選択します。

「API keys」のページに遷移するので、「+ Create new secret key」ボタンをクリックします。

赤枠のアイコンをクリックし、APIキーを生成します。
発行されたAPIキーを使い、APIリクエストすれば、OpenAIのサービスがAPI経由で利用できます。APIキーは一度しか表示されないため、コピーして大切に保存しておきます。

2. クレジット上限金額の設定

次にクレジットカード支払いの設定を行った上で上限金額の設定を行う必要があります。無償トライアルがあるのでトライアル期間を過ぎてしまった場合は設定が必要になります。料金設定ページから「Set up paid account」をクリックします。

個人使用の場合「I'm an individual」、企業での使用の場合「I'm working on behalf of a company」をクリックし、クレジットカード情報や住所などを入力して登録します。

次に上限金額の設定をします。左タブの「Billing」をクリックし「Usage limits」をクリックします。

赤丸で囲った部分に上限金額を入力し、「Save」をクリックします。
ハードリミットとは毎月の使用量の上限値となり、ソフトリミットとは通知メールが送信される毎月の使用量のしきい値になります。

3. PythonからAPI実行

Pythonを実行するにあたり、事前に pip でopenaiライブラリをインストールしておきます。今回私が実行するPython環境は jupyter notebookになります。以下のようなコードを実行してみました。

import openai

openai.api_key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

res = openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=[
        {"role": "user", "content": "2022年のカタールワールドカップの優勝チームは?"}
    ]
)
print(res.choices[0]["message"]["content"].strip())

構文の説明ですが、

  • api_keyの部分には先ほど取得したAPIキーを記載します。直書きはよくないので、環境変数を使用するなどしてラップすると良いです。
  • ChatCompletionのクラスメソッド「create」を使い、modelとmessage引数で内容を渡します。ともに必須の引数となり、
  • modelには自分の使いたいモデル(gpt-3.5-turbo、gpt-4、gpt-4-32k)を指定します。
  • messagesには、"role": "user"、"content"の値に、質問内容を入力します。ここでは激闘だった2022年のカタールワールドカップの優勝チームを聞いてみます。

実行すると以下のような回答が返ってきました。

私は人工知能のモデルであり、将来の結果を正確に予測することはできません。したがって、2022年のカタールワールドカップ優勝チームを予測することはできません。

あまりにも自然な文章に驚きしかありませんが、期待した回答ではありませんでした。色々調べてみるとどうやら2021年までの情報しか持ち合わせていないようです。活用にあたり、留意が必要そうです。

では気を取り直して、2018年のロシアワールドカップの優勝チームを聞いてみます。

import openai

openai.api_key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

res = openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=[
        {"role": "user", "content": "2018年のロシアワールドカップの優勝チームは?"}
    ]
)
print(res.choices[0]["message"]["content"].strip())
フランスです

無事、正解を聞けました。

今回は簡単な使い方を試してみましたが、もっと色々応用ができそうなので今後も試してみたいと思います。