考えている

Gemini 2.5 モデルは、推論と多段階計画の能力を大幅に向上させる内部の「思考プロセス」を使用できます。これにより、コーディング、高度な数学、データ分析などの複雑なタスクに非常に効果的です。

思考予算を使用して、モデルが実行できる思考の量を構成できます。この構成は、レイテンシや費用の削減が優先される場合に特に重要です。また、タスクの難易度の比較を確認して、モデルの思考能力がどの程度必要になるかを判断します。

思考モデルを使用する

他の Gemini モデルと同様に思考モデルを使用します(選択した Gemini API プロバイダを初期化し、GenerativeModel インスタンスを作成するなど)。これらのモデルは、構造化された出力の生成や、マルチモーダル入力(画像動画音声PDF など)の分析などのテキストまたはコード生成タスクに使用できます。出力をストリーミングしているときに思考モデルを使用することもできます。

サポートされているモデル

この機能は Gemini 2.5 モデルでのみサポートされています。

  • gemini-2.5-pro
  • gemini-2.5-flash
  • gemini-2.5-flash-lite-preview-06-17

思考モデルの使用に関するベスト プラクティス

Google AI Studio または Vertex AI Studio でプロンプトをテストすることをおすすめします。これらのツールでは、思考プロセス全体を確認できます。モデルが逸脱した可能性のある領域を特定し、プロンプトを調整して、より一貫性のある正確なレスポンスを得ることができます。

望ましい結果を説明する一般的なプロンプトから始め、モデルが回答を決定する方法についての最初の考え方を観察します。レスポンスが期待どおりでない場合は、次のプロンプト手法のいずれかを使用して、モデルがより適切なレスポンスを生成できるようにします。

  • 詳しい手順を説明する
  • 入出力ペアの例をいくつか挙げる
  • 出力と回答の言い回しと形式に関するガイダンスを提供する
  • 具体的な確認手順を提供する

プロンプトに加えて、次の推奨事項の使用も検討してください。

  • システム指示を設定します。これは、モデルがプロンプトまたはエンドユーザーからの詳細な手順に公開される前に追加する「プリアンブル」のようなものです。システム指示を使用すると、特定のニーズやユースケースに基づいてモデルの動作を制御できます。

  • 思考予算を設定して、モデルが実行できる思考の量を構成します。予算を低く設定すると、モデルは回答を「考えすぎ」ません。予算を高く設定すると、必要に応じてモデルがより多くのことを考えられるようになります。思考予算を設定すると、実際のレスポンス用にトークン出力上限のより多くの部分が予約されます。

  • Vertex AI Gemini API を使用している場合)思考が有効になっているリクエストのレイテンシをモニタリングできるように、Firebase コンソールで AI モニタリングを有効にしてください。思考トークンは、モニタリング ダッシュボードにはまだ表示されません。

思考予算を制御する

モデルが回答を生成するために実行できる思考の量を制御するには、使用できる思考予算トークンの数を指定します。

デフォルトの思考予算よりも多くのトークンが必要になる可能性がある場合は、思考予算を手動で設定できます。タスクの複雑さと推奨予算については、このセクションの後半で詳しく説明します。大まかなガイダンスは次のとおりです。

  • レイテンシが重要な場合や、複雑でないタスクの場合は、思考予算を低く設定する
  • 複雑なタスクには高い思考予算を設定する

思考予算を設定する

Gemini API プロバイダをクリックして、このページでプロバイダ固有のコンテンツとコードを表示します。

GenerativeModel インスタンスの作成の一環として、GenerationConfig で思考予算を設定します。構成はインスタンスの存続期間中維持されます。リクエストごとに異なる思考予算を使用する場合は、各予算で構成された GenerativeModel インスタンスを作成します。

サポートされている思考予算の値については、このセクションで後述します。

Swift

GenerativeModel インスタンスの作成の一環として、GenerationConfig で思考予算を設定します。


// ...

// Set the thinking configuration
// Use a thinking budget value appropriate for your model (example value shown here)
let generationConfig = GenerationConfig(
  thinkingConfig: ThinkingConfig(thinkingBudget: 1024)
)

// Specify the config as part of creating the `GenerativeModel` instance
let model = FirebaseAI.firebaseAI(backend: .googleAI()).generativeModel(
  modelName: "GEMINI_MODEL_NAME",
  generationConfig: generationConfig
)

// ...

Kotlin

GenerativeModel インスタンスの作成の一環として、GenerationConfig でパラメータの値を設定します。


// ...

// Set the thinking configuration
// Use a thinking budget value appropriate for your model (example value shown here)
val generationConfig = generationConfig {
  thinkingConfig = thinkingConfig {
      thinkingBudget = 1024
  }
}

// Specify the config as part of creating the `GenerativeModel` instance
val model = Firebase.ai(backend = GenerativeBackend.googleAI()).generativeModel(
  modelName = "GEMINI_MODEL_NAME",
  generationConfig,
)

// ...

Java

GenerativeModel インスタンスの作成の一環として、GenerationConfig でパラメータの値を設定します。


// ...

// Set the thinking configuration
// Use a thinking budget value appropriate for your model (example value shown here)
ThinkingConfig thinkingConfig = new ThinkingConfig.Builder()
    .setThinkingBudget(1024)
    .build();

