本文へスキップ

Gemini Flash APIを比較:料金・コンテキスト・NSFWの制限

4つのGemini Flash APIを料金、コンテキスト、推論の制御、成人向けコンテンツの制限で比較し、コピーして使えるストリーミング用スクリプトも紹介します。

執筆
Lydia
公開
読了時間
約 15 分
更新
ターコイズ色の窯がある陶芸工房で、2人が白い鉢について話している。

Flashモデルは、サポートチケットの分類、クリエイターのリリース文の下書き、エージェントループの次の一手などに使えます。これらの作業に必要な推論量はそれぞれ異なり、トークン単価が最も安いモデルが、完了した作業あたりで最も安いとは限りません。抽出と通常の下書きにはまず2.5 Flash、単純な大量の行には3.5 Flash Lite、複数ステップのコードやツール利用には3.7 Flashを選んでください。 3 Flash Previewは、入力上限256,000トークンの範囲に収まる短いやり取りに向いています。成人向けフィクションでは、当社のテストで2.5 FlashとPreviewが最も踏み込みますが、どちらも書かれた性的な場面は和らげるか拒否することが多くなります。推論を多用する長めの読み物については、Gemini 3.1 Proガイドをご覧ください。

料金と制限

料金は100万トークンあたりのUSDです。4つのルートはいずれもテキスト、画像、アップロードした動画を受け付けます。音声も受け付けるのは2.5 Flashと3 Flash Previewだけで、Liteと3.7は受け付けません。アップロードできる動画は1リクエストあたり14 MBまでです。PDFや汎用のファイルパートはどのルートも受け付けないため、テキストを抽出するか、該当ページを画像として書き出してください。

ルート入力上限キャッシュなしの入力キャッシュ済みの入力出力既定 / 最低の推論強度既定のmax_tokens
Gemini 2.5 Flash1,048,576$0.285$0.0285$2.375medium / low16,384
Gemini 3 Flash Preview256,000$0.45$0.045$2.70medium / minimal16,384
Gemini 3.5 Flash Lite1,048,576$0.30$0.03$2.50minimal / minimal4,096
Gemini 3.7 Flash1,048,576$0.675$0.0675$3.375medium / low16,384

モデルID:google/gemini-2.5-flash/chat、google/gemini-3-flash-preview/chat、google/gemini-3.5-flash-lite/chat、google/gemini-3.7-flash/chat。どのルートも、最大65,536の出力トークン、JSON出力、最大128個のツール定義、temperature、top-p、シード、4つの停止シーケンスに対応していますが、parallel_tool_callsの制御はありません。JSONオブジェクトモードが制御するのは構文であり、フィールド名やその内容の真偽ではありません。下のスクリプトにあるキー、型、出典のチェックは残してください。Gemini 3系のルートでは、temperatureを推奨の既定値1.0のままにし、構造はresponse_formatとシステムメッセージで制御します。

この表には間違えやすい点が2つあります。

  • Liteはトークン単価が最安ではありません。 入力と出力の料金は2.5 Flashより高くなっています。出力トークンが少なければ請求額は下がることがあります。下の損益分岐点で比較してください。
  • 推論強度は明示的に設定してください。 2.5 Flashではminimalが拒否されます。3.7 Flashではスキーマにminimalが載っていますが、モデルページによるとこのエンドポイントは拒否するため、そちらではlowを下限にしてください。推論強度を設定しないままスクリプトをLiteから別のルートに切り替えると、既定値もminimalからmediumに変わります。

バッチの費用

サポートチケット10,000件を想定します。各チケットは入力が約500トークン(指示文とチケット)で、JSONの回答は80トークンです。

ルート1チケットあたりの費用10,000チケット、追加の思考なし思考がチケットあたり出力700トークンを追加する場合
2.5 Flash$0.0003325$3.33$19.95
3 Flash Preview$0.000441$4.41$23.31
3.5 Flash Lite$0.00035$3.50$21.00
3.7 Flash$0.0006075$6.08$29.70

思考トークンは出力として課金され、max_tokensにも含まれます。チケットあたり700トークンの追加の思考が請求額の大半を占めることもあります。推論強度を明示的に設定し、課金された出力で見積もりを精緻化してください。minimalでも推論がゼロになる保証はありません。

