Aikの技術日記

技術的な進捗とか成果とかを細々と投稿するブログです。時々雑記も。

OpenAI API使ってみた

はじめに

お久しぶりです、筆者です。

最近巷でChatGPT、およびOpenAIが有名になり…。
さらにはOpenAIがAPIを提供してくださるようになり、「テキストを投げて〇〇ができる!」という類のサービスが急増していますな。

友人等周りの方もChatGPTやOpenAI APIを活用してあられ、とても楽しそうなので…。
筆者も折角だし波に乗ろうと思った次第です。

というところで、本記事では「OpenAI APIの環境構築方法」「OpenAI APIで何ができるか」「課金体系」を見ていこうかと。
それではいきましょう٩( ‘ω’ )و

OpenAI APIの環境構築方法

まずは環境構築から。

執筆当時(2023/03/19)現在、OpenAI APIを使うには:

  • 公式ライブラリを使用する方法
  • REST APIを使用する方法

…の2つがあります。

公式ライブラリはPythonNode.jsで提供されており、
他言語のライブラリもコミュニティライブラリといった形で提供されていますが…。
OpenAI側ではこれらライブラリのセキュリティ検証等は行なっていないとのこと。

コミュニティライブラリは執筆当時(2023/03/19)時点で:

…に対応したものが出ているようです。
詳しくはこちら

なお、本記事では、基本的に「REST APIを使用する」前提で話を進めますのでご留意を。

そして、いずれの方法でも使用時には「AccessToken」が必要です。
取得するには、OpenAIのアカウントが必要なので…持ってない人は登録しましょう。
アカウント作成自体は無料でできます。※ChatGPTを使っている人なら既に持っているはずです。

AccessTokenの取得方法

AccessTokenは、OpenAIのアカウントページで取得可能です。
ログインした状態で以下にアクセスし:
https://platform.openai.com/account/api-keys

「Create new secret key」をクリックすると、AccessTokenが表示されたモーダル画面が開きます。
モーダル画面を閉じちゃうと、AccessTokenは再コピーできなくなるので気をつけて。

なお、執筆当時(2023/03/19)ではAccessTokenは何個も作ることができそうです。
作成したAccessTokenの削除も簡単なので、誤って作っちゃっても安心かも。

※所持しているOpenAIアカウントが複数のOrganizationに所属している場合、AccessTokenと一緒にOrganizationIdも必要です。
AccessTokenを取得したページの左メニュー「ORGANIZATION」>「Setting」から取得できます。
アクセスすると「Organization ID」という項目があるので、その内容をコピーしましょう。

OpenAI APIへリクエストしてみよう

上記2つを手に入れたら、試しにREST API形式でリクエストを送ってみましょう。
OpenAIが提供するAPIには、無料で使える物があるので…動作確認に使うといいでしょう。

例えば、OpenAI APIが提供する「モデル」(応答の生成エンジンのこと、例:chatgtp3.5-turbo)の一覧を取得するAPIは無料で使えるので…。 https://platform.openai.com/docs/api-reference/models

AccessTokenを$OPENAI_API_KEYの部分に入れてリクエストしてみてください。

curl https://api.openai.com/v1/models \
  -H "Authorization: Bearer $OPENAI_API_KEY"

こんな感じのデータが返ってくれば、正常にリクエストできている証拠です。

{
  "data": [
    {
      "id": "model-id-0",
      "object": "model",
      "owned_by": "organization-owner",
      "permission": [...]
    },
    {
      "id": "model-id-1",
      "object": "model",
      "owned_by": "organization-owner",
      "permission": [...]
    },
    {
      "id": "model-id-2",
      "object": "model",
      "owned_by": "openai",
      "permission": [...]
    },
  ],
  "object": "list"
}

支払い方法を登録しよう

ここまで来たら、あとは支払い方法を登録するだけです。
…というのも、OpenAI APIはChatGPTのように「テキストを入力し、その内容に応じて返答を返す」類の物を使いたい時は有料なのです…。

