どちらに投げるか、で最初に迷った
壁紙アプリの画像を Gemini で分類する仕組みを個人開発で動かしていたとき、最初にぶつかったのは「どのモデルに投げるか」でした。数千枚を一気に処理したい日は、とにかく速さが欲しくなります。一方で、際どい構図を人手の代わりに判定させる場面では、取りこぼしのない精度が要ります。同じ Gemini でも、Flash と Pro では向いている仕事がはっきり分かれていました。
この記事は、その使い分けで私自身が立てた判断基準を、ベンチマークと料金、そして実際に書いたルーティングのコードとあわせて整理したものです。最後に、2026年6月の Gemini 3.5 Flash 一般提供(GA)で前提がどう動いたかも追記しています。
Gemini 3.1 Flash と Pro のスペック比較
まず、両モデルの基本スペックを整理しましょう。
Gemini 3.1 Flash の特徴
- 超高速レスポンス(Proの約2〜3倍の速度)
- 低コスト(Proの約1/5〜1/10の料金設定)
- 100万トークンのコンテキストウィンドウ
- マルチモーダル対応(テキスト・画像・音声・動画)
- Function Calling・構造化出力に対応
- リアルタイムアプリケーションに最適
Gemini 3.1 Pro の特徴
- 最高クラスの推論能力(ARC-AGI-2 で 77.1% を達成)
- 200万トークンの超大規模コンテキストウィンドウ
- 3段階の思考レベル制御(Adaptive Thinking)
- 複雑なコーディングタスクで相応の精度
- エージェンティックな長時間タスクに対応
- Custom Tools エンドポイントによる高度な関数呼び出し
ベンチマークで見る性能差
実際のベンチマークスコアを比較すると、それぞれのモデルが得意とする領域が明確に見えてきます。
コーディング性能
- Gemini 3.1 Pro: SWE-bench Verified で 63.8%、Aider polyglot で 65.4%
- Gemini 3.1 Flash: 一般的なコード補完・生成で十分な精度を維持しつつ、応答速度で優位
推論能力
- Gemini 3.1 Pro: ARC-AGI-2 で 77.1%、GPQA Diamond で 74.1%
- Gemini 3.1 Flash: 日常的な質問応答・要約タスクでは Pro に迫る精度
マルチモーダル
- 両モデルともテキスト・画像・音声・動画に対応
- Pro はより複雑な画像分析(図表解析・技術文書の読解)で優位
- Flash は画像分類・キャプション生成など軽量タスクで高速処理
画像分類の体感でいうと、構図がはっきりした写真の仕分けは Flash で十分でした。判断に迷うのは、人物の写り込みや権利的に際どいケースで、ここだけは Pro に回すと誤判定が目に見えて減りました。すべてを Pro で回す必要はなく、難所だけ預けるのが現実的だと感じています。
API料金とコスト効率
コストは選択の大きな判断基準です。以下に概算の料金比較を示します(最新の公式価格は Google AI for Developers でご確認ください)。
入力トークン料金(100万トークンあたり)
- Gemini 3.1 Flash: 低コスト帯(Flash-Lite よりはやや高め)
- Gemini 3.1 Pro: Flash の約5〜10倍
出力トークン料金(100万トークンあたり)
- Gemini 3.1 Flash: 低コスト帯
- Gemini 3.1 Pro: Flash の約5〜10倍
コスト最適化のポイント: 大量処理やリアルタイムアプリでは Flash を、精度が重要なタスクには Pro を使う「ハイブリッド構成」がおすすめです。たとえば、初回スクリーニングを Flash で行い、複雑なケースだけ Pro にルーティングすることで、コストを大幅に削減できます。
Python コードで両モデルを使い分ける
実際に Python で Gemini 3.1 Flash と Pro を呼び分ける方法を見てみましょう。
import google.generativeai as genai
# APIキーの設定
genai.configure(api_key="YOUR_GEMINI_API_KEY")
# Flashモデル — 高速・低コストな日常タスク向け
flash_model = genai.GenerativeModel("gemini-3.1-flash")
# Proモデル — 高精度な推論・分析タスク向け
pro_model = genai.GenerativeModel("gemini-3.1-pro")
def smart_route(prompt: str, complexity: str = "low"):
"""タスクの複雑さに応じてモデルを自動選択する"""
if complexity == "high":
# 複雑な推論・コーディングタスクはProに送る
response = pro_model.generate_content(prompt)
print(f"[Pro] 応答時間: 高精度モード")
else:
# 日常的なタスクはFlashで高速処理
response = flash_model.generate_content(prompt)
print(f"[Flash] 応答時間: 高速モード")
return response.text
# 使用例: 簡単な要約はFlashで
summary = smart_route(
"以下の文章を3行で要約してください: ...",
complexity="low"
)
print(summary)
# 期待出力: Flashモデルによる高速な要約結果
# 使用例: 複雑なコードレビューはProで
review = smart_route(
"以下のPythonコードのセキュリティ脆弱性を分析してください: ...",
complexity="high"
)
print(review)
# 期待出力: Proモデルによる詳細なセキュリティ分析結果このように、タスクの性質に応じて動的にモデルを切り替えることで、コストと品質のバランスを最適化できます。complexity の判定を固定のルールにするか、別の軽量モデルに任せるかは、扱うタスクの分布次第で変わります。私の場合は、最初は手書きのキーワード判定で始めて、誤りが多い境界だけ後から調整しました。私はこの判定ロジックを、今では別アプリの審査前チェックにも流用しています。
ユースケース別おすすめモデル
具体的なユースケースごとに、どちらのモデルが適しているかを整理しました。
Gemini 3.1 Flash が最適なケース
- チャットボットのリアルタイム応答
- 大量ドキュメントの一括要約・分類
- 画像キャプションの自動生成
- カスタマーサポートの自動応答
- プロトタイピングや検証段階の開発
- コスト重視のバッチ処理
Gemini 3.1 Pro が最適なケース
- 複雑なコードの生成・レビュー・デバッグ
- 長文の技術文書やレポートの分析
- 多段階の推論が必要なリサーチタスク
- AIエージェントの構築(長時間の自律動作)
- 法律文書・医療文書など高精度が求められる分野
- 200万トークンの超長文コンテキストが必要なタスク
ハイブリッドアーキテクチャの実装例
本番環境では、Flash と Pro を組み合わせた「ハイブリッドアーキテクチャ」が非常に効果的です。
import google.generativeai as genai
genai.configure(api_key="YOUR_GEMINI_API_KEY")
flash = genai.GenerativeModel("gemini-3.1-flash")
pro = genai.GenerativeModel("gemini-3.1-pro")
def hybrid_pipeline(documents: list[str]) -> list[dict]:
"""Flash で初期分類 → Pro で詳細分析するパイプライン"""
results = []
for doc in documents:
# Step 1: Flash で高速スクリーニング
screening = flash.generate_content(
f"以下の文書の重要度を「高」「中」「低」で判定してください:\n{doc}"
)
importance = screening.text.strip()
if "高" in importance:
# Step 2: 重要な文書のみ Pro で詳細分析
analysis = pro.generate_content(
f"以下の文書を詳細に分析し、要点・リスク・推奨アクションを"
f"JSON形式で出力してください:\n{doc}"
)
results.append({
"document": doc[:50],
"importance": "高",
"analysis": analysis.text
})
else:
results.append({
"document": doc[:50],
"importance": importance,
"analysis": "詳細分析不要"
})
return results
# 使用例
docs = ["重要な契約書の内容...", "日常的な会議メモ...", "緊急のインシデント報告..."]
results = hybrid_pipeline(docs)
for r in results:
print(f"重要度: {r['importance']} | {r['document']}...")
# 期待出力:
# 重要度: 高 | 重要な契約書の内容...
# 重要度: 低 | 日常的な会議メモ...
# 高重要度の文書のみProによる詳細分析が含まれるFlash の高速APIをさらに活用したい方には、Gemini 3.1 Flash 高速推論APIの実装テクニック で、ストリーミングやFunction Callingの最適化手法を詳しく解説しています。
2026年6月の追記:3.5 Flash GA で前提が変わった
この記事を最初に書いた3月以降、状況は動いています。2026年6月、Gemini 3.5 Flash が一般提供(GA)になりました。公表されているベンチマークでは、3.5 Flash がほぼ全項目で 3.1 Pro を上回りつつ、約4倍高速とされています。
つまり「速いほうは精度を妥協する」という、これまで Flash を選ぶときの暗黙の前提が薄れてきました。以前なら Pro に回していた中程度の推論タスクも、まず 3.5 Flash で試す価値があります。
とはいえ、Flash と Pro という二層の考え方そのものは今も有効です。変わったのは境界線の位置です。私の運用では、3.5 Flash GA を機に「まず Flash、迷ったら Pro」から「まず 3.5 Flash、本当に難しいものだけ上位ティア」へと初期設定を寄せました。上のコード例のモデル名を新しいものに置き換えるだけでも、体感は変わるはずです。
最新の正式なモデル名と価格は変動が早いため、導入前に必ず Google AI for Developers の公式情報でご確認ください。
どこから手をつけるか
迷ったら、まず手元で一番頻度の高いタスクを Flash(できれば 3.5 Flash)で一度通してみてください。速度と出力品質に納得できれば、それが既定値になります。納得できない箇所だけを Pro や上位ティアに切り出す——この順番で組むと、コストは下がり、品質が落ちる場所も自分で把握できます。
私自身、最初から完璧な振り分けを設計しようとして時間を溶かしました。動かしながら境界を調整するほうが、結局は早く落ち着きます。お読みいただきありがとうございました。