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