思考模式会提示模型在生成最终回答之前输出推理过程。思考模式可提高模型的功能调用准确率,非常适合处理数学、问题解决和其他复杂的推理任务。
启用思考模式后,模型输出会分为两部分:
- 思考过程:模型采取的内部推理或规划步骤。
- 回答:为用户生成的最终答案。
前提条件
思考模式适用于搭载 Gemini Nano V4 及更高版本的设备。您可以在任何支持 AICore 的设备上通过开发者预览版计划测试思考模式。
启用思考模式
如需使用思考模式,您必须在 generateContentRequest 构建器函数中将 enableThinking 标志设置为 true,以选择启用该模式:
val request = generateContentRequest {
text("Solve this complex riddle: ...")
enableThinking = true // Enable thinking mode for Gemini Nano V4
}
访问权限注意事项
机器学习套件 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
}
最佳做法
以下是使用思考模式时的一些最佳实践:
- 界面指示器:推理步骤可能需要一段时间才能生成,因此在流式传输模式下显示想法或“思考”指示器可以向用户表明模型处于活跃状态,从而显著提升感知性能。
- 选择性实现:如果您不想向最终用户公开原始推理,可以忽略
thoughtProcess字段或省略onNewThought实现。onNewThought方法具有默认的空实现,有助于确保向后兼容性。
如需了解更多提示,请参阅 Gemma 中的思考模式。请注意,AICore 目前不支持多轮对话。