2022年11月のリリース依頼、ChatGPTは急速にユーザーを拡大しています。2/7にはMicrosoft製のブラウザBingに搭載された「Bing AI」が登場、3/31にはChatGPT APIの登場により、企業や個人からChatGPTを活用した様々なサービスが公開されるようになりました。
本ブログでも、LINEでChatGPTが使えるBOTの作り方を紹介しました。(同様のサービスがネットでは有料のものもありましたので、BOTを使いたい場合は是非参考にしてみてください!)
ChatGPTのAPIは、18ドル分のクレジットが付与されており、実質無料で使うことができます(料金について詳しくはこちら)。しかし、サービスとして公開している場合、ユーザー数によっては予想以上にトークンを消費してしまっている可能性もあります。無料分を超えた場合は重量課金制となるので、現在の使用量は定期的にチェックしたいところです。
そこで、本記事では、ChatGPT APIの利用履歴と、残りクレジットを記録する方法について紹介したいと思います。
ChatGPT APIの料金を計算する方法
ChatGPTのAPI料金を計算する方法は、以下の通りです。
1トークンあたりの料金 × (入力トークン+出力トークン)
※ 入力トークン:ユーザーからの質問文、出力トークン:ChatGPTからの応答文
料金計算の例
例えば、「gpt-3.5-turbo」を利用してAPI経由でチャットをした場合について考えます。
1トークンあたりの料金を調べる
まず、OpenAIの公式サイトから料金のページを確認します。「gpt-3.5-turbo」の料金は、1000トークンあたり0.002ドルです。
トークン使用量を調べる
「入力トークン」とは、ユーザーからの質問文、「出力トークン」とは、ChatGPTからの応答文です。この合計が1回のチャットで使用したトークン量となります。「トークン」というのは、文章を最小単位に区切ったものなのですが、ChatGPT独自の解析をしており自分で正確なトークン数を導き出すことはできません(詳しくはこちらの記事をご参照ください)。
正確なトークン使用量を調べるには、ChatGPTからのレスポンス内容を確認します。OpenAIのドキュメントによると、レスポンスの「usage」にトークン使用量がセットされています。
項目名 | 説明 |
---|---|
prompt_tokens | 入力トークン (ユーザーが入力した質問文) |
completion_tokens | 出力トークン (ChatGPTからの応答文) |
total_tokens | 合計トークン (入力トークンと出力トークンの合計) |
1と2の内容をもとに計算する
これを先ほどの式に当てはめると、
・1トークンあたりの料金:0.002 ÷ 1000 = 0.000002 (ドル)
・1回のチャットで消費したトークン量:9 + 24 = 33 (トークン)
→ 0.002 / 1000 × ( 9 + 24 ) = 0.000066 ドル (約0.0087円)
となります。
API利用履歴・残り無料分を記録する
ChatGPTのAPIを使用した履歴と、残り無料分を把握するための表を作成していきます。
スプレッドシートで表を作成する
Googleスプレッドシートを開き、以下のような表を作成しておきます。
dateを時刻まで表示するようにしておく
A列には使用した日時が入りますので、時間まで表示されるようにしておきます。列名のところをクリックし、上部メニューの「123」を押して「日時」を選択します。
残り無料分を日本円でも表示するために、H2セルに関数を入れておきます。
=ROUND(GOOGLEFINANCE(“CURRENCY:USDJPY”) * G2) & “円”
GOOGLEFINANCE関数で現在のドル→円の為替レートを取得し、日本円として表示します。
残りクレジット分を記載しておく
現在の残り無料分は、OpenAIのマイページから確認できます。
現在、0.01ドル使っているので残り無料分は17.99ドルになります。こちらをシートのG2セル「残り(ドル)」に記載します。
これでスプレッドシート側の設定は完了です。
応答を受け取るプログラム内にトークン記録処理を追加する
次に、プログラム側に処理を追加します。今回は、以前作成したLINEでChatGPTのAPIを使うGASのスクリプトに追加していきます。こちらの記事内のサンプルコードに追加する形であればすぐ使えるようになります。
ChatGPTから応答を受け取る際に、使用したトークン量も取得するようにします。トークン使用量はレスポンスの「usage」に入っていますので、以下のような処理になります。
↓コピペ用
// API利用記録
function recordToken(usage) {
var promptTokens = usage.prompt_tokens;
var completionTokens = usage.completion_tokens;
var totalTokens = usage.total_tokens;
var price = totalTokens * (0.002 / 1000);
var sheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName('テスト用');
var limit = sheet.getRange('G2').getValue();
var remaining = Math.round((limit - price) * 100) / 100;
sheet.getRange('G2').setValue(remaining);
var lastRow = sheet.getLastRow();
var today = new Date();
sheet.getRange(lastRow+1, 1).setValue(today);
sheet.getRange(lastRow+1, 2).setValue(promptTokens);
sheet.getRange(lastRow+1, 3).setValue(completionTokens);
sheet.getRange(lastRow+1, 4).setValue(totalTokens);
sheet.getRange(lastRow+1, 5).setValue(price);
}
上記関数を、ChatGPTのAPIを呼び出したあとに追加します。引数は、APIレスポンスのなかから「usage」を取り出したものになります。
これでプログラム側の設定は完了です。
GPT-4の場合は計算方法が異なるので注意
2023 4/1現在、まだGPT-4のAPIを使うことはできませんが、GPT-4のAPIは料金の計算方法が異なります。
料金体系は「8K context」と「32K context」の二種類あります。コンテキストというのは会話履歴のことです。ChatGPTのAPIは会話履歴を保持していません。なので、連続してやり取りを行う場合、以下のように会話履歴を含めて質問する必要があります。
また、入力トークンと出力トークンの料金も異なっていますので、計算する際には以下のようになります。
// GPT-4の料金(8K):prompt:$0.03 / 1K tokens,Completion:$0.06 / 1K tokens
var promptTokens = usage.prompt_tokens;
var completionTokens = usage.completion_tokens;
var totalTokens = usage.total_tokens;
var price = promptTokens * (0.03 / 1000) + completionTokens * (0.06 / 1000);
GPT-4のAPIは、順番待ち登録が必要です。詳しくは以下記事をご参照ください。
トークン節約のために
トークン使用量を記録することで、無料分があとどのくらいか、毎日のどのくらい利用されているのかを把握することができます。ただ、トークンの使用量自体を節約するという視点も重要になります。
応答文の長さを制限しておく
ChatGPT APIでは、デフォルトでは応答文の長さ制限は設定されていません。そのため、gpt-3.5-turboの最大トークンである4,096トークンまでは応答文として生成されうるということになります。Web版のChatGPTでも、かなり長い文章で返ってくることがありますよね。
この対策として、APIリクエスト時にトークン最大数を設定しておくことが有効です。
// リクエストオプション
const options = {
'method': 'POST',
'headers': headers,
'payload': JSON.stringify({
'model': MODEL_NAME,
'max_tokens': 256
'temperature': MODEL_TEMP,
'messages': messages
})
};
// HTTPリクエストでChatGPTのAPIを呼び出す
const res = JSON.parse(UrlFetchApp.fetch(GPT_ENDPOINT, options).getContentText());
質問が冗長にならないようにする
この対策は、サービスとして公開している場合はあまり有効ではありませんが、個人やチームで使っている場合には意識すると良い内容です。
ChatGPTに対して質問する際に、なるべく無駄な言葉を省き、短い文章で質問するようにします。
上記の例では、同じ質問内容ですが2番目の質問文のほうがトークン数を節約できています。日本語で質問する場合は、英語と比較してトークンを消費しがちなので、長い質問文になる場合は英語で質問するのも手です。
ChatGPT API使用時のトークン節約術については、以下記事をご参照ください。
まとめ
今回は、ChatGPT APIの使用料金の計算方法と、使用履歴を記録する方法について紹介しました。ChatGPTのAPIはとても低コストなので個人で使うぶんには気にする必要はありませんが、サービスとして提供している方は利用状況を把握できると便利です。
今回はスプレッドシートで管理する方法を紹介しましたが、データベースで管理したりcsvファイルにするなど、目的に合わせて変更すると良いかと思います。当ブログでは、ChatGPTに関する様々な情報・アイディアを投稿しています。是非その他の記事も見ていただけたら嬉しいです!
コメント