OpenAIが提供しているChatGPTのAPIを使って何か動くものを作るために準備したこと
ゴールデンウィーク中にChatGPTのAPIを使って動くものを作ってみたので語ってみるよ😉って思ったら、今回は使い方の説明になってしまいました。超初級編で特に役になつ情報はないですが、OpenAIが提供するChatGPTのAPIを使ってみたいと思っている方などの初心者向けの内容です。ちなみに有料プランの登録や、使用制限など事前にやっておくと良いと思われる注意点についてもまとめています。
ChatGPT APIの使い方💻
① OpenAIのアカウントを作成する(こちらは作成済みとして進めます)
まだお持ちでない方は、以下の記事を参考にしてOpenAIのアカウントを作成してください。👇
② APIキーを取得する🔑
・OpenAIのホームページにアクセス
・Get Startedをクリック
・Sign Upする(ログインする)
・右上にあるアイコンのPersonalをクリック
・リストに表示されたView API keysをクリック
・Create new secret key をクリック
・シークレットキーの名前を入力
・作成すると下の画面のようにAPIで使用するキーが発行されるので、コピーしてプログラムなどで利用します。
ここに表示されているAPI keyは絶対に外部に漏れないようにしておきましょう。プログラム中に記載するなどはご法度です。 API keyが漏れてしまうと第3者によって悪用される危険性があります😭
Usage limits(使用制限)の設定をしておけばアラートが上がるのでそこまで心配しなくても大丈夫です。
ChatGPT APIの料金
気になるChatGPT APIの利用料金はいくらなのでしょうか?
まずは、気軽に試してみたい方に朗報😊無料枠が用意されています✌️
無料枠の確認方法は以下の通りです。
① Billing overviewのページを開きます
② Usageのページを開きます
フリートライアルを使えう際の注意点として有効期限があります。無料期間はAPIキーを取得してから1ヶ月や7日間のフリートライアルがあるようです。(無料期間の最新の状況は、Usageのページで確認してください。)
この記事を書いた時には既にトライアル期間は終了していました😭
※別のアカウトを作ってみましたが、登録時に使用した携帯電話の番号で同じ番号の場合には付与されないようなので、フリートライアルのためにアカウントを複数持つのは無理です。
ChatGPTの有料プランの料金
まずは気になる料金を事前に把握しておきましょう
・Pricingのページに最新の情報が掲載されています。
最新のGPT4の料金はこちら
Prompt:1000トークンあたり$0.03〜$0.06
Completion:1000トークンあたり$0.06〜$0.12
gpt-3.5-turboの料金はこちら
1000トークンあたり$0.002
トークンって何❓
英語であれば1単語1tokenなんですが、日本語の場合は、1文字1tokenとは限らず、トークンでカウントするのが非常に難しいです。
こちらのPlaygroundで文字を入力してみるとトークン数が分かります。
ChatGPTのAPIの有料プランの申し込み方と注意点
料金もわかったので、有料プランに申し込んでChatGPTのAPIでサービスを作る前準備をしていきましょう😊
(画面はブラウザの日本語翻訳を利用しています。)
・billing(請求ページ)にアクセスします
・有料アカウントをクリック
・今回は個人を選択
・後はクレジットカードの情報などを入力すればOK😉
入力が終わるとメールで有料プランの登録完了のメッセージが届きます😊
これで有料プランとしてAPIを使えるようになりました。
こちらのAPIは従量課金になっているので、何もせずにいると使った分だけ金額が増え続けてしまいます😲
なので、使用制限を必ずかけておきましょう⭕️
・Usage Limitsをクリック
次に設定方法です。
上限金額を設定したい場合は、Hard Limitに金額(ドル)を入力します👆
こちらを設定しておけば、請求額をオーバーすることはなくなります。ただしAPIの機能が停止するのでサービスなどは動かなくなるので注意。
次にSoftLimitに金額(ドル)を入力します👆
これは、設定した金額に達すると通知で教えてくれる金額になります。
使い方としては、SoftLimitで通知を受け取り、必要であればHardLimitを更新してあげれば、良いと思います😉
プログラムでopenAIのAPIを動かしてみる
とりあえず、ChatGPTにpythonプログラムを教えてもらおう😊
プロンプト「OpenAI のChatGPTのAPIを使うpythonのサンプルプログラムを教えて」で教えてもらったコードは以下の通り
import openai
import json
# APIキーを設定
openai.api_key = "YOUR_API_KEY"
# 入力文章
prompt = "こんにちは、元気ですか?"
# APIリクエスト
response = openai.Completion.create(
engine="text-davinci-003", # 使用するGPTのエンジンを指定
prompt=prompt, # 入力文章
max_tokens=60, # 応答文の最大トークン数
n=1, # 生成する応答文の数
stop=None, # 応答文の終了条件
temperature=0.7, # 応答文のランダム性を決定するパラメータ
)
# APIレスポンスの取得
output = response.choices[0].text.strip()
# 結果の表示
print("入力文章: ", prompt)
print("応答文: ", output)
らしいです。APIキーをハードコードするのはよろしくないですね。
プロンプト「APIキーを隠すにはどうするのがベスト?」と聞くと教えてくれたので APIキーの扱いを変更。自分の場合はもう少し違うやり方をしますが、この記事を読んだ人がAPI _KEYをハードコーディングしないように記載しておきますね
import os
import openai
# APIキーを環境変数から取得
API_KEY = os.environ.get("OPENAI_API_KEY")
# APIキーを設定
openai.api_key = API_KEY
#必要なモジュールはインストールしましょう
pip install openai
実際に動かしてみます。当たり前ですが、動きましたね💦
何も難しいことはないw
入力文章: こんにちは、元気ですか?
応答文: はい、元気です。あなたは元気ですか?
プログラムで書かなくても、挙動は、Playgroudを使えば色々と試すことができますよ😊
多分、このレベルまでは、5分から10分もあればできてしまうでしょう✌️
ChatGPTでAPIを利用する際のトークン使用量を抑える方法
プログラムを始める前に前提のTipsを紹介しておきます。APIの使用量はトークンの使用量に依存した従量課金です。知らなかったでは済まないので事前にトークン使用量を減らす方法を知っておいてからプログラミングを始めると良いでしょう😉
■1つ目は、過去のやり取りは、上限(直前N回目)と決めて設定する
ChatGPTの利用方法として、過去の投稿文や応答文を加味して次の質問を繰り返していきます。
例えば)
1回目のプロンプト「OpenAI のChatGPTのAPIを使うpythonのサンプルプログラムを教えて」
1回目の応答「プログラムは・・・省略」
2回目のプロンプト「APIキーを隠すにはどうするのがベスト?」
などのようにChat形式で会話が進んでいきます。このやり取りを重ねるごとに、会話の文脈に沿った解答になっていきますが、これは過去の投稿文や応答文を含めて次の質問をすることになります。プログラム的には、下のようになります。👇
res = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{
"role": "system",
"content": "日本語で返答してください。"
},
{
"role": "user",
"content": "OpenAI のChatGPTのAPIを使うpythonのサンプルプログラムを教えて"
},
{
"role": "assistant",
"content": "プログラムは・・・省略"
},
{
"role": "user",
"content": "APIキーを隠すにはどうするのがベスト?"
},
],
)
プログラム的には、messageのパラメータに過去の内容含めていくので増大化していってしまうので、messagesに含めるのはN回までの制限を設定しましょう😊
ちなみにOpenAI APIのmessagesパラメータのサイズ上限は、1リクエストあたり4MBです。これを超えると、APIは「Payload Too Large」というエラーメッセージを返します。
roleとは
簡単に説明すると以下のようになります
system : ChatGPTに事前の設定となる条件や状況を指定しておきます。
assistant : ChatGPTが応答したテキスト
user : 質問
です。
■2つ目は、APIのmax_tokensに上限を設定する
max_tokens=XXという設定です。必ず設定しましょう。
これは、作りたいサービスの返答テキストのトークンに長文を期待する場合は、数千から数万。
短文の応答を期待する場合は、数百の値を設定するのが良いと思います。
もちろん、応答するテキストの長さが長ければ長いほど、応答時間が長くなるので設定には注意しましょう。
■3つ目は、日本語ではなく英語に翻訳してからAPIリクエストする
英語は1単語=1トークンでカウントされるのに対し、日本語は漢字など複雑なケースが多くトークン数が多くカウントされるのと、日本語の処理は英語に比べて多くのトークンを消費することになるため、英語に翻訳してからAPIリクエストを投げ、応答結果も英語で取得し、和訳するとトークン数の節約につながります。
その他注意点
特別な学習を必要としない場合は、上記の点を注意しておけばよいですが、独自のデータなどを読み込ませてモデルを独自でトレーニングするファインチューニングする場合は、Json形式のファイルデータを読み込んで処理をする必要があります。もちろん読み込ませたJsonファイルのトークン数に応じて課金されるので注意が必要です。
テキストの応答文だけでなく、クラスタリングされた関連テキストや、スコアなどの追加情報まで提供してくれるモデルを利用すると、さらに料金が増えるので注意が必要です。
OpenAI Playgroundの使い方
プログラムで確かめる前にソースコードを書かなくても自由に動作確認をして事前に確認できる、Playgroundを活用して動作を確認してからプログラミングをすると良いと思います😉
ちなみにPlaygroundは、課金対象に含まれるので注意してください。
① Mode : Chat を選択
② Model : gpt-3.5-tubo を選択
あれgpt-4が選べない🤔
gpt-4が選べない理由は、APIの有料ではなく、ChatGPT Plus$20/月に加入している必要があるよでした。
普段の検索は、リアルタイムな検索も踏まえてくれるBingChatを利用しているので、ChatGPT Plusには加入していません😭
右のサイドメニューの内容は、こんな感じです。
Temperature : 応答の多様性(Min0-Max2.0) 数値を大きくするとランダムな応答を含むようになります。
Maximun length : 応答トークンの最大値(Min1-Max2,048)
Top P : 生成される文章に含まれるトークンの数を制御します。トークンの重要度が高い順に取得され、設定された値に到達するまでのトークンが出力に含まれます。
Frequency penalty : 生成される文章に同じフレーズやワードが含まれないようにペナルティを与えます。
Presence penalty : 特定のトークンが含まれている文章が好ましい場合に使用します。含まれるべきでないトークンが含まれている場合にペナルティを与えます。(-2.0 - 2.0)
SYSTEMの欄には、ChatGPTの前提となる条件や状態などを記載しておきます。こちらの項目に設定した内容を考慮した応答が期待できます。
最近流行りのプロンプトエンジニアと呼ばれる職業は、このSystemに設定する文面と質問の内容をいかにチューニングして正答率の高い専門的な応答を導き出すかを調整しているのですね😉
Playgroundの良いところは、履歴が30日間保持されるということです。色々な質問を繰り返し、どのような振る舞いをしたのかのログが残るのでメモを取っておく必要がありません❗️
さらに、APIの設定値も閲覧できるので、いろいろなパターンを試してこれが一番良かったのでAPIに組み込もうというケースでも簡単にAPIの設置値をみることができます。非常に便利ですね✌️
何か使い方の説明になってしまった・・・実際に作ったサービスの内容は次回まとめますね😉
よかったら、気軽にフォローしていただけると嬉しいです!!