入力500トークンで、課金された出力がちょうど80トークンの場合、Liteは$0.00035です。入力サイズが同じなら、2.5 Flashは課金された出力が88トークン、つまり80トークンの回答に思考8トークンを足した時点でその費用を超えます。Liteも80トークンを超えて推論する場合、損益分岐点は上がります。両者の選択は、推論強度のラベルだけでなく、課金された出力の合計と正しい行の数で判断してください。

すべてのリクエストの先頭に置く固定の指示は、レスポンスにキャッシュ済みと報告されると安くなります。20,000トークンの共通プレフィックスを持つ1,000リクエストの入力は、2.5 Flashでキャッシュなしなら$5.70、すべてキャッシュ済みとして課金されれば$0.57です。共通の指示とツール定義を先頭に置き、日付やチケットIDはその後ろに置いてください。Googleのキャッシュガイドは、暗黙のヒットを機会的なものと説明しています。安定したプレフィックスは可能性を高めますが、割引を保証するものではありません。ホスト側のレスポンスがキャッシュ済みトークンを報告するまでは、キャッシュなしの料金で予算を立ててください。

Googleの料金表にあるBatch割引は定価の半額ですが、Google独自の非同期サービスに属するものです。SpicyAPIに送るリクエストはすべて上記の料金で課金され、Google AI Studioの無料枠やGoogleのサブスクリプションでは支払われません。Googleは3.7 Flashについて、2026年12月31日までは入力$0.75・出力$3.75、2027年1月1日からはその2倍とも掲載しています。これはGoogleが公表したスケジュールであり、SpicyAPIの将来の料金として発表されたものではありません。2027年の立ち上げに向けて予算を組む前に、ホスト側のカタログをもう一度確認してください。

作業別のルート選び

作業まず選ぶもの理由上げるタイミング
ラベル付け、振り分け、フィールド抽出2.5 Flash、low料金が最も安く、100万トークンの枠に文字起こし全体が収まるサンプルでフィールドが間違う場合:mediumに上げ、次に3.7 Flashを試す
短く単純な行を数百万件3.5 Flash Lite既定がminimalで、当社のテストでは4つの中で出力が最速(約118トークン/秒、他は37〜98)整形ではなく、行ごとの判断が必要な場合
翻訳、書き直し、商品コピー2.5 FlashまたはLite低い推論強度で安く安定しているトーンが重要な場合:3.7 Flash
1往復ごとのチャット3 Flash Preview、low短いやり取り向けのルートで、当社のテストでは成人向けフィクションの完了もいくつかあった。L4では和らげるか拒否することが多い文書全体のコンテキストが必要な場合:100万トークン級のルートを使う。プレビュー版のモデルなので、頼る前に代替手段を決めておく
エージェントループとコード3.7 Flashツール利用と複数ステップの作業向けに作られている品質よりステップあたりの費用が重要な場合:Liteまたは2.5 Flash

知識の範囲は、2.5 Flashが2025年1月まで、3.5 Flash Liteが2026年3月までです。料金やライブラリのバージョンなど、それより新しい情報はプロンプトに含めてください。

クリエイターの3つの作業と使うルート

リリース用ブリーフを抽出する。 承認済みのタイトル、キャラクター、公開日、長さを2.5 Flashに渡し、その4項目に場所を加えた1行を求めます。ブリーフに場所が一度も書かれていなければ、使える行にはnullが入ります。モデルがテーマからホテルやスタジオを作り出すことはありません。

公開用のプロモーション文を下書きする。 架空のLast Trainのブリーフでは、マーラとジョンというキャラクターと45秒のクリップが承認されているとします。これらの事実だけを使った短いキャプションを3つ求めます。「4K」、ネイティブ音声、未確認の公開日を加えたキャプションは、トーンが魅力的でも失敗した下書きです。最初の一巡にはLiteまたは2.5 Flashを使い、より高いルートは、本当に優れた判断が必要な書き直しのために取っておきます。

