В режиме мышления модель сначала показывает ход своих рассуждений, а затем генерирует окончательный ответ. Режим мышления повышает точность вызова функций и хорошо подходит для математических задач, решения проблем и других сложных логических задач.
Когда режим размышления включен, выходные данные модели делятся на две части:
- Ход рассуждений – внутренние рассуждения или этапы планирования, которые выполняет модель.
- Response (Ответ). Окончательный ответ, сгенерированный для пользователя.
Требования
Режим рассуждения работает на устройствах с Gemini Nano V4 и более поздних версий. Вы можете протестировать режим размышления в рамках программы предварительного доступа для разработчиков на любом устройстве с поддержкой AICore.
Включить режим размышления
Чтобы использовать режим размышления, включите его, установив для флага enableThinking значение true в функции сборщика generateContentRequest:
val request = generateContentRequest {
text("Solve this complex riddle: ...")
enableThinking = true // Enable thinking mode for Gemini Nano V4
}
Как посмотреть рассуждения
ML Kit SDK предоставляет разные способы доступа к мыслям, предшествующим ответу модели, в зависимости от того, используете ли вы нестриминговую или потоковую реализацию.
Режим без потоковой передачи
В стандартных вызовах без потоковой передачи процесс рассуждения возвращается как часть полного ответа. Доступ к этому процессу можно получить с помощью свойства thoughtProcess (которое содержит список объектов Candidate) в объекте 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
}
Режим потоковой передачи
Чтобы поддерживать обратную связь в реальном времени, в интерфейс StreamingCallback был добавлен метод onNewThought. Это позволяет вашему приложению обрабатывать фрагменты мыслей по мере их генерации моделью.
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
}
Рекомендации
Вот несколько советов по использованию режима размышления:
- Индикаторы в интерфейсе. Поскольку на генерацию цепочки рассуждений может уйти время, показ мыслей или индикатора "думает" в режиме потоковой передачи может значительно улучшить восприятие производительности, показывая пользователю, что модель активна.
- Выборочная реализация. Если вы не хотите показывать конечным пользователям необработанные рассуждения, вы можете игнорировать поле
thoughtProcessили опустить реализациюonNewThought. МетодonNewThoughtпо умолчанию имеет пустую реализацию, чтобы обеспечить обратную совместимость.
Дополнительные советы можно найти в статье Режим размышления в Gemma. Обратите внимание, что AICore пока не поддерживает многоэтапные диалоги.