Cómo usar el modo de pensamiento

El modo de razonamiento le indica al modelo que muestre su proceso de razonamiento antes de generar una respuesta final. El modo de razonamiento mejora la exactitud 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 de razonamiento o planificación internos 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.

Habilitar el modo de pensamiento

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

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

Accede a tus pensamientos

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

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 el feedback en tiempo real, se actualizó la interfaz StreamingCallback para incluir el método onNewThought. Esto permite que tu app controle los fragmentos de pensamiento de transmisión 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: Debido a que los pasos de razonamiento pueden tardar en generarse, mostrar los pensamientos o un indicador de "pensamiento" 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 omitir la implementación de onNewThought. El método onNewThought tiene una implementación vacía predeterminada 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.