Aikの技術日記

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

OpenAI API使ってみた 2024年5月版

はじめに

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

最近巷でChatGPTが再度盛り上がりを見せていますね…。
それもそのはず、モデル「GPT-4o1」になりChatGPTが「画像、音声、動画」を受け付ける様になったのですから!2

これまでは文章ベースでしかやり取りできなかったのが、例えば:

  • この手書き文章を文字に起こして
  • この風景はどこに当たる?
  • 音声を日本語翻訳して

…の様に、一気に活用の幅が広がるかなと思います。

そして、当モデルはAPIでも使えるとの事なので。
筆者も早速試してみようかと思った次第です…が。

以前OpenAI APIについてまとめてみた時から、環境構築方法等が少し変わってそうなので…。 改めてこの辺からまとめてみようと思います。
(OpenAI、並びに生成AI関連は本当に進歩が早い…)

それではいきましょう٩( ‘ω’ )و
※スクショや各情報は執筆当時(2024/05)のものとなります。

OpenAI APIの環境構築方法

まずは環境構築から。
執筆当時現在、OpenAI APIを使うには:

…の2つがあります。
以前は他言語のライブラリも「コミュニティライブラリ」として紹介されてましたが、今はない様ですね。
なお、本記事では、基本的に「REST APIを使用する」前提で話を進めますのでご留意を。

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

APIキーの取得方法

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

"OpenAI>API Keys設定画面" 「Create new secret key」をクリックすると、APIトークンの設定画面が開きます。
"APIトークン作成モーダル画面"

  • Owned by: Youを選択
    • ※Youを選ぶとアカウントorプロジェクト3単位でAPIキーを作成します。とりあえず触りたいならこちらを選択しましょう
  • Name: 管理用のラベルです、未入力でもOK
    • APIリクエスト時には使用されない値です
  • Project: DefaultのままでOK
  • Permissions: 権限選択です、以下3つから選べます:
    • All: OpenAIが提供するAPI全てに操作ができます。検証用ならこちらを
    • Restricted: OpenAIが提供する各APIについて、権限を細かく調整可能です。特定APIしか叩きたくないならこちらを
    • Read Only: 読取権限のみ付与されますが、チャット機能は書込権限扱いっぽいので…あまり利用する価値はないかも?

参考…PermissionsRestrictedで選択可能な項目一覧

「Create secret Key」を押下すると、少し待ったのちAPIキーが生成されます。
"APIキー生成後モーダル画面" この画面を閉じちゃうと、APIキーは再コピーできなくなるので気をつけて。

なお、執筆当時ではAPIキーは何個も作ることができそうです。
作成したAPIキーの削除も簡単なので、誤って作っちゃっても安心かも。

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

APIキーを手に入れたら、試しにリクエストを送ってみましょう。
「モデル」の一覧取得APIは課金なく無料で使えるので…。
こちらを動作確認がわりに使うと良いかも。

APIキーを$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のように「テキストを入力し、その内容に応じて返答を返す」類の物を使いたい時は有料なので…。
先んじて、支払い方法の登録から行っちゃいましょう。

支払い方法の登録は、以下にアクセスし:
https://platform.openai.com/settings/organization/billing/payment-methods

「Add Payment method」をクリックすればクレジットカード登録画面に行きます。 前回の記事でもそうでしたが、クレジットカード以外の支払い方法は非対応っぽいのでお気をつけて。

また、以前は後払い式(使った金額だけ後から請求)でしたが…。
今年あたりから「前払い式」に変更になった様です。

Billingへアクセスすると、以下の画面が出ますが…。
"Billing画面"

ここの「Credit balance」というのが現在の残高です。
「Add to credit balance」をクリックすると、以下の様なモーダルが開くので:
"クレジット追加モーダル画面"

お好きな値を入力しましょう。

なお、最低値は$5です…。($1にならないかな…)
何回もチャージが面倒な場合は「Auto recharge」というのも使える様です。(筆者は怖くて試せてませんが…。)

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

