0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OpenAI APIの想定外課金を防ぐ|Spend Limitを$5に設定してみた

0
Posted at

OpenAI APIを個人開発で使い始めました。

APIそのものを動かすところまでは問題なかったのですが、気になったのが従量課金です。

例えば、

  • APIキーが漏れる
  • プログラムが無限ループする
  • retry処理を間違える
  • テストコードが大量リクエストを送る
  • 想定以上に外部アクセスされる

といったことが起きた場合、

「どこまでAPI料金が増えるのだろう?」

という不安がありました。

そこで今回は、実際にOpenAI API PlatformのLimits画面を確認し、個人開発・テスト用途として月額Spend Limitを$5に変更しました。

この記事では、設定手順だけでなく、

  • APIクレジット
  • Spend Limit
  • Hard Limit
  • Spend Alert

の違いも整理します。


今回の前提

今回確認した私の環境では、Limits画面に次の内容が表示されていました。

Usage Tier:Build

Organization spend limit:
$100

Spend alerts:
80%  → $80
100% → $100

また、API利用開始時に約$5分のクレジットを購入しています。

API利用量は、現時点ではごく少量です。

個人開発・テスト用途として考えると、

月$100まで利用できる状態は今の自分には大きい

と判断しました。

※Usage Tierや利用可能額、表示内容はアカウントの利用・支払い状況等によって異なります。OpenAIも、組織ごとに表示されている現在のLimitsを確認するよう案内しています。OpenAI Help Center


まず整理:$5のクレジットを買ったら、最大$5まで?

最初に気になったのがここでした。

私は約$5分のAPIクレジットを購入しています。

すると、

「 $5だけ買ったなら、最大でも$5しか使えないのでは?」

と思いたくなります。

しかし、プリペイド残高とSpend Limitは別の仕組みとして考えた方が安全です。

OpenAI公式では、新しいAPIアカウントはプリペイド課金を利用し、購入したクレジット残高からAPI利用分が差し引かれます。OpenAI Help Center

ただし、重要な注意があります。

OpenAI公式には、

クレジットがなくなっても、APIアクセスが即時停止しない場合がある

と説明されています。

処理遅延の間に発生した利用分は、**negative balance(マイナス残高)**として表示され、次回のクレジット購入から差し引かれる場合があります。OpenAI Help Center

つまり、

プリペイド残高 $5
=
絶対に$5.00で瞬時停止する

とは考えない方がよいです。


API課金まわりには複数の「Limit」がある

ここが一番分かりにくい部分でした。

現在のOpenAI APIでは、課金・利用制御に複数の仕組みがあります。

ざっくり整理すると、

項目 役割
Prepaid credit 前もって購入したAPI利用残高
Approved usage limit / Usage Tier OpenAI側から認められている利用規模
Spend Alert 指定額に達したことを通知
Spend Limit 支出限度値の管理
Hard Spend Limit 指定支出額到達後のAPI利用を止める制御
Rate Limit 一定時間内のリクエスト数・token数等の制限

です。

これらは同じものではありません。OpenAI Help Center


Spend Alertは「止める設定」ではない

私の画面では、

80%:$80
100%:$100

というSpend Alertがありました。

最初は、

100%になったらAPIが止まる?

とも思いました。

しかしOpenAI公式では、

Spend Alertは通知であり、APIトラフィックを停止させるものではない

と明記されています。OpenAI Help Center

つまり、

Alert = 知らせるもの

です。

一方、

Hard Spend Limit = 上限到達後の対象APIリクエストを失敗させる制御

です。OpenAI Help Center

この2つは分けて考える必要があります。


OrganizationとProjectでもLimitを分けられる

現在のOpenAI API Platformでは、Spend LimitはOrganization単位とProject単位の両方で設定できます。

OrganizationのLimitは配下のProject全体へ関係し、Project LimitはそのProjectへ請求されるAPI利用を対象にします。OpenAI Help Center

個人開発でもProjectを用途ごとに分ければ、

Project A:テスト
Project B:本番

のように支出管理を分けることができます。

ただし今回の記事では、まず自分が実際に変更したOrganization側のSpend Limitを中心に扱います。


実際にSpend Limitを変更した

OpenAI API Platformの Organization → Settings → Limits画面から、

Edit spend limit

を開きました。


image.png


今回設定したMonthly spend limitは、

