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:
- Processo de raciocínio: as etapas internas de raciocínio ou planejamento que o modelo realiza.
- 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
thoughtProcessou omita a implementaçãoonNewThought. O métodoonNewThoughttem 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.