【Python】ChatGPT APIを使ってターミナルで会話する(gpt-3.5-turbo)

8 min

こんにちは。ナミレリです。みなさん、MacでPythonは使っていますか?

ついに3月1日(米国時間)に、OpenAIから「ChatGPT」のAPIがリリースされました。これによりAPIを通じて「ChatGPT」(gpt-3.5-turbo)にアクセスして会話することができます。ワクワクしますね。

リリースされたモデルはgpt-3.5-turboという名称でこれまでの「ChatGPT」で利用されているモデルと同じです。

また、12月以降「ChatGPT」の90%のコスト削減に成功しているとのことです。価格は1,000トークンあたり0.002ドル(約0.26円)で、既存のGPT-3.5モデルよりも10倍安いようです。これまた素晴らしい。

早速、Pythonで使ってみたいと思います。

この記事はこんな人にオススメ

  • ChatGPTのAPIを試したい方
  • ChatGPTとターミナルで会話したい方
  • ターミナルが大好きな方
  • 何事もCLI派な方
  • とにかくCLI派な方
この記事のMac環境
  • M2 MacBook Air 13.6 インチ
  • M1 Max MacBook Pro 14インチ
  • macOS Ventura 13.2.1
  • pyenv 2.3.13
  • miniforge3-22.9.0-3(Python 3.10.8)

ChatGPT API公開の主なポイント/

ざっくりChatGPT API公開の要点を記載します。

  • ChatGPTがAPI経由で利用てきるようになったこと
  • 公開されたモデルであるgpt-3.5-turboChatGTPで使用されているモデルと同じ
  • gpt-3.5-turbo-0301モデルも公開された(少なくとも6/1まではサポートされる)
  • gpt-3.5-turbo-03013/1時点のスナップショットで更新されないモデル
  • 価格は1,000トークンあたり0.002ドル(既存のGPT-3.5モデルよりも10倍安い)
  • APIを通じて送信されたデータはオプトインしない限り利用されない
  • APIを通じて送信されたデータは、最大30日間、乱用および誤用の監視目的で保持され、その後削除される

OpenAIのPython libraryをインストールする

では早速やってみましょう。

まずはPython用のOpenAI APIクライアントライブラリをインストールします

下のようにpipで簡単にインストールできます。OpenAI APIのライブラリと依存関係で必要なライブラリもインストールされます。


pip install openai

すでにインストールされている方は、アップグレードしてください。

2023年3月2日現在のバージョンは0.27.0です。


pip install -U openai
Successfully installed openai-0.27.0

pip showで情報を見ておきます。


pip show openai
Name: openai
Version: 0.27.0
Summary: Python client library for the OpenAI API
Home-page: https://github.com/openai/openai-python
Author: OpenAI
Author-email: support@openai.com
License:
Location: /Users/u/.pyenv/versions/miniforge3-22.9.0-3/lib/python3.10/site-packages
Requires: aiohttp, requests, tqdm
Required-by:

APIキーを環境変数に設定する

取得したAPIキーは、他の人と共有したりPythonコード(ブラウザ、アプリ等)で公開してしまうのはNGです。漏洩のリスクを軽減するために環境変数に設定しておきます。ここではOPENAI_API_KEYという環境変数に設定します。

YOUR_API_KEYの部分に実際に取得したAPIキーを置き換えてください。


export OPENAI_API_KEY="YOUR_API_KEY"

.zshrcに設定しておくことも可能ですが漏洩には十分に注意する必要があります。

APIキーはここから取得します。https://platform.openai.com/account/api-keys

PythonからChatGPT APIを使う

それでは、下のようにPythonを通じてターミナルからChatGPT APIgpt-3.5-turboを使えるようにしてみます。

PythonからChatGPT APIを使う
PythonからChatGPT APIを使う

その前にまず、知っておくべき基本的なChatGPT APIの使い方を紹介します。

ChatGPT APIの使い方

