Korzystanie z trybu myślenia

Tryb myślenia powoduje, że model przed wygenerowaniem ostatecznej odpowiedzi przedstawia proces rozumowania. Tryb myślenia zwiększa dokładność wywoływania funkcji przez model i dobrze sprawdza się w przypadku zadań matematycznych, rozwiązywania problemów i innych złożonych zadań wymagających rozumowania.

Gdy tryb myślenia jest włączony, dane wyjściowe modelu są podzielone na 2 części:

  1. Proces myślowy: wewnętrzne rozumowanie lub etapy planowania, które wykonuje model.
  2. Odpowiedź: ostateczna odpowiedź wygenerowana dla użytkownika.

Wymagania wstępne

Tryb myślenia działa na urządzeniach z Gemini Nano w wersji 4 lub nowszej. Możesz przetestować tryb myślenia w ramach programu wersji przedpremierowej dla programistów na dowolnym urządzeniu z obsługą AICore.

Włącz tryb myślenia

Aby używać trybu myślenia, musisz wyrazić na to zgodę, ustawiając flagę enableThinking na true w funkcji kreatora generateContentRequest:

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

Dostęp do wniosków

Pakiet ML Kit SDK udostępnia różne sposoby uzyskiwania dostępu do toku rozumowania poprzedzającego odpowiedź modelu, w zależności od tego, czy używasz implementacji bez strumieniowania czy ze strumieniowaniem.

Tryb bez strumieniowania

W standardowych wywołaniach bez strumieniowania proces rozumowania jest zwracany jako część pełnej odpowiedzi. Dostęp do tego procesu możesz uzyskać za pomocą właściwości thoughtProcess (która zawiera listę obiektów Candidate) w obiekcie 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
}

Tryb strumieniowania

Aby obsługiwać opinie w czasie rzeczywistym, interfejs StreamingCallback został zaktualizowany i zawiera teraz metodę onNewThought. Dzięki temu aplikacja może obsługiwać strumieniowe fragmenty rozumowania generowane przez model.

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
}

Sprawdzone metody

Oto kilka sprawdzonych metod korzystania z trybu myślenia:

  • Wskaźniki interfejsu: generowanie etapów rozumowania może zająć trochę czasu, dlatego wyświetlanie toku myślenia lub wskaźnika „myślenia” w trybie strumieniowym może znacznie poprawić postrzeganą wydajność, pokazując użytkownikowi, że model jest aktywny.
  • Selektywna implementacja: jeśli nie chcesz ujawniać nieprzetworzonego toku rozumowania użytkownikom, możesz zignorować pole thoughtProcess lub pominąć implementację onNewThought. Metoda onNewThought ma domyślną pustą implementację, aby zapewnić zgodność wsteczną.

Więcej wskazówek znajdziesz w artykule Tryb myślenia w Gemmie. Pamiętaj, że rozmowy wieloturowe nie są obecnie obsługiwane w AICore.