Gemini APIでお金を使いすぎない方法
[質問]
Google Gemini API で、利用料金が一定量を越えたら連絡がくるように設定しています。連絡だけでなく、自動的に無効化することは可能ですか。
[回答] Gemini
結論から申し上げますと、Google Gemini API(Google Cloud 版)において、標準機能だけで「予算に達したら自動で API を停止する」というチェックボックスのような設定項目は存在しません。
デフォルトの予算アラートは、あくまで「メールで通知する」だけです。しかし、Google Cloud の機能を組み合わせることで、自動停止の仕組みを構築することは可能です。
1. 自動停止を実現する仕組み
予算を超えた際に自動で API を無効化(正確にはプロジェクトの課金を停止)するには、以下の 3 つのサービスを連携させます。
- Cloud Billing(予算アラート): 予算の 100% 到達を検知し、Pub/Sub にメッセージを送信。
- Cloud Pub/Sub: 予算アラートの中継地点。
- Cloud Functions: 通知を受け取り、API を通じて対象プロジェクトの「課金を無効化」するプログラムを実行。
[!CAUTION] 注意点 課金を無効化すると、そのプロジェクト内の Gemini API 以外のリソース(ストレージ、データベース、VM など)もすべて停止します。また、一度停止したリソースは自動では復旧しない場合があるため、本番環境での運用には注意が必要です。
2. API 単体で「利用量」に制限をかける(推奨)
「プロジェクト全体を止めたいわけではなく、Gemini API の使いすぎだけを防ぎたい」という場合は、「割り当て(Quota)」の制限を設定するのが最も安全で簡単です。
- 設定場所: Google Cloud コンソールの「API とサービス」 > 「有効な API とサービス」 > 「Generative Language API」 > 「管理」 > 「割当」
- 方法:
Requests per minuteなどの上限を、あらかじめ決めた数値に手動で下げます。 - メリット: 設定した回数を超えるとエラーが返るだけで、他のサービスに影響を与えません。
3. 実装のステップ(自動停止を自作する場合)
どうしても自動停止させたい場合は、Google 公式のガイド「通知による Cloud Billing の無効化」に従って設定を行います。
主な手順:
- Cloud Billing API の有効化: プログラムから課金を操作できるようにします。
- Pub/Sub トピックの作成: 名前を
billing-alertsなどにします。 - 予算アラートの設定: 「管理通知」セクションで、作成した Pub/Sub トピックを接続します。
- Cloud Functions のデプロイ: 予算が 100% を超えたメッセージを受け取った際に、
projects.updateBillingInfoを呼び出して課金を解除するコードを記述します。
「そこまで複雑な設定はしたくない」ということであれば、「2. API 単体で上限を設定する」 方法で、1 日あたりのリクエスト上限を低めに設定しておく運用をおすすめします。
具体的な Cloud Functions のコード例や、割り当て制限の具体的な数値の決め方について詳しく知りたいですか?
★Quota割り当てについて
[質問]
Quotaの設定は、Requests per minute の他に、一ヶ月あたりの制限なども設定できますか。
残念ながら、Google Cloud の Quota(割り当て)設定において、「1ヶ月あたりの制限(Monthly Limit)」を直接設定する項目は用意されていません。
現在の Google Cloud の仕様では、API の利用制限は以下の 2 つの単位が基本となっています。
- 1分あたりの制限 (Requests per minute / RPM): 短時間のスパイク(過負荷)を防ぐ。
- 1日あたりの制限 (Requests per day / RPD): 1日の総利用量を抑える。
1ヶ月の予算を守るための「現実的な設定」
1ヶ月の予算を超えないようにするには、「1ヶ月の予算 ÷ 30日」 で計算した値を 「1日あたりの制限 (RPD)」 に設定するのが最も一般的な方法です。
| 制限の単位 | 設定可否 | 役割 |
|---|---|---|
| 1分間 (RPM) | ○ | 瞬間的なリクエスト過多によるエラーや課金増大を防ぐ |
| 1日 (RPD) | ○ | 24時間ごとの利用上限。これが「1ヶ月の総額」をコントロールする鍵 |
| 1ヶ月 (Monthly) | ✕ | 設定項目なし。 1日の制限を積み重ねて管理する |
具体的な設定手順(Google Cloud コンソール)
- Google Cloud コンソールの [IAM と管理 > 割り当て] ページに移動します。
- フィルターに
Generative Language API(またはVertex AI API)と入力します。 - 「Requests per day」 というメトリクスを探します。
- 右側の「編集」アイコンをクリックし、1日あたりの上限値を入力して保存します。
[!TIP] 計算例: もし Gemini API に月額 3,000 円までしか払いたくない場合、1,000トークンあたりの単価から逆算して「1日のトークン数」や「1日のリクエスト数」に上限をかければ、月間の請求額をほぼ確実にコントロールできます。
まとめとアドバイス
「1ヶ月単位」で止めたい場合は、最初にご紹介した 「予算アラート + Cloud Functions」 の仕組みを使って、予算が 100% に達した瞬間にプロジェクトごと止めるしかありません。
「そこまで大掛かりなことはしたくない」という場合は、まずは 1日あたりの上限(Requests per day) を低めに設定して、数日間様子を見るのが最も安全なスタートです。
1日あたりの上限値を決めるための、料金計算のサポートが必要であれば、お使いのモデル名(Gemini 1.5 Flash など)を教えてくださいね。
★トークン量の推定
[質問3]
Geminiにリクエストするプロンプト文から、トークン使用料を推定できますか。
はい、リクエストを送信する前にプロンプト文からトークン数を正確に推定(カウント)することが可能です。
Google Gemini API には、実際の生成(課金対象)を行う前にトークン数だけを計算する専用のメソッドが用意されています。
1. countTokens メソッドを使う(推奨)
SDK(Python, Node.js 等)に含まれる countTokens メソッドを使用すると、そのプロンプトが何トークンになるかを事前に取得できます。
- 料金:
countTokens自体の呼び出しは無料です。 - 精度: 実際に API で使われる計算エンジンと同じものを使うため、100% 正確です。
Python での例
from google import genai
client = genai.Client(api_key="YOUR_API_KEY")
model_id = "gemini-2.0-flash"
prompt = "ここに推定したいプロンプト文を入力します。"
# リクエストを送る前にトークン数をカウント
response = client.models.count_tokens(
model=model_id,
contents=prompt
)
print(f"総トークン数: {response.total_tokens}")
2. 簡易的な推定方法(ざっくり計算)
プログラムを書かずに、文字数からざっくりと計算したい場合の目安は以下の通りです。
- 英語: 1トークン ≒ 約4文字(または 0.75単語)
- 日本語: 1文字 ≒ 1〜2トークン 程度
- ひらがなは少なめ、複雑な漢字や特殊記号は多めにカウントされる傾向があります。
- 日本語は英語に比べてトークン効率が悪いため、「文字数 × 1.5」くらいで見積もっておくと予算内に収まりやすいです。
3. 画像や動画のトークン計算
Gemini はマルチモーダルなため、テキスト以外もトークンとして計算されます。
| メディアタイプ | トークン数の目安 |
|---|---|
| 画像 | 基本 258 トークン(解像度によりタイリングされ増加する場合あり) |
| 動画 | 1秒あたり 約263 トークン |
| 音声 | 1秒あたり 約32 トークン |
4. 実際の料金を計算する
トークン数がわかれば、モデルごとの単価を掛けるだけで料金が算出できます。
計算式:
(入力トークン数 × 入力単価) + (出力トークン数 × 出力単価) = 合計料金
※ Gemini 1.5 Flash など一部のモデルでは、一定以下の短いプロンプト(例:128kトークン以下)は非常に安価、または無料枠が設定されている場合があります。
次のステップとしておすすめ
特定のモデル(Gemini 1.5 Pro や Flash など)で、具体的に「10,000文字の日本語リクエストを毎日100回送ったらいくらになるか」といった具体的な試算をお手伝いしましょうか?
★APIキーを無課金に戻す方法
AIに聞いたのではなく、Zennの投稿記事に答がありました。
-
記事リンク
- GeminiAPIを無料枠で使おうとしてうっかり課金された話
- https://zenn.dev/cliffstar/articles/da6645fa03f75b
- GeminiAPIを無料枠で使おうとしてうっかり課金された話
-
実際の手順
- GCPのコンソールを開く
- [サイドメニュー]>[課金] を開く
- プロジェクト名の横の三点メニューから[課金を無効にする] を選ぶ
- 確認ダイアログボックスで [課金を無効にする] を選ぶ
- 確認のため Google AI Studio>[Gemini APIの利用額」を開く
- 「無料枠」に戻った