はじめに
2026年4月、Google は Gemini API に Flex Inference と Priority Inference の2つの新しい推論ティアを追加しました。これにより、アプリケーションの特性に応じてコストと信頼性のトレードオフを service_tier パラメータ1つで制御できるようになりました。
この記事では、3つの推論ティア(Flex・Standard・Priority)の仕組みと使い分け、Python での実装例を解説します。
この記事で解説すること
- Flex Inference と Priority Inference の技術的な違い
-
service_tierパラメータの使い方 - ユースケース別の選定ガイド
- エラーハンドリングとリトライ実装
対象読者
- Gemini API を本番環境で運用しているエンジニア
- APIコストを最適化したい開発者
- SLO(サービスレベル目標)を設定したいチーム
前提環境
- Python 3.10 以上
-
google-genaiライブラリ(pip install google-genai) - Gemini API キー(Tier 2/3 プロジェクトは Priority Inference を利用可能)
TL;DR
-
service_tier: "flex"→ コスト50%削減、レイテンシ最大15分、バッチ処理向け -
service_tier: "priority"→ コスト75〜100%増、超低レイテンシ、本番リアルタイム向け - デフォルト(省略)は Standard 相当
- エンドポイントは同一、パラメータ変更のみで切り替え可能
3つの推論ティアの全体像
Gemini API の推論ティアは以下の3段階に整理されます。
| ティア |
service_tier 値 |
コスト | レイテンシ | 信頼性 |
|---|---|---|---|---|
| Flex | "flex" |
Standard × 50% | ベストエフォート(最大15分) | シェダブル(503/429あり) |
| Standard | 省略(デフォルト) | 基準 | 1〜10秒程度 | 高信頼性 |
| Priority | "priority" |
Standard比 +75〜100%(1.75〜2.0倍) | ミリ秒〜数秒 | 非シェダブル |
Flex Inference の仕組み
Flex は「シェダブルキャパシティ」を活用します。Googleのデータセンターでは、通常トラフィックが少ない時間帯に余剰リソースが発生します。Flex リクエストはこの余剰リソースを使用するため、トラフィックスパイク時にはリクエストが保留または棄却(503/429エラー)されます。
自動的なアップグレードは行われないため、クライアント側でエクスポネンシャルバックオフによるリトライが必須です。
Priority Inference の仕組み
Priority は「非シェダブルトラフィック」として扱われ、他のリクエストに先んじて処理されます。動的な制限を超過した場合でも、サービスが失敗するのではなく、Standard ティアへグレースフルダウングレードされます。この場合の請求は Standard 料金(プレミアムではなく)になります。
なお、Priority Inference は Tier 2/3 の有料プロジェクトのみ利用可能です。
Python 実装例
google-genai ライブラリ(2024年末以降の推奨SDK)を使用します。
基本的な使い方(Standard)
from google import genai
# クライアントの初期化
client = genai.Client(api_key="YOUR_API_KEY")
# Standard(デフォルト)
response = client.models.generate_content(
model="gemini-2.5-flash",
contents="Pythonでフィボナッチ数列を生成するコードを書いて",
)
print(response.text)
Flex Inference の実装
公式ドキュメントでは、Flex 利用時はクライアント側のタイムアウトを 600秒(10分)以上に設定することが推奨されています。
from google import genai
import time
client = genai.Client(api_key="YOUR_API_KEY")
def generate_with_flex(prompt: str, max_retries: int = 5) -> str:
"""Flex Inference でリクエストを送信し、エラー時にリトライする"""
for attempt in range(max_retries):
try:
response = client.models.generate_content(
model="gemini-2.5-flash",
contents=prompt,
config={"service_tier": "flex"}, # Flex ティアを指定
# タイムアウトは600秒以上推奨(ここでは余裕を持って900秒)
http_options={"timeout": 900_000}, # ミリ秒指定
)
return response.text
except Exception as e:
error_str = str(e)
if "503" in error_str or "429" in error_str:
wait_time = 2 ** attempt # エクスポネンシャルバックオフ
print(f"リトライ {attempt + 1}/{max_retries}、{wait_time}秒後に再試行...")
time.sleep(wait_time)
else:
raise
raise RuntimeError("最大リトライ回数に達しました")
# バッチ処理の例
prompts = [
"製品レビューを要約してください: ...",
"このコードのバグを修正してください: ...",
"以下のデータを分析してください: ...",
]
results = [generate_with_flex(p) for p in prompts]
Priority Inference の実装
from google import genai
client = genai.Client(api_key="YOUR_API_KEY")
def generate_with_priority(prompt: str) -> str:
"""Priority Inference でリクエストを送信する(本番リアルタイム向け)"""
response = client.models.generate_content(
model="gemini-2.5-pro",
contents=prompt,
config={"service_tier": "priority"}, # Priority ティアを指定
http_options={"timeout": 30_000}, # タイムアウト例(30秒)
)
return response.text
# カスタマーサポートチャットボットの例
def customer_support_response(user_message: str) -> str:
system_prompt = "あなたは親切なカスタマーサポート担当者です。"
full_prompt = f"{system_prompt}\n\nユーザーの質問: {user_message}"
return generate_with_priority(full_prompt)
REST API でのティア指定
Python ライブラリを使用しない場合は、リクエストボディのトップレベルに serviceTier フィールドを追加します(generationConfig の中ではありません)。
curl -X POST \
"https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent?key=$API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contents": [{"parts": [{"text": "こんにちは"}]}],
"serviceTier": "FLEX"
}'
REST API では serviceTier フィールドの値は大文字("FLEX"、"PRIORITY")を使用します。
ユースケース別の選定ガイド
Flex Inference が適するケース
コスト削減が優先で、レイテンシの揺れが許容できる処理に適しています。
- 大規模バッチ処理: 数千〜数百万件のテキスト変換・要約
- オフライン評価: LLMベンチマーク、回帰テスト、データセット生成
- バックグラウンド処理: CRMデータの自動更新、メタデータ生成
- コスト感度の高い研究: 大量トークンを消費するシミュレーション
- マルチステップエージェント: 中間ステップのレイテンシが許容できる場合
Priority Inference が適するケース
低レイテンシと高信頼性が必要な本番アプリケーションに適しています。
- リアルタイムチャットボット: ユーザーが応答を待つインタラクティブなUI
- リアルタイム不正検知: ミリ秒単位での判定が必要なシステム
- ビジネスクリティカルなCopilot: SLO要件のある企業向けアプリ
- プレミアムユーザー向け機能: 一般ユーザーと差別化されたサービス
Standard(デフォルト)が適するケース
バランスの取れた汎用ワークロードに適しています。
- 開発・テスト: コスト効率と安定性のバランス
- 社内ツール: 多少のレイテンシが許容される業務アプリ
- 中規模バッチ: 即日完了が必要なデータ処理
対応モデル一覧
以下のモデルで Flex / Priority Inference が利用可能です(公式ドキュメント参照)。
| モデル | Flex | Priority |
|---|---|---|
| Gemini 3.1 Pro Preview | ✅ | ✅ |
| Gemini 3.1 Flash-Lite Preview | ✅ | ✅ |
| Gemini 3 Flash Preview | ✅ | ✅ |
| Gemini 2.5 Pro | ✅ | ✅ |
| Gemini 2.5 Flash | ✅ | ✅ |
| Gemini 2.5 Flash-Lite | ✅ | ✅ |
| Gemini 3.1 Flash-Lite | ✅ | ✅ |
注意点
Priority Inference の利用条件
Priority Inference は Tier 2/3 の有料プロジェクトのみ利用可能です。無料プランや Tier 1 のプロジェクトでは使用できません。Tier の確認・アップグレードはGoogle AI Studioから行えます。
Flex の 503/429 エラー対策
Flex は標準トラフィックが増加するとリクエストが棄却されます。本番環境での Flex 利用には、適切なリトライロジックが不可欠です。エクスポネンシャルバックオフ(2秒→4秒→8秒…)を実装し、最終的なフォールバックとして Standard ティアへの切り替えも検討してください。
Priority のレート制限
Priority ティアはレート制限が Standard の約0.3倍と厳しくなっています。高スループットが必要な場合は Standard または Flex との組み合わせを検討してください。
料金の確認
各ティアの正確な料金はGemini API 公式料金ページで確認してください。料金はモデルやリージョンによって異なります。Priority でグレースフルダウングレードが発生した場合、その分は Standard 料金で請求されます。
まとめ
Gemini API の Flex/Priority Inference は、service_tier パラメータ1つでコストと信頼性のトレードオフを制御できるシンプルな仕組みです。
- Flex: コスト50%削減。大量バッチ処理や研究用途に最適
- Standard: バランス型。開発・一般業務に適する
- Priority: 超低レイテンシ・高信頼性。本番リアルタイムアプリ向け
同一エンドポイント・同一コードベースで切り替えられるため、環境変数で制御してステージングと本番で異なるティアを使い分けるアーキテクチャが効果的です。
import os
from google import genai
client = genai.Client(api_key=os.environ["GEMINI_API_KEY"])
service_tier = os.environ.get("GEMINI_SERVICE_TIER", "standard") # flex / standard / priority
response = client.models.generate_content(
model="gemini-2.5-flash",
contents="テストプロンプト",
config={"service_tier": service_tier},
)