もし自分のアカウントに無料クレジットがあるならそれを使えますが、OpenAIは執筆当時(2023/03/19)ではAWSのように「1ヶ月ごとに最初のXXまでは無料」みたいな事をやっていないので。
使い続けてれば、いずれは有料になってしまいますしね…。

自分のアカウントに無料クレジットがあるかどうかは、OpenAIにログインした状態で以下にアクセスし:
https://platform.openai.com/account/usage

「Usage this month」>「$0.00 / $4.00」の右辺の部分が$0以上であればあると認識してOKです。
※右辺がアカウント内で使用可能な残りクレジット数を指します

OpenAI>Usage this month画面

支払い方法の登録は、以下にアクセスし:
https://platform.openai.com/account/billing/overview

「Payment methods」をクリックし、「Add Payment method」をクリックすればクレジットカード登録画面に行きます。
クレジットカード以外の支払い方法は執筆当時(2023/03/19)では非対応っぽいのでお気をつけて。

これで環境構築は終了です、お疲れ様でした!

OpenAI APIで何が出来るか

お次はOpenAI APIを使って何ができるか見てみましょう。
執筆当時(2023/03/19)段階では、主に以下のAPIを利用可能です:

  • Completions:
    • テキストを入力し、その内容に応じて返答を取得、有料
  • Chat:
    • テキストを入力し、その内容に応じて返答を取得、有料※執筆当時(2023/03/19)時点ではBeta版
    • ChatGPTライクなのを作りたいならこれ
  • Edits:
    • テキストを入力し、そのテキストを編集したものを返す、有料
    • テキスト校正、スペルミス修正として使えそう
  • Moderations:
    • 入力テキストが暴力的かどうか、センシティブかどうか等OpenAIのコンテンツポリシーに抵触してないかを返す、無料
  • Embeddings:
    • テキストを入力し、そのテキストが示すベクトルを返す、有料
    • 感情分析に使える…かも?
  • Fine-tunes:
    • モデルのカスタマイズができる、微調整程度しかできないみたいだが…。詳細はこちら
    • OpenAIが提供するモデルを自分でカスタムしたい場合はこれ
  • Models:
    • OpenAI APIが提供する「モデル」一覧取得、無料で使用可能
    • APIで使用するモデルを変えたいならここからデータ取得しよう

他にもBeta版のAPIが色々あり、テキストを投げたら画像生成してくれるものや、音声をテキスト変換してくれるものまであります。
テキストToテキストな処理は、現時点でも色々出来そうで嬉しいですね。

これらAPIの具体的な紹介まで…やりたいですが、内容があまりに膨大なので。
Completions、Chat、Moderations、Models、Editsのリクエスト値/レスポンス値の紹介のみに留めておこうと思います。
TypeScriptで返却値の内容&説明を書いたコードを置いておくので、そちらを参照ください。

※不明瞭なパラメータがちょいちょいあり、そこには?をつけています。
※Completionsについては、下記記事を参考にさせていただきました! 各プロパティを噛み砕かれて紹介してくださり非常にわかりやすかったです…! note.com

OpenAI APIの課金体系について

先に紹介したAPIの中で、ちらほら「有料」と記したものからお察しの通り…。
OpenAI APIはコアとなる機能は無料では出来なくなっています。

また、従量課金式となっているので…使った分だけ課金される形ですね。
ではここからは、具体的にどのような課金体系となっているかを紹介できれば。

OpenAI APIの課金は「入力内容と出力内容の合計トークン数」×「各モデルの1トークン別使用量」で計算されます。
※請求は月単位となっております
順を追って説明しましょう。

トークンについて

まずは「入力内容と出力内容の合計トークン数」について…の前に、そもそもトークンとは?というところで。
トークンは「OpenAIがテキストを解釈する際の単位」、と言えばいいでしょうか。

例えば下記のテキストであれば、OpenAI側では26トークンとして扱われます。

