こんにちは。ナミレリです。みなさん、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派な方
- 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-turboはChatGPTで使用されているモデルと同じ
- gpt-3.5-turbo-0301モデルも公開された(少なくとも6/1まではサポートされる)
- (gpt-3.5-turbo-0301は3/1時点のスナップショットで更新されないモデル)
- 価格は1,000トークンあたり0.002ドル(既存のGPT-3.5モデルよりも10倍安い)
- APIを通じて送信されたデータはオプトインしない限り利用されない
- APIを通じて送信されたデータは、最大30日間、乱用および誤用の監視目的で保持され、その後削除される
Introducing ChatGPT and Whisper APIs:https://openai.com/blog/introducing-chatgpt-and-whisper-apis
API data usage policies:https://platform.openai.com/docs/data-usage-policies
OpenAIのPython libraryをインストールする
では早速やってみましょう。
まずはPython用のOpenAI APIクライアントライブラリをインストールします。
下のようにpipで簡単にインストールできます。OpenAI APIのライブラリと依存関係で必要なライブラリもインストールされます。
pip install openai
すでにインストールされている方は、アップグレードしてください。
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"
PythonからChatGPT APIを使う
それでは、下のようにPythonを通じてターミナルからChatGPT APIgpt-3.5-turboを使えるようにしてみます。
その前にまず、知っておくべき基本的な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配列に、辞書形式でrole、contentを入れていきます。roleはsystem、user、assistantの3つのどれかを入れ、contentは会話のテキストです。
3つのroleの意味を下の表に記載します。
role | 説明 |
---|---|
system | 最初にChatGPTに指示する役割 |
user | ユーザーの会話(質問や指示など) |
assistant | ChatGPTの会話(返答) |
最初に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)
サンプルコードの説明
ほぼ公式通りではありますが、カラー設定など少し手を加えているので説明します。
- STEP
ライブラリのインポート
import os import openai import readline
pipでインストールしたOpenAIのライブラリと環境変数に設定したAPIキーを読むためにosライブラリをインポートします。readlineはinput()で日本語がずれないようにします。
- STEP
APIキーの設定とモデルの指定
openai.api_key = os.getenv("OPENAI_API_KEY") chat_log = [{"role": "system", "content": "あなたは世界でもっとも優れたAIです。"}]
環境変数OPENAI_API_KEYを読み、roleのsystemで動作を設定する初期設定を入力しておきます。それを今回はchat_logという配列にします。
os.getenvについては下の記事がぜひご覧ください。
- STEP
文字カラーの設定
blue= '\033[34m' green= '\033[32m' bold = '\033[1m' reset = '\033[0m'
色を付けて見やすくするためにANSI color codeを設定しています。
- STEP
プロンプトの入力
while True: prompt = input(bold+blue+"Enter a prompt (or 'q'): "+reset+'\n') if prompt.lower() == 'q': break
qが入力されるまで繰り返し、qが入力されたらwhileを抜けて終了します。
- 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 )
- 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)の回答を出力しています。また、トークン数も表示するようにしました。
- STEP
一定のトークン数を超えたら会話履歴を削除する
下の例では、4,000トークンを超えた場合に会話履歴のchat_logから要素を削除します。
if total_tokens > 4000: chat_log.pop(1)
- STEP
サンプルプログラムの保存
ファイルを保存して、aliasで今回はchatgptに設定します。
vi ~/.zshrc alias chatgpt='python /PATH/TO/PROG/sample_python.py'
- 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