Usare la modalità di pensiero

La modalità di ragionamento richiede al modello di restituire il processo di ragionamento prima di generare una risposta finale. La modalità di ragionamento migliora l'accuratezza delle chiamate di funzione del modello ed è adatta per la matematica, la risoluzione di problemi e altre attività di ragionamento complesse.

Quando la modalità di ragionamento è abilitata, l'output del modello è suddiviso in due parti:

  1. Processo di ragionamento: i passaggi di ragionamento o pianificazione interni eseguiti dal modello.
  2. Risposta: la risposta finale generata per l'utente.

Prerequisiti

La modalità di ragionamento funziona sui dispositivi che eseguono Gemini Nano V4 e versioni successive. Puoi testare la modalità di ragionamento tramite il programma Anteprima per gli sviluppatori su qualsiasi dispositivo abilitato per AICore.

Abilitare la modalità di ragionamento

Per utilizzare la modalità di ragionamento, devi attivare l'opzione impostando il flag enableThinking su true nella funzione del builder generateContentRequest:

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

Accedere ai pensieri

L'SDK ML Kit offre diversi modi per accedere ai pensieri che precedono la risposta di un modello, a seconda che tu stia utilizzando un'implementazione non in streaming o in streaming.

Modalità non in streaming

Nelle chiamate non in streaming standard, il processo di ragionamento viene restituito come parte della risposta completa. Puoi accedere a questo processo utilizzando la proprietà thoughtProcess, che contiene un elenco di oggetti Candidate, sull'oggetto 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
}

Modalità streaming

Per supportare il feedback in tempo reale, l'interfaccia StreamingCallback è stata aggiornata per includere il metodo onNewThought. In questo modo, la tua app può gestire i blocchi di pensieri in streaming man mano che vengono generati dal modello.

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
}

Best practice

Di seguito sono riportate alcune best practice per l'utilizzo della modalità di ragionamento:

  • Indicatori dell'interfaccia utente: poiché la generazione dei passaggi di ragionamento può richiedere tempo, la visualizzazione dei pensieri o di un indicatore "ragionamento" in modalità streaming può migliorare notevolmente le prestazioni percepite mostrando all'utente che il modello è attivo.
  • Implementazione selettiva: se non vuoi esporre il ragionamento non elaborato agli utenti finali, puoi ignorare il campo thoughtProcess o omettere l'implementazione onNewThought. Il metodo onNewThought ha un'implementazione vuota predefinita per garantire la compatibilità con le versioni precedenti.

Per ulteriori suggerimenti, consulta la sezione Modalità di ragionamento in Gemma. Tieni presente che al momento le conversazioni multi-turn non sono supportate in AICore.