GPT(Generative Pre-trained Transformer)、GPT-2に次いで2020年06月に人数制限付きでAPIが公開されていたGPT-3(かのイーロン・マスク氏が共同代表のOpenAI発表の与えられたフレーズの次に来る言葉を予測する機械学習による自然言語処理モデルの第3バージョン)が、昨日の2021年11月19日、人数制限が撤廃され、広く公開されたということで早速、利用させて頂くことに。
登録は無料ですが、API利用は有料!?みたいなので要注意(超巨大データを使ったマシンラーニングには莫大な費用かかってるでしょうからね)。
ただ、現在は、最初の3ヶ月間有効な18ドル分の無料クレジットの実験中っぽいです。
どうやって請求されるのか?18ドル超えるか、3ヶ月経過後から?
以降は?あくまで現時点では、半角約4文字で1トークンらしく、各処理エンジンada/babbage/curie/davinci、それぞれ1000(1k)トークンいくら的な料金体系。
ということは、日本語が基本2バイトだから2文字/トークン?、2000文字/1000トークン以内で?一番単価が高いdavinciだと今は0.06ドル(6セント)、無料クレジット18ドルってことは、300倍?、2000文字x300=60万文字?
計算間違ってなくて、3ヶ月18ドル無料クレジットが有効なら、期限内にExamplesを1〜2件ずつテストするくらいは、どの処理エンジンを選んでも十分、無料でいけそう?
よく見たら、ログインすれば、利用量・利用料をグラフ付き等々で確認できるダッシュボードがあるとのことで確認してみたところ...。
日別グラフを見るとIntroduction時点からカウント、エラーになったケースも含まれる模様。
また、当然?応答のresponseだけでなく、問いかけなどのprompt分も含まれるようです。
それを含め、Examples 5件、基本、日本語でそれぞれ各2〜3回程度実行で現在0.55/18ドルとなっています。
Examplesのケーススタディは、現時点で49件あるので順調にいけば、5.5ドルもあれば、いけそう、ということは余力さえあれば、無料枠内でまだ他でも遊べそうです。
気づけば、[Grant 1 $18.00 2022年3月1日]とあり、どの辺りがしきい値なのか、20日からだと期限は、翌月からカウントされるようですね。
[2021/12/04] 処理エンジンにdavinci-codexを使う9件ほどはエンジンがないエラーになりつつ、Examplesをすべて試してみたところ、無料枠の1/10程度の1.88/18ドルでした。
利用開始には、次の手順が必要でした。
ログイン後にアクセスすると冒頭に自身のAPIキーが表示されるDeveloper quickstartに沿ってcurlサンプル、openaiのpip/pip3によるインストールとサンプルを実行していきたいと思います。
が、インストールは簡単な一方、自身の環境の問題か、OpenAI側のうっかりミスなのか、サンプルは、すんなりとはいかず、諦めとちょっとした対策が必要なので要注意。
最初のcurlコマンドのサンプルからしてつまづきます。
自分のAPIキーを入れ、実行すると何も返ってきません。
なぜか、再現しませんが、エラーが出ることも。
応答がないのは、各種ExamplesのPythonスクリプト同様、内部で出力設定されていない可能性が高そうです。
このままでは、進まないので、とりあえず、openaiをインストールしてみることに。
openaiのインストールはpip/pip3で簡単。
順が逆になりますが、端末からコマンドを実行すると...API keyがないエラー。
ならばと後述のエラーメッセージにあるようにopenai.api_key = API-KEY(もちろん自分のキー)を入れても...エラー。
が、環境変数に設定したら、This is a test. (Demonstratorsと返ってきました。
前後しますが、OPENAI_API_KEYをexportする前にスクリプトに挑戦するも...同じようなAPI keyないよエラー。
それもそのはず、os.getenv(OPENAI_API_KEY)は、環境変数OPENAI_API_KEYの値を取得する関数なので、この環境変数にAPI KEYを設定しなければなりません。
ちなみに前述のopenai apiコマンドライン操作は、あのままではできなくなりますが、環境変数OPENAI_API_KEYを使わなくても、エラーメッセージにもある通り、openai.api_keyに直接APIキーを入れても、ファイルにAPIキーを保存してopenai.api_key_pathを指定してもいけます。
自身は、Debian GNU/Linuxでsh/bashを使っているのでマシン起動時に設定しておくべく、.profileなり、.bash_profileや.bashrcなりに(export OPENAI_API_KEY=...と)追記しておくことにして、とりあえず、端末からexport。
ということでexport OPENAI_API_KEY=...として改めてスクリプトを実行すると何も返ってきません...。
そりゃそうだ、このPythonスクリプトには、出力ステートメントがない...。
というわけで調べてみると結果がjson形式で返ってくるらしくjson形式で結果を得れば良いらしい。
json形式なら、結果を取得してみれば、配列構造もわかるでしょ、ということで実行。
おお、結果が出力され、配列構造も、試しに日本語で「空がきれい」として実行したところ、(今回は)「だった」という結果が配列要素textに入ってくるということもわかりました。
通り一辺ではないでしょうから、実行する度に違う答えが返ってくるのでしょう。
試しにresponse['choices']、response['choices'][0]、response['choices'][0]['text']を出力するようにしてみました。
すると同じ「空はきれい」に対し、今度は、「だし、なに」と返ってきました。
が、句読点のせいか、配列全体の方のtext値は、文字コードになっているようです。
ここではJson形式の結果が芳しくないですが、ExamplesのEnglish to French英語から仏語への翻訳では、Json形式では正しく結果を取得できる一方、print文だとフランス語の文字によっては?[TypeError: can only concatenate tuple (not "str") to tuple]といったエラーが出るので明示的に文字列へのキャストを要すこともあるなど、一長一短です。
利用者で対処できる部分はまだしも、冒頭のcurl結果がかえってこない件やドキュメントへのprint文やjson取得サンプルの反映含め、OpenAIに改善をお願いしたいところですね。
というわけで次回は、Examplesを試してみたいと思います。