思考モードでは、最終的なレスポンスを生成する前に、推論プロセスを出力するようにモデルに指示します。思考モードは、モデルの関数呼び出しの精度を向上させ、数学、問題解決、その他の複雑な推論タスクに適しています。
思考モードが有効になっている場合、モデル出力は次の 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 ではマルチターン会話はサポートされていません。