使用思考模式

思考模式会提示模型在生成最终回答之前输出推理过程。思考模式可提高模型的功能调用准确率,非常适合处理数学、问题解决和其他复杂的推理任务。

启用思考模式后,模型输出会分为两部分:

  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
}

访问权限注意事项

机器学习套件 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 目前不支持多轮对话。