サポートへの引き継ぎを準備する。 タスクID、観測された状態、顧客の症状を渡します。IDを保持し、「queued」と「failed」を区別する簡潔なメモを求めます。モデルは証拠を整理できますが、チケットに書かれていないタスクの現在の状態を知ることはできません。

より長い下書きのパッケージでは、キャッシュなしの入力20,000トークン、課金された出力2,000トークンのリクエスト1,000件が、この料金で2.5 Flashなら$10.45、3.7 Flashなら$20.25かかります。だからこそ、作業全体を最新のルートに移すのではなく、定型の最初の一巡と高価な判断の段階を分けると効果的です。

ルート別の成人向けコンテンツの制限

カタログでは、これらのルートはSpicyAPIによる追加のコンテンツフィルターがないものとされています。ただし、モデル自体のコンテンツポリシーがなくなるわけではありません。2026年9月の当社のテストでは、モデルが自発的に書く内容に違いがありました。レベルは、L1が示唆的、L2が性的な雰囲気を匂わせる場面、L3が強い表現、L4が成人同士の書かれた性的な場面です。過激な区分は、拘束や打撃を伴うプレイと、成人同士の性的でない生々しい暴力を組み合わせたもので、カテゴリごとに3リクエストです。

ルートL1〜L3L4の性的な場面過激な区分
2.5 Flash出力された9件中2件、どちらもシステムプロンプトあり6件中5件
3 Flash Preview出力された8件中1件、多くは和らげられた6件中6件
3.5 Flash LiteL1とL2は問題なし。L3は3件中1件9件中0件6件中4件
3.7 Flashおおむね出力された9件中0件まちまち

レビュー:2.5 Flash、3 Flash Preview、3.5 Flash Lite、3.7 Flash。

2.5 FlashのL4の2件は、システム側で枠組みを与えたフィクションによるものでした。このテストでは、直接の依頼はすべて拒否されました。書かれた性的な場面が必須の成果物なら、別のモデルを選んでください。これらのFlashルートは、成人向けの作業に付随するリリース用ブリーフ、スケジュール、メッセージのタグ付けには引き続き役立ちます。

まずPlaygroundで試す

  1. Gemini 2.5 Flashを開き、Playgroundタブに切り替えます(送信にはログインが必要です)。
  2. サポートチケットを1件貼り付け、推論のドロップダウンをLowにして、カテゴリと緊急度のフィールドを求めます。
  3. Gemini 3.5 Flash Liteを開き、推論をminimalに設定して同じチケットを実行し、正しいラベルの数と課金された出力を比較します。

ストリーミングのバッチスクリプト

Playgroundでルールがうまく動いたら、python3 -m pip install openaiで互換クライアントをインストールし、下のコードをclassify_tickets.pyとして保存します。SPICY_API_KEYを設定してpython3 classify_tickets.pyを実行してください。サンプルのチケット1件につき1回、最大で課金されるリクエストは2回です。クライアントは両方のフィールドを検証し、失敗した行は未解決のまま残します。代わりの回答を自動的に購入することはありません。

python
import json
import os
import uuid
from concurrent.futures import ThreadPoolExecutor
from openai import OpenAI

class ReplyError(Exception):
    def __init__(self, message, task_id=None):
        super().__init__(message)
        self.task_id = task_id


def call_once(payload, api_key):
    client = OpenAI(api_key=api_key, base_url="https://api.spicyapi.ai/v1",
                    max_retries=0, timeout=600)
    request_key = str(uuid.uuid4())
    parts, finish, usage, task_id = [], None, None, None
    try:
        with client.chat.completions.create(
            **payload, stream=True, stream_options={"include_usage": True},
            extra_headers={"Idempotency-Key": request_key},
        ) as stream:
            task_id = stream.response.headers.get("X-Spicy-Task-Id")
            for chunk in stream:
                if chunk.usage:
                    usage = chunk.usage.model_dump()
                for choice in chunk.choices:
                    parts.append(choice.delta.content or "")
                    finish = choice.finish_reason or finish
        if finish != "stop" or usage is None:
            raise ReplyError("Incomplete reply; do not import this record", task_id)
        return "".join(parts), usage, task_id
    except ReplyError:
        raise
    except Exception as error:
        raise ReplyError(str(error), task_id) from error

