9
8

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をPythonで試してみた

Last updated at Posted at 2023-03-29

はじめに

最近SNS等で注目を集めまくっているChatGPTのAPIがOpenAIから公開されていたということで、仕様の確認も含めPythonでの実装を試してみたので備忘録を兼ねて軽くまとめます。

実行環境

  • windows10 home
  • Python 3.10.1
  • openai 0.27.2
  • model:gpt-3.5-turbo

OpenAI API利用料について

APIの利用は基本有料となっていますが、一定期間一定額までは無料で利用することが出来ます。
API利用はトークン単位で管理され、例えばgpt-3.5-turboであれば1000トークン辺り0.002ドルとなっています(2023/03/29時点)
これはハッキリ言って個人がお試しで使う分には十分だと思います。

スクリーンショット 2023-03-29 151922.png

ライブラリのインストール

pipでopenaiライブラリをインストールします

pip install openai

※Permission Errorが出る場合はターミナル(cmd等)を管理者として実行するとできるかと思います

APIキーの発行

  • こちらのページへアクセス
  • Create new secret key をクリックしてAPIキーを生成
  • コピーしてどこかにバックアップ

※APIキーは生成した後のポップアップ画面以外で再表示させることが出来ないため、ここでコピーします

スクリーンショット 2023-03-29 144811.png

実装

とりあえず叩いてみる

gpt-test.py
import openai

openai.api_key = "先程コピーしたAPIキー"

response = openai.ChatCompletion.create(
                model='gpt-3.5-turbo',
                messages=[
            {'role': 'user', 'content': 'hi, gpt'}],
                temperature=0.0,
)

print(response)

出力結果

{
  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,
      "message": {
        "content": "Hello! How can I assist you today?",
        "role": "assistant"
      }
    }
  ],
  "created": 1680072567,
  "id": "chatcmpl-6zJuZMrvm0QnvrKw8fCNc3QR4Kp53",
  "model": "gpt-3.5-turbo-0301",
  "object": "chat.completion",
  "usage": {
    "completion_tokens": 9,
    "prompt_tokens": 12,
    "total_tokens": 21
  }
}

返答やトークン使用量等の値が返ってきました。
戻り値 response['choices'][0]['message']['content']にChatGPTからの返答があることが確認できます。
トークンの使用量はresponse['usage']['total_tokens']にあります。

少し改良してみた

よく見るChatGPTとの会話形式に改良してみました。
会話の履歴をChatGPTへの送信内容に含めることで、トークンの消費量は跳ね上がります。
トークン消費を抑えるため、一定会話数で古いものから履歴を破棄していくようにしました。
終了時にはトークン総消費量を表示しています。

chatgpt.py
import openai
import sys

openai.api_key = "先程コピーしたAPIキー"

messages = []
total_tokens = 0 #トークン総消費量

while True:

    try:
        msg = input('User: ')
        usr_msg = {'role': 'user', 'content': msg}

        messages.append(usr_msg)

        response = openai.ChatCompletion.create(
                        model='gpt-3.5-turbo',
                        messages=messages,
                        temperature=0.0,
        )

        print('\n' + 'ChatGPT: ' + response['choices'][0]['message']['content'] + '\n')

        #messagesにChatGPT側の返答内容を追加
        messages.append({'role': response['choices'][0]['message']['role'], 
                        'content': response['choices'][0]['message']['content']})
        
        total_tokens += int(response['usage']['total_tokens'])

        #messagesの量が一定数を超えたら履歴を古いものから削除
        while len(messages)>6:
            del messages[0]
        
    except KeyboardInterrupt:
        print('Exit')
        print(f'used token: {total_tokens}')
        sys.exit()

ちなみに、お約束としてAPIキーのコードベタ書きはセキュリティ上あまり良くないので、別ファイルに記述したり環境変数に格納する等した方が良いです。
ローカルでちょっと使ってみよう程度であれば然程問題はないですね。

終わりに

ChatGPTのAPIを軽く試してみましたが、とても簡単に高度な対話アプリケーションが実装出来てしまいました。
これを利用した仮想キャラクターとの会話アプリケーション等もどんどん開発されているようで、今後が楽しみです。
様々な場面で活躍できるインターフェースなので、僕もChatGPTを利用して何か面白いことが出来ないか思考してみたいです。

参照

Overview - OpenAI API
ChatGPTのAPIを使ってみよう:コンソールで対話するコードとは?

9
8
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
9
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?