2023年3月1日に、ChatGPTのAPIが提供開始されました。今回は、ChatGPT APIの料金体系、実際に他アプリからAPIをリクエストする方法、ChatGPT APIを使用する上での注意点を解説します。
なお、ChatGPTについての基本的な内容は以下の記事にて解説しています。適切な質問方法や絶対に気を付けるべき点についてはAPIを使う上でも共通している点が多いため、ぜひご一読ください。
ChatGPT APIとは
はじめに、ChatGPT APIとは何かを簡単に説明します。
ChatGPTとは
ChatGPTは、OpenAIという企業が開発したAIチャットサービスです。OpenAIには、ChatGPT APIの他にも、音声をテキストにするためのモデルやコードの解析/生成モデルなど用途別にAPIが提供されています。
APIとは
「API」とは、「Application Programming Interface」の略で、異なるアプリやソフトをつなげる仕組みのことです。
例えば、物件情報のページにGoogle Mapが埋め込まれている場合がありますが、これがAPIです。「Google Maps API」という、Google Mapの機能を埋め込むことのできるAPIが公開されており、これを使うことで外部のサイトからGoogle Mapが見れるようになります。
つまり、ChatGPT APIとは
つまり、ChatGPT APIとは、ChatGPTの機能を外部のアプリやソフトから使うための橋渡的役割です。ChatGPT APIを使うことで、わざわざブラウザからChatGPTのページを開かなくても、LINEやSlackなどの外部アプリから使うことができるようになります。
ChatGPT APIのモデルは「gpt-3.5-turbo」
ChatGPTのAPIのモデルには、gpt-3.5-turboが採用されています。ChatGPTはGPT3.5であり、ChatGPT APIと言語モデルが異なります。OpenAIの言語モデルの説明には、「gpt-3.5-turboは、最も高性能でコストパフォーマンスの高いモデル」と記載があります。
2023年3月4日現在は「gpt-3.5-turbo-0301」というバージョンで、2023年6月1日までのサポートとなります。4月にはgpt-3.5-turboの安定版をリリースするとOpenAIは発表しています。
参考:Introducing ChatGPT and Whisper APIs / ChatGPT upgrades
ChatGPT APIの料金・プラン
デフォルトは体験版(無料)、その後は従量課金制
デフォルトでは体験版となっていますが、18ドル分(日本円で2445.21円)のクレジットが付与されており、18ドルまでは無料で利用することができます。その後は従量課金制となり、料金は利用する言語モデルごとに異なります。定額プランはありません。
試用版の期間が終了すると、有料版に移行しない限りAPIが利用できなくなります。移行方法は以下記事にて解説しています。
ChatGPT APIの料金は、1000トークンあたり0.002ドル(日本円で0.27円)です。ChatGPT APIにはgpt-3.5-turboというモデルが使用されており、従来のモデルであるGPT-3.5よりも10倍も安くなっています。
以下は筆者がgasからChatGPT APIをリクエストしたあとの状況です。2回のリクエストで860トークンでした。
ChatGPT APIの使い方
では、実際にChatGPTのAPIを使う方法について順を追って解説します。
まず、ChatGPT開発元のOpenAIの公式ページを開き、画面左上メニューからProduct>Overviewを選択します。
Our API platform~という文言の下にある「Get Started」を選択すると、別タブでアカウント登録ページが開きます。
ChatGPTをすでに利用したことのある方は利用開始時に電話番号認証をしているので、ChatGPTを利用したときと同じアカウントでContinueを押下するとChatGPT APIのページが開きます。
右上の「Personal」と書いてある部分を押すと、メニューが開きますので、そこから「View API keys」を選択します。
APIキーの管理画面に遷移します。
APIキーはデフォルトでは発行されていないので、「+Create new secret key」を押します。以下のようなダイアログがでたら、閉じる前にAPIキーをメモしておいてください。(APIキーはこのダイアログを閉じると再び見ることはできません)
このダイアログはOKを押さなくとも、ダイアログ外を押しただけで閉じてしまうので注意が必要です。もし、間違って閉じてしまった場合には再度APIキーを発行してください。
このAPIキーを使って外部アプリからアクセスします。具体的な事例は次項にて解説します。
GASからChatGPT APIにリクエストする
ここからは、Google Apps Script(GAS)からChatGPTのAPIにリクエストする手順を解説します。
ChatGPTのAPIをリクエストするスクリプト
GASのスクリプトに、以下のコードを貼り付けます。
const API_TOKEN = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
const GPT_ENDPOINT = 'https://api.openai.com/v1/chat/completions';
const MODEL_NAME = 'gpt-3.5-turbo';
const MODEL_TEMP = 0.5;
const MAX_TOKENS = 256;
function requestGpt() {
// ChatGPTに投げるメッセージ
const messages = [{ 'role': 'user', 'content': 'Hello!' }];
// リクエストヘッダ
const headers = {
'Authorization': 'Bearer ' + API_TOKEN,
'Content-type': 'application/json',
};
// リクエストオプション
const options = {
'method': 'POST',
'headers': headers,
'payload': JSON.stringify({
'model': MODEL_NAME, // 使用するGPTモデル
'max_tokens': MAX_TOKENS, // レスポンストークンの最大値(最大4,096)
'temperature': MODEL_TEMP, // 応答の多様性(0-1)※数値が大きいほどランダムな応答になる
'messages': messages
})
};
// HTTPリクエストでChatGPTのAPIを呼び出す
const res = JSON.parse(UrlFetchApp.fetch(GPT_ENDPOINT, options).getContentText());
// レスポンスから応答文を取り出す
console.log(res.choices[0].message.content);
}
スクリプトの初回実行時のみアクセス許可が必要
スクリプトの初回実行時には、以下のようなアクセス許可を求めるダイアログが出ます。左下の「詳細」を押下して、
さらに、その下にある「chathpt api(安全ではないページ)に移動」を押下します。「安全ではない」とビビらせてきますが、ChatGPT APIに限らずGoogleスプレッドシートと連携するときですら初回実行時は表示されますので気にしないでOKです。
以下の確認が出ますので、「許可」を押下
これでGASのスクリプトが実行され、ログが出力されます。
ChatGPT APIリクエストについての説明
ChatGPTのAPIへのリクエスト内容について解説します。
必須項目
ChatGPT APIにリクエストする際に必須の項目は以下です。
項目名 | 概要 |
---|---|
model | 使用するGPTモデル(ChatGPTのAPIは「gpt-3.5-turbo」) |
messages | 以下2つを設定する ・role:役割 (assistant,user,systemのいずれか) ・content:ChatGPTへの質問内容 |
modelには、使用するモデルを設定します。「gpt-3.5-turbo-0301」と設定しても動作しますが、末尾のバージョンをつけなくても最新のバージョンで実行されます。敢えて特定のバージョンで実行したいという場合以外は、末尾のバージョンはつけないほうが良いかと思います。
messages>roleはassistant(チャットボットの発言)、user(ユーザーの発言)、system(チャットボットの設定)のいずれかを設定します。
systemというのがいまいちイメージしづらいですが、簡単にいうと「チャットボットのキャラ設定のようなもの」です。
上記では、最初に「あなたは関西弁を話すアシスタントです」と設定したうえで話しかけた結果です。「調子どう?」と聞いたところ、関西弁になりきって答えてくれました。(実際、関西の方ってこんなコテコテなんですかね!?)
任意だけど設定しておいたほうが良い項目
ChatGPT APIにリクエストする際のオプションに設定する項目は以下になります。
項目名 | 概要 |
---|---|
max_tokens | レスポンストークンの最大値(1~4,096)。デフォルトは4096 |
temperature | 応答の多様性(0-1)。デフォルトは1。※数値が大きいほどランダムな応答になる |
他にもオプションに設定できる項目はありますが、上記の2つは設定しておくことをおすすめします。max_tokensはレスポンストークンの最大値で、1~4096の範囲で設定できます。これを設定しておかないとデフォルト値はMAXの4096なので、使い方よってはかなりのトークンを消費してしまう可能性があります。
temperatureというのは応答の多様性で、0~1の範囲で設定できます。数値が小さいほど応答は確定的となり、0の場合は必ず同じ応答がかえります。逆に、1に近ければ近いほど応答はランダムになります。
すべてのオプション項目はOpenAIドキュメント>Create chat completionを参照ください。
注意点
ChatGPT APIのリクエストを試してみて、ここは気を付けないといけないなと思った点を以下に記載します。
日本語の文章は無駄にトークンを消費しがち
「トークン」とは、文章をそれ以上分けることができない最小単位にしたもののことです。
※OpenAIのモデルは、厳密には上記のような形態素解析ではなく独自の解析をしています
例えば、「ChatGPTでできることはなにがありますか?」という文章は、「ChatGPT」「で」「できること」「は」「なに」「が」「ありますか?」と7つに分けることができるため、トークン数は7となります。「ChatGPTでできること」であれば、「ChatGPT」「で」「できること」とトークン数は3になります。
対策1:質問が冗長にならないよう気を付ける
トークン数を節約したい場合には、質問する際に文章が冗長になっていないか意識するとよいでしょう。「〇〇するにはどのような方法があるか教えてください」でなく、「〇〇する方法」など無駄な内容を含めないようにします。
日本語だとどうしても長くなってしまうという場合には英語で聞くのも一つの手かと思います。
対策2:API利用状況をこまめにチェックする
API使用状況はOpenAIの公式ページ>Usageから確認できます。
また、リクエストのレスポンスの「usage」からも確認可能です。
prompt_tokensがユーザーが投げた質問文のトークン数、completion_tokenがChatGPTからの応答文のトークン数、トータルで消費したトークン数となります。
対策3:API使用に制限を設ける(クレカ登録が必要)
APIの使用自体に制限を設けることも可能です。
Billing overview の「Set up paid account」を押下し、クレジットカード情報を入力するとUsage limitsのページから設定ができるようになります。
ChatGPTのAPIは会話履歴を保持しない
「gasからAPIリクエストするならuserでいいんじゃないの?」と思うところですが、ここで注意しなければならないのが、ChatGPTのAPIは会話履歴を保持しないということです。
例えば、1回目のAPIリクエストで「ChatGPTの活用方法を教えて」と質問したあと、続けて2回目のリクエストで「他にない?」と質問しても、前回質問された内容を保持していないため適切な回答が返ってきません。
過去の会話を保持するには、過去分のやりとりを含めてChatGPTのAPIにリクエストする必要があります。例えば、以下のようにuser(質問者)とassistant(ボット)のやりとりを含めて、「何県にある?」と聞きます。
先ほどは過去のやりとりを含めなかったため適切な回答が得られませんでしたが、今度は過去のやりとりをもとに富士山についての質問だと読み取って回答しています。
参考:Chat completions / Introduction
まとめ
今回は、ChatGPTのAPIについて、料金や基本的な使い方を解説しました。
無料プランでも十分に使えそうではありますが、トークンの使用量には注意が必要です。記事内でも少し触れたとおり、単純に形態素解析をしているわけではなく独自の解析をしているため、APIリクエストを投げる前に確認する場合にはOpenAIのtiktokenライブラリを使う必要があります。まあ、個人利用でそこまでヘビーに使わなければ大丈夫だとは思いますが・・・
gasから簡単にAPIを利用することができたので、今度はLINE botと連携してLINE上で使えたら便利そうだなーと考えています。
コメント