Korzystanie z trybu myślenia

Tryb myślenia powoduje, że model przedstawia proces rozumowania przed wygenerowaniem ostatecznej odpowiedzi. Tryb myślenia zwiększa dokładność wywoływania funkcji przez model i 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 kroki planowania, które podejmuje 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. Tryb myślenia możesz przetestować w ramach programu wersji przedpremierowej dla programistów na dowolnym urządzeniu z AICore.

Włączanie trybu myślenia

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

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

Dostęp do myśli

Pakiet ML Kit SDK udostępnia różne sposoby uzyskiwania dostępu do informacji, które poprzedzają odpowiedź modelu, w zależności od tego, czy używasz implementacji bez przesyłania strumieniowego, czy z przesyłaniem strumieniowym.

Tryb bez strumieniowania

W przypadku standardowych połączeń bez przesyłania strumieniowego proces rozumowania jest zwracany jako część pełnej odpowiedzi. Możesz uzyskać dostęp do tego procesu 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ć odpowiedzi w czasie rzeczywistym, interfejs StreamingCallback został zaktualizowany i zawiera teraz metodę onNewThought. Umożliwia to aplikacji obsługę strumieniowych fragmentów myśli w miarę ich generowania 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 kroków rozumowania może zająć trochę czasu, dlatego wyświetlanie myśli lub wskaźnika „myślenie” w trybie przesyłania strumieniowego może znacznie poprawić postrzeganą wydajność, ponieważ pokazuje użytkownikowi, że model jest aktywny.
  • Selektywne wdrażanie: jeśli nie chcesz udostępniać surowego rozumowania użytkownikom końcowym, 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 Gemma. Pamiętaj, że rozmowy wieloetapowe nie są obecnie obsługiwane w AICore.