text-davinci-003とは異なり、下のようにオブジェクトを生成します。

詳しくはhttps://platform.openai.com/docs/guides/chat/introductionを参照してください。


import openai

openai.ChatCompletion.create(
  model="gpt-3.5-turbo",
  messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Who won the world series in 2020?"},
        {"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
        {"role": "user", "content": "Where was it played?"}
    ]
)

messages配列に、辞書形式でrolecontentを入れていきます。rolesystemuserassistantの3つのどれかを入れ、contentは会話のテキストです。

3つのroleの意味を下の表に記載します。

role説明
system最初にChatGPTに指示する役割
userユーザーの会話(質問や指示など)
assistantChatGPTの会話(返答)

最初にsystemを用いてChatGPTに役割を設定し、userとassistantは交互に更新していきます。

ChatGPT APIのレスポンス

ChatGPT APIからのレスポンスは下のようになります。assistantの返答の確認は、
response[‘choices’][0][‘message’][‘content’]です。


{
 'id': 'chatcmpl-6p9XYPYSTTRi0xEviKjjilqrWU2Ve',
 'object': 'chat.completion',
 'created': 1677649420,
 'model': 'gpt-3.5-turbo',
 'usage': {'prompt_tokens': 56, 'completion_tokens': 31, 'total_tokens': 87},
 'choices': [
   {
    'message': {
      'role': 'assistant',
      'content': 'The 2020 World Series was played in Arlington, Texas at the Globe Life Field, which was the new home stadium for the Texas Rangers.'},
    'finish_reason': 'stop',
    'index': 0
   }
  ]
}

Pythonのサンプルコード(ChatGPT API)

それでは公式のhttps://platform.openai.com/docs/guides/chat/introductionを参考に早速プログラムを書いていきます。全体は下のようなPythonプログラムになります。一つ一つ説明していきます。


import openai
import os
import readline

openai.api_key = os.getenv("OPENAI_API_KEY")
chat_log = [{"role": "system", "content": "あなたは世界でもっとも優れたAIです。"}]

blue= '\033[34m'
green= '\033[32m'
red = '\033[31m'
bold = '\033[1m'
reset = '\033[0m'

while True:
    prompt = input(bold+blue+"Enter a prompt (or 'q'): "+reset+'\n')
    
    if prompt.lower() == 'q':
        break
    
    chat_log.append({"role": "user", "content": prompt})
    response = openai.ChatCompletion.create(
        model = "gpt-3.5-turbo",
        temperature = 0.0,
        messages= chat_log
    )

    messages = response["choices"][0]["message"]["content"]
    total_tokens = response["usage"]["total_tokens"]

    print(bold+green+messages+reset, end = "\n")
    print("Total Tokens: "+bold+red+str(total_tokens)+reset)
    
    if total_tokens > 4000:
        chat_log.pop(1)

サンプルコードの説明

