Usar o modo de pensamento

O modo de raciocínio solicita que o modelo gere o processo de raciocínio antes de gerar uma resposta final. Ele melhora a precisão da chamada de função do modelo e funciona bem para matemática, resolução de problemas e outras tarefas complexas de raciocínio.

Quando o modo de raciocínio está ativado, a saída do modelo é dividida em duas partes:

  1. Processo de raciocínio: as etapas internas de raciocínio ou planejamento que o modelo realiza.
  2. Resposta: a resposta final gerada para o usuário.

Pré-requisitos

O modo de raciocínio funciona em dispositivos com o Gemini Nano V4 e versões mais recentes. É possível testar o modo de raciocínio pelo programa de prévia para desenvolvedores em qualquer dispositivo com o AICore ativado.

Ativar o modo de raciocínio

Para usar o modo de raciocínio, é necessário ativar a opção definindo a flag enableThinking como true na função do builder generateContentRequest:

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

Acessar pensamentos

O Kit de ML SDK oferece diferentes maneiras de acessar os pensamentos que precedem a resposta de um modelo, dependendo se você está usando uma implementação de streaming ou não.

Modo não streaming

Em chamadas não streaming padrão, o processo de raciocínio é retornado como parte da resposta completa. É possível acessar esse processo usando a propriedade thoughtProcess, que contém uma lista de objetos Candidate, no 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 streaming

Para oferecer suporte a feedback em tempo real, a interface StreamingCallback foi atualizada para incluir o método onNewThought. Isso permite que o app processe blocos de pensamento de streaming à medida que são gerados pelo 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áticas recomendadas

Confira algumas práticas recomendadas ao usar o modo de raciocínio:

  • Indicadores de IU:como as etapas de raciocínio podem levar tempo para serem geradas, mostrar os pensamentos ou um indicador de "raciocínio" no modo de streaming pode melhorar significativamente o desempenho percebido, mostrando ao usuário que o modelo está ativo.
  • Implementação seletiva:se você não quiser expor o raciocínio bruto aos usuários finais, ignore o campo thoughtProcess ou omita a implementação onNewThought. O método onNewThought tem uma implementação vazia padrão para ajudar a garantir a compatibilidade com versões anteriores.

Para mais dicas, consulte Modo de raciocínio no Gemma. No momento, as conversas com várias rodadas não são compatíveis com o AICore.