OpenAI APIで何が出来るか

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

  • Chat
    • テキストを入力し、その内容に応じて返答を取得
    • ChatGPTライクなのを作りたいならこれ
  • Models
    • 使用可能なモデルを取得、各モデルの解説はこちら
  • Audio
    • テキスト→音声変換が可能、その逆もできる
    • トランスクリプション、翻訳機能を作りたいならコレ
  • Embeddings
    • テキストを入力し、そのテキストが示すベクトルを取得可能、詳しくはここ
    • 大量テキストデータの感情分析をしたいならコレ
  • Fine-tuning
    • モデルのカスタマイズが可能、微調整程度だが…。詳しくはここ
    • 特定用途の専用モデルにカスタムする事で、入力トークン節約/返答速度改善できる可能性が
  • Batch
    • 非同期で大量のリクエストを送付可能、24h以内に返答が返る、利用料金が50%割引される
    • 即答性を捨てて大量に安く会話したい時に
  • Files
    • OpenAI API上でファイル経由で入力したい時に使う
    • Batch、Fine-tuning、Assistantsでファイル入力を使用したい時に活用
    • ※GPT4-oの画像リクエスト時はこれを使わなくてOK
  • Images
    • テキストから画像生成
  • Moderations
    • 入力テキストが有害かどうか(暴力的、センシティブ、差別的発言等)を返す、詳しくはこちら
  • AIアシスタント構築機能関連、詳しくはこちら
    • Assistants: ベータ版
      • アシスタントを生成
    • Threads: ベータ版
      • Assistantsで生成したアシスタントと会話
      • Assistants - ThreadsでAIアシスタントツールを構築可能
    • Messages: ベータ版
      • スレッド内部でメッセージを生成
    • Runs: ベータ版
      • スレッド上で実行される命令(モデルとツールの呼び出しセット)を構築
    • Run Steps: ベータ版
      • スレッド上で実行される命令フローを閲覧
    • Streaming: ベータ版
      • スレッドの実行結果をストリーミング
  • AIを使ったファイル検索ツール構築(企業内データを保持し、簡単検索できる様に…みたいな)、詳しくはこちら
    • Vector Stores: ベータ版
      • 検索対象となるファイルを保存するための「ストア」を管理
    • Vector Store Files: ベータ版
      • 検索対象となるファイルを管理
    • Vector Store File Batches: ベータ版
      • 検索対象となるファイルを一気にアップロードするなど、複数ファイルを操作

前回の記事よりも、APIのエンドポイント数が大幅に増えてますね。
とはいえ、一部はセットみたいなAPIも多いですが…。

ChatGPTライクな物を想定しているなら、Chat, Image, Audioあたりが使えれば十分でしょう。
同期性を捨ててもOKなら、Batchを使ってみてもいいかもしれませんね。

なお、前回の記事で紹介した「Completions」はレガシーAPIに分類されてました。
まぁChatでほぼ同じ事出来てましたしね…。

OpenAI APIの課金体系について

OpenAI APIの課金体系については、前回の記事で紹介した時から少し変わり…。
「入力内容のトークン数」と「出力内容のトークン数」で決まります。
トークンって何?という方は前回の記事の「トークンとは」を参照に。

以前は入力/出力内容の「合計」トークン数だった気がするのですがね…。
ちなみにGPT-4oは出力トークン数の方が金額高めに設定されています。(詳しくは後述)

なお、トークンの数え方についてはモデルによって差異があります
例えば、GPT-3だと下記のテキストは「26トークン」でしたが…:

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

GPT-3.5/GPT-4だと、上記は「20トークン」として扱われました。
大体2〜3行の日本語だと、GPT-3は250トークンでしたが…GPT-3.5/GPT-4なら110トークン程度の様です。ありがたい!

なお、Tokenizerを使えば、どんな入力が何トークンになるかを検証できます。
現状の最新モデル「GPT-4o」は執筆当時(2024/05)だと「近日公開予定」と記載あり、検証不可でしたが…。
GPT-3→GPT-3.5/GPT-4でトークン数がだいぶ削れてる事から、GPT-4oはもっと少ないトークン数で行けるんじゃないか…と睨んでます。

画像について

GPT-4oでは「画像、動画、音声」を扱える様になりましたが…。
これらはどの様に課金額が決まるかが、公式記事に記載あります。

現状は「画像」しか記載がない様ですがね…。(APIも現状画像しか送れないですし)
画像は縦横のピクセル数で金額が決まり、一旦トークンとして換算されてから金額計算される様です。

執筆当時(2024/05)だと、「縦512px × 横512px」までが最低価格($0.001275)っぽく。
縦100px × 横100pxでも↑と金額は変わらず…。

