【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)
Parallels Desktop 20 for Macの無料トライアル もありますので、ぜひダウンロードして試してみてください。M1/M2/M3のMac上で快適にMacやUbuntu、Windowsが動作します。
NEW Parallels Desktop 20 for Mac

Parallels Desktop 20 for Macは、M1/M2/M3のMac上で快適にMacやUbuntu、Windowsが動作します。

14日間の無料トライアルもありますので、ぜひダウンロードして試してみてください。

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

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

  • ChatGPTがAPI経由で利用てきるようになったこと
  • 公開されたモデルであるgpt-3.5-turboChatGPTで使用されているモデルと同じ
  • 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をインストールする

OpenAI APIの変更について

2023年11月にPython用のOpenAI APIライブラリのバージョンが1.x(1.x系)にアップデートされました。この記事では、バージョン0.27をベースにした記事で古いです。

0.x(0.x系)から1.x(1.x系)への変更点は下の記事で紹介しています。

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

まずは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という配列にします

    os.getenvについては下の記事がぜひご覧ください。

  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

最後に

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

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

MacやLinux、Pythonなど技術系のkindle本も豊富にあります。詳しくはこちらから。

Amazonの電子書籍読み放題サービス「Kindle Unlimited」でプライム会員を対象に、最初の3か月間を無料体験できるキャンペーンを実施中。マンガ、小説、ビジネス書、雑誌など500万冊から、好きな本を何冊でも読めるキャンペーンです。

初めてkindle unlimited 読み放題をご利用の方は30日間の無料で体験できます。
期間終了後は月額980円で、いつでもキャンセルできます。
200万冊以上が読み放題。お好きな端末で利用可能です。

ChatGPT関連の別の記事

公式ChatGPTのMac用デスクトップアプリを使う

OpenAIライブラリ1系の変更点

neovimでChatGPT

PythonでChatGPTのAPI

MacでChatGPT

MacでChatGPT

VSCodeでChatGPT

LinuxのターミナルからChatGPT

PythonでGPT-3

定番おすすめ記事

カテゴリー:
関連記事