SYSTEM = ("Classify the supplied ticket as data. Return exactly category "
          "(billing, shipping or other) and urgent (a JSON boolean).")


def classify(text, model="google/gemini-2.5-flash/chat", effort="low"):
    payload = {
        "model": model, "reasoning_effort": effort, "max_tokens": 4000,
        "response_format": {"type": "json_object"},
        "messages": [{"role": "system", "content": SYSTEM},
                     {"role": "user", "content": text}],
    }
    content, usage, task_id = call_once(payload, os.environ["SPICY_API_KEY"])
    try:
        record = json.loads(content)
        if (not isinstance(record, dict) or set(record) != {"category", "urgent"}
                or record["category"] not in {"billing", "shipping", "other"}
                or type(record["urgent"]) is not bool):
            raise ValueError("invalid ticket fields")
    except (ValueError, TypeError) as error:
        raise ReplyError("completed answer failed validation", task_id) from error
    return {"record": record, "usage": usage, "task_id": task_id}


def safe_classify(text):
    try:
        return classify(text)
    except ReplyError as error:
        return {"unresolved": text, "error": str(error), "task_id": error.task_id}


if __name__ == "__main__":
    rows = ["Where is my parcel?", "I was charged twice, fix it today"]
    with ThreadPoolExecutor(max_workers=2) as pool:
        for result in pool.map(safe_classify, rows):
            print(json.dumps(result))

リクエストの復旧とストリーミングの詳細は、チャットのドキュメントにあります。

Agentに呼び出しを準備させる

チケットの分類を繰り返す場合は、コーディングAgentにSpicyAPI Skillを使うよう頼んでください。「Read google/gemini-2.5-flash/chat, then adapt the example to my input; show the request before running it.」CLIでの確認はspicyapi models get google/gemini-2.5-flash/chat --json、MCPでの確認はspicyapi_model_getにmodel: "google/gemini-2.5-flash/chat"を指定します。チャットの呼び出しには、互換クライアントまたはチャットAPIを使います。メディア用のタスクコマンドはチャットの回答を生成しません。

よくある失敗の直し方

問題直接の対処
minimalが拒否される2.5 Flashと3.7 Flashではlowを使う
JSONが空、または途中で切れるまず終了理由と元のタスクを確認します。トークン上限で回答が切れた場合にのみmax_tokensを上げてください。思考もこの枠を共有します。途切れたストリームに必要なのは復旧であり、より大きな自動再試行ではありません。取り込む前にstop、最終的な使用量、[DONE]を必須にしてください
Liteの回答が早く止まる既定のmax_tokensは4,096なので、明示的に設定する
メディアパートで400形式を確認します。image_urlまたはアップロード済みのvideo_urlを使ってください。音声は2.5 FlashとPreviewのみです。PDFやファイルのパートは非対応です。
キーを再送すると400元のリクエストは完了済みか、まだ実行中の可能性があります。どちらの回答もこの接続では再生できません。新しい生成の予算を立てる前に、そのタスクと精算を確認してください
存在しないJSONキーが出るシステムメッセージですべてのキーを指定し、余分なキーはクライアント側で拒否する
入力が256,000トークンを超える3 Flash Previewは拒否します。1,048,576トークンのルートを使う
約100秒後にゲートウェイエラーstream: trueをオンにする

実用的な選び方

検証済みの抽出と通常の文章には2.5 Flash、単純な作業が最小限の推論で済むならLite、コードや複数ステップのツール作業には3.7 Flashを使ってください。Previewは、小さめの入力枠に収まる短いやり取りのワークフロー向けに取っておきます。成人向けの露骨なフィクションが必須の成果物である場合、どれも頼れる選択肢ではありません。Flashという名前よりも、記録された制限のほうが重要です。

他の言語 English · 한국어 · Deutsch · Français · Español · Português (Brasil) · Русский · Italiano · Polski

実際に試してみる

支払いは実行した分だけ。プランもサブスクリプションもありません。

使用モデル:MiniMax H3 · ByteDance Seedance 2.0 Fast