Cómo usar el modo de pensamiento

El modo de pensamiento le indica al modelo que muestre su proceso de razonamiento antes de generar una respuesta final. El modo de razonamiento mejora la precisión de la llamada a funciones del modelo y funciona bien para matemáticas, resolución de problemas y otras tareas de razonamiento complejas.

Cuando el modo de pensamiento está habilitado, el resultado del modelo se divide en dos partes:

  1. Proceso de pensamiento: Son los pasos internos de razonamiento o planificación que sigue el modelo.
  2. Respuesta: Es la respuesta final que se genera para el usuario.

Requisitos previos

El modo de pensamiento funciona en dispositivos que ejecutan Gemini Nano V4 y versiones posteriores. Puedes probar el modo de pensamiento a través del programa de Versión preliminar para desarrolladores en cualquier dispositivo compatible con AICore.

Cómo habilitar el modo de pensamiento

Para usar el modo de pensamiento, debes habilitarlo configurando la marca enableThinking como true en la función de compilación generateContentRequest:

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

Reflexiones sobre el acceso

El SDK de ML Kit proporciona diferentes formas de acceder a las ideas que preceden a la respuesta de un modelo, según si usas una implementación de transmisión o no transmisión.

Modo sin transmisión

En las llamadas estándar sin transmisión, el proceso de razonamiento se devuelve como parte de la respuesta completa. Puedes acceder a este proceso con la propiedad thoughtProcess, que contiene una lista de objetos Candidate en el objeto GenerateContentResponse.

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
}

Modo de transmisión

Para admitir los comentarios en tiempo real, se actualizó la interfaz StreamingCallback para incluir el método onNewThought. Esto permite que tu app controle los fragmentos de pensamiento transmitidos a medida que los genera el modelo.

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
}

Prácticas recomendadas

Estas son algunas prácticas recomendadas para usar el modo de pensamiento:

  • Indicadores de la IU: Dado que los pasos de razonamiento pueden tardar en generarse, mostrar los pensamientos o un indicador de "pensando" en el modo de transmisión puede mejorar significativamente el rendimiento percibido, ya que le muestra al usuario que el modelo está activo.
  • Implementación selectiva: Si no quieres exponer el razonamiento sin procesar a los usuarios finales, puedes ignorar el campo thoughtProcess o bien omitir la implementación de onNewThought. El método onNewThought tiene una implementación predeterminada vacía para ayudar a garantizar la retrocompatibilidad.

Para obtener más sugerencias, consulta Modo de pensamiento en Gemma. Ten en cuenta que, por el momento, AICore no admite conversaciones de varios turnos.