思考モードを使用する

思考モードでは、モデルは最終的なレスポンスを生成する前に推論プロセスを出力します。思考モードでは、モデルの関数呼び出しの精度が向上し、数学、問題解決、その他の複雑な推論タスクに適しています。

思考モードが有効になっている場合、モデル出力は次の 2 つの部分に分かれます。

  1. 思考プロセス: モデルが実行する内部の推論または計画の手順。
  2. 回答: ユーザー向けに生成された最終的な回答。

前提条件

思考モードは、Gemini Nano V4 以降を搭載したデバイスで動作します。思考モードは、AICore 対応デバイスのデベロッパー プレビュー プログラムでテストできます。

思考モードを有効にする

思考モードを使用するには、generateContentRequest ビルダー関数で enableThinking フラグを true に設定して、オプトインする必要があります。

val request = generateContentRequest {
    text("Solve this complex riddle: ...")
    enableThinking = true // Enable thinking mode for Gemini Nano V4
}

最後に

ML Kit SDK では、ストリーミング実装を使用しているか、非ストリーミング実装を使用しているかに応じて、モデルのレスポンスの前に考えられることをさまざまな方法で取得できます。

非ストリーミング モード

標準の非ストリーミング呼び出しでは、推論プロセスは完全なレスポンスの一部として返されます。このプロセスには、GenerateContentResponse オブジェクトの thoughtProcess プロパティ(Candidate オブジェクトのリストを含む)を使用してアクセスできます。

try {
    val response = generativeModel.generateContent(request)
    
    // 1. Access the main response
    val answer = response.candidates.firstOrNull()?.text
    println("Final Answer: $answer")
    
    // 2. Access the separated thought process
    println("Thought Process:")
    response.thoughtProcess.forEach { thoughtCandidate ->
        print(thoughtCandidate.text)
    }
} catch (e: GenAiException) {
    // Handle SDK-specific exceptions
}

ストリーミング モード

リアルタイム フィードバックをサポートするため、StreamingCallback インターフェースが onNewThought メソッドを含むように更新されました。これにより、アプリはモデルによって生成された思考チャンクのストリーミングを処理できます。

val callback = object : StreamingCallback {
    override fun onNewText(additionalText: String) {
        // Called for regular response chunks
        print(additionalText)
    }

    override fun onNewThought(additionalThought: String) {
        // Called for thought chunks before final text arrives
        // Update a separate reasoning UI or status indicator
        print("[Thinking: $additionalThought]")
    }
}

try {
    generativeModel.generateContent(request, callback)
} catch (e: GenAiException) {
    // Handle exception
}

ベスト プラクティス

思考モードを使用する際のベスト プラクティスは次のとおりです。

  • UI インジケーター: 推論ステップの生成には時間がかかる場合があるため、ストリーミング モードで思考や「思考中」インジケーターを表示すると、モデルがアクティブであることをユーザーに示し、認識されるパフォーマンスを大幅に向上させることができます。
  • 選択的実装: 未加工の推論をエンドユーザーに公開したくない場合は、thoughtProcess フィールドを無視するか、onNewThought 実装を省略できます。onNewThought メソッドには、下位互換性を確保するためのデフォルトの空の実装があります。

その他のヒントについては、Gemma の思考モードをご覧ください。AICore では現在、複数ターンの会話はサポートされていません。