GenerationConfig generationConfig = GenerationConfig.builder()
    .setThinkingConfig(thinkingConfig)
    .build();

// Specify the config as part of creating the `GenerativeModel` instance
GenerativeModelFutures model = GenerativeModelFutures.from(
        FirebaseAI.getInstance(GenerativeBackend.googleAI())
                .generativeModel(
                  /* modelName */ "<var>GEMINI_MODEL_NAME</var>",
                  /* generationConfig */ generationConfig
                );
);

// ...

Web

GenerativeModel インスタンスの作成の一環として、GenerationConfig でパラメータの値を設定します。


// ...

const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });

// Set the thinking configuration
// Use a thinking budget value appropriate for your model (example value shown here)
const generationConfig = {
  thinkingConfig: {
    thinkingBudget: 1024
  }
};

// Specify the config as part of creating the `GenerativeModel` instance
const model = getGenerativeModel(ai, { model: "GEMINI_MODEL_NAME", generationConfig });

// ...

Dart

Flutter の思考予算を設定する機能は、次のリリースでサポートされる予定です。

Unity

Unity の思考予算の設定のサポートは、次のリリースで提供される予定です。

サポートされている思考予算の値

次の表に、モデルの thinkingBudget を構成することで、各モデルに設定できる思考予算の値を示します。

モデル デフォルト値 思考予算の利用可能な範囲
思考を無効にする

動的な思考を可能にする
最小値 最大値
Gemini 2.5 Pro 8,192 128 32,768 オフにすることはできません -1
Gemini 2.5 Flash 8,192 1 24,576 0 -1
Gemini 2.5 Flash‑Lite 0
(デフォルトでは思考は無効)
512 24,576 0
(または思考予算をまったく構成しない)
-1

思考プロセスを無効にする

簡単なタスクでは、思考能力は必要なく、従来の推論で十分です。レイテンシの短縮が優先される場合は、モデルがレスポンスの生成に必要以上の時間をかけないようにする必要があります。

このような状況では、思考を無効(オフ)にすることができます。

  • Gemini 2.5 Pro: 思考を無効にできない
  • Gemini 2.5 Flash: thinkingBudget0 トークンに設定
  • Gemini 2.5 Flash-Lite: デフォルトで思考が無効になっています

動的な思考を可能にする

thinkingBudget-1 に設定すると、モデルがいつ、どれだけ思考するか(動的思考)を決定できます。モデルは、上記の最大トークン値まで、適切な数のトークンを使用できます。

タスクの複雑さ

  • 簡単なタスク - 思考をオフにできる
    事実の取得や分類など、複雑な推論を必要としない簡単なリクエスト。例:

    • 「DeepMind はどこで設立されましたか?」
    • 「このメールは会議を依頼しているのか、それとも情報を提供しているだけなのか?」
  • 中程度のタスク - デフォルトの予算または追加の思考予算が必要
    段階的な処理やより深い理解が役立つ一般的なリクエスト。例:

    • 「光合成と成長の類似点を考えて。」
    • 「電気自動車とハイブリッド車を比較対照してください。」
  • 難しいタスク - 最大の思考予算が必要になる可能性がある
    複雑な数学の問題の解決やコーディング タスクなど、真に複雑な課題。このようなタスクでは、モデルが完全な推論と計画の能力を発揮する必要があります。多くの場合、回答を提供する前に多くの内部ステップが必要になります。例:

    • 「AIME 2025 の問題 1 を解いてください。17b が 97b の約数となるすべての整数基数 b > 9 の合計を求めてください。」
    • 「ユーザー認証を含む、リアルタイムの株式市場データを可視化するウェブ アプリケーションの Python コードを記述してください。できるだけ効率的にしてください。」

料金とトークンのカウント

思考トークンは、テキスト出力トークンと同じ料金を使用します。

思考トークンの合計数は、レスポンスの usageMetadata 属性の thoughtsTokenCount フィールドから取得できます。

Swift

// ...

let response = try await model.generateContent("Why is the sky blue?")

if let usageMetadata = response.usageMetadata {
  print("Thoughts Token Count: \(usageMetadata.thoughtsTokenCount)")
}

Kotlin

// ...

val response = model.generateContent("Why is the sky blue?")

response.usageMetadata?.let { usageMetadata ->
    println("Thoughts Token Count: ${usageMetadata.thoughtsTokenCount}")
}

Java

// ...

ListenableFuture<GenerateContentResponse> response =
    model.generateContent("Why is the sky blue?");

Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
    @Override
    public void onSuccess(GenerateContentResponse result) {
        String usageMetadata = result.getUsageMetadata();
        if (usageMetadata != null) {
            System.out.println("Thoughts Token Count: " +
                usageMetadata.getThoughtsTokenCount());
        }
    }

    @Override
    public void onFailure(Throwable t) {
        t.printStackTrace();
    }
}, executor);

Web

// ...

const response = await model.generateContent("Why is the sky blue?");

if (response?.usageMetadata?.thoughtsTokenCount != null) {
    console.log(`Thoughts Token Count: ${response.usageMetadata.thoughtsTokenCount}`);
}

Dart

Flutter の思考トークンのカウントのサポートは、次のリリースで提供される予定です。

Unity

Unity の思考トークンのカウントのサポートは、次のリリースで提供される予定です。

トークンの詳細については、トークン数のガイドをご覧ください。