ほぼ公式通りではありますが、カラー設定など少し手を加えているので説明します。

  1. STEP

    ライブラリのインポート

    
    import os
    import openai
    import readline
    

    pipでインストールしたOpenAIのライブラリと環境変数に設定したAPIキーを読むためにosライブラリをインポートします。readlineはinput()で日本語がずれないようにします。

  2. STEP

    APIキーの設定とモデルの指定

    
    openai.api_key = os.getenv("OPENAI_API_KEY")
    chat_log = [{"role": "system", "content": "あなたは世界でもっとも優れたAIです。"}]
    

    環境変数OPENAI_API_KEYを読み、rolesystemで動作を設定する初期設定を入力しておきます。それを今回はchat_logという配列にします

  3. STEP

    文字カラーの設定

    
    blue= '\033[34m'
    green= '\033[32m'
    bold = '\033[1m'
    reset = '\033[0m'
    

    色を付けて見やすくするためにANSI color codeを設定しています。

  4. STEP

    プロンプトの入力

    
    while True:
        prompt = input(bold+blue+"Enter a prompt (or 'q'): "+reset+'\n')
        if prompt.lower() == 'q':
            break
    

    qが入力されるまで繰り返し、qが入力されたらwhileを抜けて終了します。

  5. STEP

    OpenAIのAPIにリクエストし、レスポンスを受け取る

    ChatGPT APIではChatCompletionというオブジェクトを使います。会話の履歴を用いてスムーズに会話するために、配列chat_logに会話履歴をappnedします。

    
        chat_log.append({"role": "user", "content": prompt})
        response = openai.ChatCompletion.create(
            model = "gpt-3.5-turbo",
            temperature = 0.0,
            messages= chat_log
        )
    
  6. STEP

    ChatGPT API(gpt-3.5-turbo)のレスポンスを出力

    
        messages = response["choices"][0]["message"]["content"]
        total_tokens = response["usage"]["total_tokens"]
    
        print(bold+green+messages+reset, end = "\n")
        print("Total Tokens: "+bold+red+str(total_tokens)+reset)
    

    太文字緑色でChatGPT API(gpt-3.5-turbo)の回答を出力しています。また、トークン数も表示するようにしました。

    total_tokensは入力トークンと出力トークンの合計です

  7. STEP

    一定のトークン数を超えたら会話履歴を削除する

    下の例では、4,000トークンを超えた場合に会話履歴のchat_logから要素を削除します。

    
        if total_tokens > 4000:
            chat_log.pop(1)
    
  8. STEP

    サンプルプログラムの保存

    ファイルを保存して、aliasで今回はchatgptに設定します。

    
    vi ~/.zshrc
    alias chatgpt='python /PATH/TO/PROG/sample_python.py'
    
    
  9. STEP

    会話履歴を考慮して、会話できているか確認してみます。

    下の例は日本の人口について会話していますが、しっかり履歴が考慮されています。

参考にさせていただいたサイト

参考にさせていただきました。ありがとうございます。

https://platform.openai.com/docs/guides/chat/introduction

https://openai.com/blog/introducing-chatgpt-and-whisper-apis

https://chatgpt-lab.com/n/nda0de0be1774

https://qiita.com/sakasegawa/items/db2cff79bd14faf2c8e0

https://note.com/npaka/n/n0dd2b226e8ae

Udemyの人工知能と機械学習講座

みんなのAI講座 ゼロからPythonで学ぶ人工知能と機械学習 【2023年最新版】

講座買い切り型で、視聴期限なし。自分のペースで学べる。

現場で活躍されているプロが教えるコースを選べます。

Udemyの人工知能と深層学習の講座

ディープラーニング : Pythonでゼロから構築し学ぶ人工知能(AI)と深層学習の原理

講座買い切り型で、視聴期限なし。自分のペースで学べる。

現場で活躍されているプロが教えるコースを選べます。

最後に

最後まで読んでいただきありがとうございます。今回の【Python】ChatGPT APIを使ってターミナルで会話する(gpt-3.5-turbo)はいかがでしたでしょうか。

AIの急速な発展と普及を実感します。ChatGPTやStable DiffusionのようなジェネレーティブAIがますます発展しそれを扱うことのできるプロンプトエンジニアが活躍する時代はもうすぐだと思います。

使ってほしい至極のキーボード

最高の打鍵感。スコスコと静かに速く、そして気持ち良くタイピングができます。もうタイピングが楽しくてどうしようもなくなります。つや消しの高級感もたまりません。サラサラしていて触り心地も最高です。

PFU キーボード HHKB Professional HYBRID Type-S 日本語配列/雪(無刻印)

ChatGPT関連の別の記事

neovimでChatGPT

PythonでChatGPTのAPI

MacでChatGPT

MacでChatGPT

VSCodeでChatGPT

LinuxのターミナルからChatGPT

PythonでGPT-3

定番おすすめ記事

カテゴリー:
関連記事