こんにちは!今日の天気を教えてください。

大体2〜3行の日本語質問であれば、250トークンになる感じです。
Tokenizerを使えば、どんな入力が何トークンになるかを検証できます。

公式Docsによれば、英語4文字=1トークンとなるように調整されているとのこと。
日本語だと特に漢字系は、1文字でも複数トークンとして扱われることが多いので…気になる場合は、英語変換してから処理するといいかもしれません。

課金時のトークン計算対象は、「APIへ入力した文字」と「APIが返してくれる出力文字」をトークン単位でカウントした合計数となります。
具体的に何トークンとして計算されたかは、各APIの返却値usageプロパティに記載あるのでそちらを参照に

各モデルの使用量について

お次は「各モデルの1トークン別使用量」についてですね。
執筆当時(2023/03/19)時点では、ChatAPIで使えるgpt-3.5-turboは「1000トークン=$0.002」となっています。

…そう、ビックリするくらいお安いんです…。
画像生成系のAPIだとそこそこお値段が上がりますが、テキスト系のを扱うならこれほど安く済んじゃいますぞ。

※他のモデルについてはこちら参考に: https://openai.com/pricing

課金額を試算してみよう

ここまでの情報をもとに、試しに課金額を試算してみましょう。

ChatAPI、モデルはgpt-3.5-turbo使用、月々日本円500円に収まる範囲で使用すると考えましょう。
※日本円は執筆当時(2023/03/19)のレートだと1$=131.84円なので、 約3.8ドルとなります

0.002ドル:1000トークン = 3.8ドル:xトークン
3800=0.002x
x=3800/0.002
x=1900000

…と、190万トークン使えることになります。
仮に入力&応答とも300トークンだとすると、3167回分会話が出来ることになります…。
個人でのみ使用するなら、500円も出せばまず満足するほど使えるでしょう。

とは言え実際は、プロンプトチューニングと言われる様に入力内容をチューニングしたりすると思うので…。
本当にこれだけ会話が可能だ、とは確証は出せませんが。

おわりに

今回はOpenAI APIの使い方や、どんなことができるか、課金体系についてまとめてみました。
まだまだ新しいサービスなので、今後もどんどんアップデートされていくとは思いますが…。
API経由であってもここまで安く使えるのは嬉しい限りですね。

筆者は機械学習分野にあまり詳しくないですが…。
APIのレスポンス値を深掘りすると、その分野に関する内容が結構出てくるので。
OpenAI APIやChatGPTを通じて、機械学習への足がかりにするのも面白いかなと思ったりします。

当記事がなにかのお役立てになれば幸いです…。
それでは|д゚*)

余談:課金額を調整する方法

OpenAI APIは従量課金なので、うっかり知らない間にたくさん使ってとんでもない請求額が来るってのは怖いですよね…。
そんな不安への対策か、OpenAI APIは「毎月のAPI使用量上限」を定めることができます。

設定はUsage limitsから行えます。 OpenAI>Usage limits画面

Hard limitSoft limitというのが設定できるものですね。
Soft limitは「この金額以上のリクエストが来たら、メールで通知するよ」という設定です。
通知が来るだけで、それ以降も課金はされるというのは気をつけて。

Hard limitは「この金額以上のリクエストが来たら、拒否するよ」という設定です。
「絶対にこの金額以上は超えたくない!」という金額を設定するといいでしょう。

なお、画像にあるApproved usage limitが指す値の通り、毎月「$120.00」までが絶対上限となってます。
Hard limitSoft limit、どちらもこの値は越えることができません。
もし超えたい場合は、増額リクエストを送れば対応してくれるとのこと。
まぁ個人開発レベルでは不要でしょうが…。

注意点として、OpenAIが課金状況を反映する前に大量のリクエストが飛んだ場合…。
課金額がHard limitの値を超える事もあるのでお気をつけて。
※個人開発レベルでは無限ループをしでかすような事がない限りはないでしょうが。