…が、この値を少しでも超えると一気に値段が跳ね上がります。(とは言っても微々たる差ですが…)
いろんなパターン列挙してみたので参考までに:

  • 縦520px × 横520px = $0.003825
  • 縦720px × 横480px = $0.002125
  • 縦1920px × 横1080px = $0.005525

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

折角なので、GPT-4oを中心に各モデルのトークン別使用料を並べてみました。

こうして見ると、如何にGPT-4oが破格かわかりますね…。
最新モデルなのに、4系で最も安いってドウイウコトナノ。

また、お安さだけならGPT-3.5 Turboですが…。
先に述べた様に、後発モデルの方が「同じ文章でもトークン量が低くカウントされる」ので注意が必要かもですね。
…とはいえ他と比較して圧倒的に安いため、あまり気にしなくても良さそうですが…。

おわりに

今回はOpenAI APIの環境構築方法、課金形態やどんな事ができるかを軽くまとめてみました。

前回の記事から変わった所も多々ありますが、大筋は変わってはないので…。
以前からAPIを利用していた人なら、GPT-4oが出て「いっちょまた使ってみるか!」となったとしても、割とすんなり出来るんじゃないかと思います。

本当はGPT-4oにて、画像も一緒に送付して会話するにはどうしたらいいか〜までまとめたかったですが…。
流石に文量が多くなり過ぎるので、別の記事にまとめる事にしますorz。

個人的には、以前はなかったAPI「Batch」が結構気になってます…。
同期性を求めないなら50%OFFで使えるのは破格そうだな〜と思って。
その辺も↑の別記事にまとめるんじゃないかな…。

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

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

前回の記事で、OpenAI APIは「毎月のAPI使用量上限」を定める事ができると紹介しましたが…。
この機能は健在で、Usage limitsから設定を行えます。

とはいえ、金額は「前払い式」になったからそこまで不安がる必要はなさそうですがね…。
※現状の使用金額を見たい場合はUsageから見れます。

「Usage limits」での設定画面は以下の様になっており:
"Usage limits画面"

Set a monthly budgetが前回の記事のHard limit(この金額以上のリクエストが来たら、拒否するよ)、
Set an email notification thresholdが前回の記事のSoft limit(この金額以上のリクエストが来たら、メールで通知するよ)、
Usage limitが前回の記事のApproved usage limitに当たる設定です。

以前はUsage limitを増額リクエスト出来てたのですが、現状は無理っぽい?ですかね…。

なお、上記リクエスト制限は遅延が生じる恐れがあるとの事なので…。
無限ループをしでかしたりなどで、一気にリクエストしちゃうと制限を突破してしまう恐れもあります。
あまり過信はしすぎない方がいいかもですね。

また、以前は無かった?かもですが…。
各モデルによって、1分あたり & 1日あたりのレート制限が設けられている様です。

これは設定で変えられない値なので、この値には気を配りつつ使っていかないとですね。
最新のレート制限情報もUsage limitsから見れるので、併せて参照に。

余談:APIの使用状況を見たい

以前から出来てたかは不明ですが…。
Usageの「Activity」タブよりAPIリクエストの使用状況が正確に見れる様になりました!
"Usage > Activityタブ画面"

1ヶ月単位で見れるので、いつに自分がよく使ってたかもわかりますし…。
不審なリクエストがあった時も気づきやすいのはありがたいですね。

「Export」ボタンでCSV/TSV/JSON形式でエクスポートも可能な様です:
"Usage > Activityタブ画面 > Exportモーダル画面"

180日=約半年分までDL出来るのも嬉しいですね。
もし使用状況が気になったらこちらを参考に!




  1. モデル「GPT-4o」で可能です。oはommiという意味との事。詳しくはこちら
  2. この様に画像、動画、音声など様々な入力を一気に処理できるAIを「マルチモーダルAI」と呼ぶそうです。
  3. 1アカウントにつき、複数のプロジェクトを所持可能です。
    プロジェクトには複数メンバーを所属させられるため、共同開発時にはもってこいですね。
    なお、アカウント作成時には必ず「Default」というプロジェクトが生成されます。
    現在のプロジェクト状況を見るorプロジェクト新規作成には、OpenAIアカウントページ > Settings > Projectから閲覧可能です。