$5.00

です。


なぜ$5にしたのか

$5という数字自体に特別な意味はありません。

今回の条件が、

  • 個人開発
  • APIの動作確認段階
  • まだ利用量が非常に少ない
  • 大量のAPI利用を予定していない

だったためです。

考え方としては、

必要以上に大きな上限を最初から持たず、小さく始めて必要になったら上げる

です。

API利用が本格化すれば、当然$5では足りなくなる可能性があります。

そのときに、

  • Usage
  • 実際のAPIコスト
  • 想定リクエスト量

を見ながら上げればよいと考えました。


Hard Limitになっているかは必ず確認する

ここは重要です。

現在のOpenAI APIではSpend Limitを、通知・監視だけのしきい値として使う場合と、Hard Limitとして強制する場合があります。OpenAI Help Center

したがって、

Monthly spend limitを$4と入力した

だけで、

必ず$5.00ぴったりで完全停止する

とは記事で断定しません。

Hard Spend Limitが有効な場合、OpenAI公式では追跡された支出が設定額へ到達すると対象APIリクエストを停止できると説明されています。OpenAI Help Center


image.png
image.png


Spend Limitだけで安全になるわけではない

上限設定は有効ですが、これだけに頼るのは避けます。

特にAPIキー自体が漏れないようにする方が先です。

OpenAI公式も、

  • APIキーをブラウザやモバイルアプリ等のクライアント側へ埋め込まない
  • Repositoryへcommitしない
  • 環境変数を使う
  • キーを適切にローテーションする
  • 利用状況を監視する

ことを推奨しています。OpenAI Help Center


APIキーをフロントエンドへ置かない

特にWebアプリでは注意が必要です。

例えば、

const apiKey = "sk-...";

のようにブラウザへ配信されるJavaScriptへAPIキーを書いてはいけません。

OpenAI公式も、ブラウザやモバイルアプリなどのクライアント環境へAPIキーを配置しないよう案内しています。OpenAI Help Center

基本は、

Browser
↓
自分のBackend
↓
OpenAI API

のように、キーをサーバー側で保持します。


GitHubへAPIキーをcommitしない

APIキーを、

config.js
.env
README

などへ書いたままGitHubへpushするのも避けます。

OpenAI公式も、APIキーをRepositoryへcommitしないこと、環境変数を利用することを推奨しています。OpenAI Help Center

例えば、

OPENAI_API_KEY=...

を環境変数として管理します。

.envを利用するなら、

.env

も確認します。


想定外課金の原因として考えたこと

今回、自分が気にしたのは次のようなケースです。

APIキー流出
↓
第三者からAPI利用

あるいは、

プログラムのバグ
↓
無限ループ
↓
大量APIリクエスト

ほかにも、

  • retry処理のミス
  • バッチの暴走
  • テストコードの大量実行
  • 想定以上のアクセス

などがあります。

どれも必ず起きるという話ではありません。

ただ、

起きてから請求額を見る

より、

先に自分の用途に合った上限を決める

方が運用しやすいと考えました。


今後の自分の運用

現時点では、次のようにします。

1. APIキーをコードへ直接書かない
2. GitHubへAPIキーを入れない
3. APIキーはサーバー側・環境変数で管理
4. Spend Limitを小さく設定
5. Hard Limitの状態を確認
6. Spend Alertも利用
7. Usageを定期的に確認
8. 必要になったらLimitを上げる

API利用量が増えたら、Project単位のSpend Limitも利用する予定です。


まとめ

OpenAI APIの課金管理を確認して、今回一番重要だと感じたのは、

プリペイドクレジット
Spend Alert
Spend Limit
Hard Limit

を同じものとして考えないことでした。

特に、

Alertは通知であってAPIを停止する設定ではありません。OpenAI Help Center

また、プリペイド残高も処理遅延によってマイナス残高が発生する可能性があるため、即時の支出停止装置としてだけ頼るべきではありません。OpenAI Help Center

今回は個人開発・テスト段階なので、

Monthly spend limit:$5

まで下げました。

$5が正解なのではなく、

今の用途に合った小さな上限から始める

という考え方です。

APIを使う機能だけでなく、「もし想定外に動いたら、どこまで使わせるか」も最初に決めておく。

個人開発でも、APIを使い始めるときの初期設定に入れておきたい項目だと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?