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:
- Proces myślowy: wewnętrzne rozumowanie lub kroki planowania, które podejmuje model.
- 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
thoughtProcesslub pominąć implementacjęonNewThought. MetodaonNewThoughtma 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.