Модели типа Gemini 2.5 способны использовать внутренний «мыслительный процесс», который значительно улучшает их навыки рассуждения и многоэтапного планирования, что делает их весьма эффективными для решения сложных задач, таких как программирование, высшая математика и анализ данных.
Модели мышления предлагают следующие конфигурации и варианты:
Бюджет мышления : Вы можете настроить объем «размышлений», которые может выполнять модель, используя бюджет мышления . Эта настройка особенно важна, если приоритетом является снижение задержки или стоимости. Также проанализируйте сравнение сложности задач , чтобы определить, насколько модели может потребоваться использовать свои мыслительные способности.
Краткие описания мыслей : Вы можете включить отображение кратких описаний мыслей, которые будут добавляться к сгенерированному ответу. Эти описания представляют собой синтезированные версии исходных мыслей модели и позволяют получить представление о внутреннем процессе рассуждений модели.
Сигнатуры мыслей : SDK Firebase AI Logic автоматически обрабатывают сигнатуры мыслей , что гарантирует модели доступ к контексту мыслей из предыдущих ходов, особенно при вызове функций.
Обязательно ознакомьтесь с передовыми методами и рекомендациями по использованию моделей мышления.
Используйте модель мышления
Используйте модель мышления так же, как и любую другую модель Gemini (инициализируйте выбранного поставщика API Gemini , создайте экземпляр GenerativeModel и т. д.). Эти модели можно использовать для задач генерации текста или кода, например, для создания структурированного вывода или анализа мультимодальных входных данных (таких как изображения , видео , аудио или PDF-файлы ). Вы даже можете использовать модели мышления при потоковой передаче выходных данных.
Модели, поддерживающие эту возможность
Эту возможность поддерживают только модели Gemini 3 и Gemini 2.5 .
-
gemini-3-pro-preview -
gemini-3-pro-image-preview(также известный как "nano banana pro") -
gemini-2.5-pro -
gemini-2.5-flash -
gemini-2.5-flash-lite -
gemini-2.5-flash-native-audio-preview-09-2025( Gemini Developer API ) -
gemini-live-2.5-flash-preview-native-audio-09-2025( Vertex AI Gemini API )
Рекомендации и подсказки по использованию моделей мышления
Мы рекомендуем протестировать ваши подсказки в Google AI Studio или Vertex AI Studio , где вы сможете увидеть весь мыслительный процесс. Вы сможете выявить любые области, где модель могла допустить ошибки, чтобы доработать ваши подсказки и получить более последовательные и точные ответы.
Начните с общего запроса, описывающего желаемый результат, и понаблюдайте за первоначальными мыслями модели, определяющими её ответ. Если ответ не соответствует ожиданиям, помогите модели сгенерировать лучший ответ, используя любой из следующих методов запроса :
- Предоставьте пошаговые инструкции.
- Приведите несколько примеров пар «вход-выход».
- Предоставьте рекомендации по формулировке и форматированию выходных данных и ответов.
- Укажите конкретные этапы проверки.
Помимо подсказок, рассмотрите возможность использования следующих рекомендаций:
Системные инструкции — это своего рода «преамбула», которую вы добавляете перед тем, как модель будет получать какие-либо дальнейшие указания от пользователя или командной строки. Они позволяют вам управлять поведением модели в соответствии с вашими конкретными потребностями и сценариями использования.
Установите « бюджет мышления» , чтобы настроить объем мыслительной работы модели. Если вы установите низкий бюджет, модель не будет «излишне обдумывать» свой ответ. Если вы установите высокий бюджет, модель сможет обдумывать больше, если это необходимо. Установка бюджета мышления также резервирует большую часть общего лимита выходных токенов для фактического ответа.
Включите мониторинг ИИ в консоли Firebase , чтобы отслеживать количество токенов мышления и задержку запросов, для которых включено мышление. А если у вас включены сводки мыслей , они будут отображаться в консоли, где вы сможете изучить подробные рассуждения модели, что поможет вам отлаживать и совершенствовать ваши запросы.
Контролируйте бюджет на размышления
Чтобы контролировать объем мыслительной работы, которую модель может выполнить для генерации ответа, вы можете указать количество разрешенных ей токенов «бюджета мышления» .
Вы можете вручную установить бюджет на обдумывание задач в ситуациях, когда вам может потребоваться больше или меньше токенов, чем предусмотрено по умолчанию. Более подробные рекомендации по сложности задач и рекомендуемым бюджетам вы найдете далее в этом разделе. Вот некоторые общие рекомендации:
- Установите низкий расчетный бюджет, если важна задержка или если задача несложная.
- Установите высокий бюджет для более сложных задач.
Составьте бюджет для размышлений
Чтобы просмотреть контент и код, относящиеся к вашему поставщику API Gemini , нажмите на него. |
Задайте бюджет мышления в GenerationConfig при создании экземпляра GenerativeModel . Конфигурация сохраняется на протяжении всего времени существования экземпляра. Если вы хотите использовать разные бюджеты мышления для разных запросов, создайте экземпляры GenerativeModel настроенные для каждого бюджета.
Подробнее о бюджетных значениях, учитываемых при поддержке мыслительных процессов, вы узнаете далее в этом разделе.
Быстрый
Задайте бюджет мышления в параметре GenerationConfig при создании экземпляра GenerativeModel .
// ...
// Set the thinking configuration
// Use a thinking budget value appropriate for your model (example value shown here)
let generationConfig = GenerationConfig(
thinkingConfig: ThinkingConfig(thinkingBudget: 1024)
)
// Specify the config as part of creating the `GenerativeModel` instance
let model = FirebaseAI.firebaseAI(backend: .googleAI()).generativeModel(
modelName: "GEMINI_MODEL_NAME",
generationConfig: generationConfig
)
// ...
Kotlin
Задайте значения параметров в GenerationConfig при создании экземпляра GenerativeModel .
// ...
// Set the thinking configuration
// Use a thinking budget value appropriate for your model (example value shown here)
val generationConfig = generationConfig {
thinkingConfig = thinkingConfig {
thinkingBudget = 1024
}
}
// Specify the config as part of creating the `GenerativeModel` instance
val model = Firebase.ai(backend = GenerativeBackend.googleAI()).generativeModel(
modelName = "GEMINI_MODEL_NAME",
generationConfig,
)
// ...
Java
Задайте значения параметров в GenerationConfig при создании экземпляра GenerativeModel .
// ...
// Set the thinking configuration
// Use a thinking budget value appropriate for your model (example value shown here)
ThinkingConfig thinkingConfig = new ThinkingConfig.Builder()
.setThinkingBudget(1024)
.build();
GenerationConfig generationConfig = GenerationConfig.builder()
.setThinkingConfig(thinkingConfig)
.build();
// Specify the config as part of creating the `GenerativeModel` instance
GenerativeModelFutures model = GenerativeModelFutures.from(
FirebaseAI.getInstance(GenerativeBackend.googleAI())
.generativeModel(
/* modelName */ "GEMINI_MODEL_NAME",
/* generationConfig */ generationConfig
);
);
// ...
Web
Задайте значения параметров в GenerationConfig при создании экземпляра GenerativeModel .
// ...
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });
// Set the thinking configuration
// Use a thinking budget value appropriate for your model (example value shown here)
const generationConfig = {
thinkingConfig: {
thinkingBudget: 1024
}
};
// Specify the config as part of creating the `GenerativeModel` instance
const model = getGenerativeModel(ai, { model: "GEMINI_MODEL_NAME", generationConfig });
// ...
Dart
Задайте значения параметров в GenerationConfig при создании экземпляра GenerativeModel .
// ...
// Set the thinking configuration
// Use a thinking budget value appropriate for your model (example value shown here)
final thinkingConfig = ThinkingConfig(thinkingBudget: 1024);
final generationConfig = GenerationConfig(
thinkingConfig: thinkingConfig
);
// Specify the config as part of creating the `GenerativeModel` instance
final model = FirebaseAI.googleAI().generativeModel(
model: 'GEMINI_MODEL_NAME',
config: generationConfig,
);
// ...
Единство
Задайте значения параметров в GenerationConfig при создании экземпляра GenerativeModel .
// ...
// Set the thinking configuration
// Use a thinking budget value appropriate for your model (example value shown here)
var thinkingConfig = new ThinkingConfig(thinkingBudget: 1024);
var generationConfig = new GenerationConfig(
thinkingConfig: thinkingConfig
);
// Specify the config as part of creating the `GenerativeModel` instance
var model = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI()).GetGenerativeModel(
modelName: "GEMINI_MODEL_NAME",
generationConfig: generationConfig
);
// ...
Бюджетные значения, поддерживаемые мышлением
В таблице ниже приведены значения бюджета мышления, которые можно установить для каждой модели, настроив thinkingBudget этой модели .
| Модель | Значение по умолчанию | Доступный ассортимент для тех, кто планирует бюджет. | Ценность для отключить мышление | Ценность для способствовать динамичному мышлению | |
|---|---|---|---|---|---|
| Минимальное значение | Максимальное значение | ||||
| Gemini 2.5 Pro | 8,192 | 128 | 32,768 | нельзя выключить | -1 |
| Вспышка Gemini 2.5 | 8,192 | 1 | 24,576 | 0 | -1 |
| Фонарь Gemini 2.5 Flash‑Lite | 0(мышление по умолчанию отключено) | 512 | 24,576 | 0(или вообще не стоит планировать бюджет) | -1 |
Отключите мышление
Для некоторых более простых задач мыслительные способности не требуются, и достаточно традиционного вывода. Или, если приоритетом является сокращение задержки, вы можете не захотеть, чтобы модель тратила больше времени, чем необходимо для генерации ответа.
В подобных ситуациях можно отключить (или выключить) мышление:
- Gemini 2.5 Pro : мышление нельзя отключить
- Gemini 2.5 Flash : установить
thinkingBudgetна0токенов - Gemini 2.5 Flash‑Lite : по умолчанию функция мышления отключена.
Способствуйте динамичному мышлению
Вы можете позволить модели самой решать, когда и сколько она будет думать (это называется динамическим мышлением ), установив thinkingBudget равным -1 . Модель может использовать столько токенов, сколько сочтет нужным, но не более максимального значения, указанного выше.
Сложность задачи
Простые задачи — можно отключить мыслительный процесс.
Простые запросы, не требующие сложных рассуждений, например, поиск фактов или классификация. Примеры:- «Где была основана компания DeepMind?»
- "В этом письме содержится просьба о встрече или просто предоставляется информация?"
Задачи средней сложности — требуется бюджет по умолчанию или дополнительный бюджет на размышление.
Типичные запросы, которые выигрывают от поэтапной обработки или более глубокого понимания. Примеры:- «Проведите аналогию между фотосинтезом и взрослением».
- «Сравните электромобили и гибридные автомобили».
Сложные задачи — может потребоваться максимальный бюджет на обдумывание.
Действительно сложные задачи, такие как решение сложных математических задач или программирование. Эти задачи требуют от модели полного задействования ее аналитических и планировочных способностей, часто включающих множество внутренних этапов, прежде чем будет дан ответ. Примеры:- "Решите задачу 1 на AIME 2025: Найдите сумму всех целочисленных оснований b > 9, для которых 17b является делителем 97b."
- «Напишите код на Python для веб-приложения, которое визуализирует данные фондового рынка в реальном времени, включая аутентификацию пользователей. Сделайте его максимально эффективным».
Включайте в ответы краткие изложения своих мыслей.
Краткие описания мыслей представляют собой синтезированные версии исходных мыслей модели и позволяют получить представление о внутреннем процессе рассуждений модели.
Вот несколько причин, по которым стоит включать в ответы краткие изложения своих мыслей:
Вы можете отобразить краткое изложение мысли в пользовательском интерфейсе вашего приложения или сделать его доступным для пользователей. Краткое изложение мысли возвращается как отдельная часть ответа, что дает вам больше контроля над тем, как оно используется в вашем приложении.
Если вы также включите мониторинг ИИ в консоли Firebase , то сводки мыслей будут отображаться в консоли, где вы сможете изучить подробные рассуждения модели, что поможет вам отлаживать и уточнять ваши подсказки.
Вот несколько ключевых моментов, касающихся кратких изложений мыслей:
Сводки мыслей не регулируются бюджетами мышления (бюджеты применяются только к исходным мыслям модели). Однако, если мышление отключено , модель не будет возвращать сводку мыслей.
Краткие изложения мыслей считаются частью обычного текстового ответа, генерируемого моделью, и учитываются как выходные токены.
Включить краткие изложения мыслей
Чтобы просмотреть контент и код, относящиеся к вашему поставщику API Gemini , нажмите на него. |
Вы можете включить отображение кратких обзоров мыслей, установив параметр includeThoughts в значение true в конфигурации вашей модели. Затем вы сможете получить доступ к обзору, проверив поле thoughtSummary в ответе.
Вот пример, демонстрирующий, как включить и получить краткие изложения мыслей вместе с ответом:
Быстрый
Включите отображение кратких изложений мыслей в GenerationConfig при создании экземпляра GenerativeModel .
// ...
// Set the thinking configuration
// Optionally enable thought summaries in the generated response (default is false)
let generationConfig = GenerationConfig(
thinkingConfig: ThinkingConfig(includeThoughts: true)
)
// Specify the config as part of creating the `GenerativeModel` instance
let model = FirebaseAI.firebaseAI(backend: .googleAI()).generativeModel(
modelName: "GEMINI_MODEL_NAME",
generationConfig: generationConfig
)
let response = try await model.generateContent("solve x^2 + 4x + 4 = 0")
// Handle the response that includes thought summaries
if let thoughtSummary = response.thoughtSummary {
print("Thought Summary: \(thoughtSummary)")
}
guard let text = response.text else {
fatalError("No text in response.")
}
print("Answer: \(text)")
Kotlin
Включите отображение кратких изложений мыслей в GenerationConfig при создании экземпляра GenerativeModel .
// ...
// Set the thinking configuration
// Optionally enable thought summaries in the generated response (default is false)
val generationConfig = generationConfig {
thinkingConfig = thinkingConfig {
includeThoughts = true
}
}
// Specify the config as part of creating the `GenerativeModel` instance
val model = Firebase.ai(backend = GenerativeBackend.googleAI()).generativeModel(
modelName = "GEMINI_MODEL_NAME",
generationConfig,
)
val response = model.generateContent("solve x^2 + 4x + 4 = 0")
// Handle the response that includes thought summaries
response.thoughtSummary?.let {
println("Thought Summary: $it")
}
response.text?.let {
println("Answer: $it")
}
Java
Включите отображение кратких изложений мыслей в GenerationConfig при создании экземпляра GenerativeModel .
// ...
// Set the thinking configuration
// Optionally enable thought summaries in the generated response (default is false)
ThinkingConfig thinkingConfig = new ThinkingConfig.Builder()
.setIncludeThoughts(true)
.build();
GenerationConfig generationConfig = GenerationConfig.builder()
.setThinkingConfig(thinkingConfig)
.build();
// Specify the config as part of creating the `GenerativeModel` instance
GenerativeModelFutures model = GenerativeModelFutures.from(
FirebaseAI.getInstance(GenerativeBackend.googleAI())
.generativeModel(
/* modelName */ "GEMINI_MODEL_NAME",
/* generationConfig */ generationConfig
);
);
// Handle the response that includes thought summaries
ListenableFuture responseFuture = model.generateContent("solve x^2 + 4x + 4 = 0");
Futures.addCallback(responseFuture, new FutureCallback() {
@Override
public void onSuccess(GenerateContentResponse response) {
if (response.getThoughtSummary() != null) {
System.out.println("Thought Summary: " + response.getThoughtSummary());
}
if (response.getText() != null) {
System.out.println("Answer: " + response.getText());
}
}
@Override
public void onFailure(Throwable t) {
// Handle error
}
}, MoreExecutors.directExecutor());
Web
Включите отображение кратких изложений мыслей в GenerationConfig при создании экземпляра GenerativeModel .
// ...
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });
// Set the thinking configuration
// Optionally enable thought summaries in the generated response (default is false)
const generationConfig = {
thinkingConfig: {
includeThoughts: true
}
};
// Specify the config as part of creating the `GenerativeModel` instance
const model = getGenerativeModel(ai, { model: "GEMINI_MODEL_NAME", generationConfig });
const result = await model.generateContent("solve x^2 + 4x + 4 = 0");
const response = result.response;
// Handle the response that includes thought summaries
if (response.thoughtSummary()) {
console.log(`Thought Summary: ${response.thoughtSummary()}`);
}
const text = response.text();
console.log(`Answer: ${text}`);
Dart
Включите отображение кратких изложений мыслей в GenerationConfig при создании экземпляра GenerativeModel .
// ...
// Set the thinking configuration
// Optionally enable thought summaries in the generated response (default is false)
final thinkingConfig = ThinkingConfig(includeThoughts: true);
final generationConfig = GenerationConfig(
thinkingConfig: thinkingConfig
);
// Specify the config as part of creating the `GenerativeModel` instance
final model = FirebaseAI.googleAI().generativeModel(
model: 'GEMINI_MODEL_NAME',
generationConfig: generationConfig,
);
final response = await model.generateContent('solve x^2 + 4x + 4 = 0');
// Handle the response that includes thought summaries
if (response.thoughtSummary != null) {
print('Thought Summary: ${response.thoughtSummary}');
}
if (response.text != null) {
print('Answer: ${response.text}');
}
Единство
Включите отображение кратких изложений мыслей в GenerationConfig при создании экземпляра GenerativeModel .
// ...
// Set the thinking configuration
// Optionally enable thought summaries in the generated response (default is false)
var thinkingConfig = new ThinkingConfig(includeThoughts: true);
var generationConfig = new GenerationConfig(
thinkingConfig: thinkingConfig
);
// Specify the config as part of creating the `GenerativeModel` instance
var model = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI()).GetGenerativeModel(
modelName: "GEMINI_MODEL_NAME",
generationConfig: generationConfig
);
var response = await model.GenerateContentAsync("solve x^2 + 4x + 4 = 0");
// Handle the response that includes thought summaries
if (response.ThoughtSummary != null) {
Debug.Log($"Thought Summary: {response.ThoughtSummary}");
}
if (response.Text != null) {
Debug.Log($"Answer: {response.Text}");
}
# Example Response:
# Okay, let's solve the quadratic equation x² + 4x + 4 = 0.
# ...
# **Answer:**
# The solution to the equation x² + 4x + 4 = 0 is x = -2. This is a repeated root (or a root with multiplicity 2).
# Example Thought Summary:
# **My Thought Process for Solving the Quadratic Equation**
#
# Alright, let's break down this quadratic, x² + 4x + 4 = 0. First things first:
# it's a quadratic; the x² term gives it away, and we know the general form is
# ax² + bx + c = 0.
#
# So, let's identify the coefficients: a = 1, b = 4, and c = 4. Now, what's the
# most efficient path to the solution? My gut tells me to try factoring; it's
# often the fastest route if it works. If that fails, I'll default to the quadratic
# formula, which is foolproof. Completing the square? It's good for deriving the
# formula or when factoring is difficult, but not usually my first choice for
# direct solving, but it can't hurt to keep it as an option.
#
# Factoring, then. I need to find two numbers that multiply to 'c' (4) and add
# up to 'b' (4). Let's see... 1 and 4 don't work (add up to 5). 2 and 2? Bingo!
# They multiply to 4 and add up to 4. This means I can rewrite the equation as
# (x + 2)(x + 2) = 0, or more concisely, (x + 2)² = 0. Solving for x is now
# trivial: x + 2 = 0, thus x = -2.
#
# Okay, just to be absolutely certain, I'll run the quadratic formula just to
# double-check. x = [-b ± √(b² - 4ac)] / 2a. Plugging in the values, x = [-4 ±
# √(4² - 4 * 1 * 4)] / (2 * 1). That simplifies to x = [-4 ± √0] / 2. So, x =
# -2 again - a repeated root. Nice.
#
# Now, let's check via completing the square. Starting from the same equation,
# (x² + 4x) = -4. Take half of the b-value (4/2 = 2), square it (2² = 4), and
# add it to both sides, so x² + 4x + 4 = -4 + 4. Which simplifies into (x + 2)²
# = 0. The square root on both sides gives us x + 2 = 0, therefore x = -2, as
# expected.
#
# Always, *always* confirm! Let's substitute x = -2 back into the original
# equation: (-2)² + 4(-2) + 4 = 0. That's 4 - 8 + 4 = 0. It checks out.
#
# Conclusion: the solution is x = -2. Confirmed.
Краткие обзоры мыслей в потоке
Вы также можете просмотреть сводки мыслей, если решите передавать ответ в потоковом режиме с помощью generateContentStream . Это позволит получать скользящие, инкрементальные сводки в процессе генерации ответа.
Быстрый
Включите отображение кратких изложений мыслей в GenerationConfig при создании экземпляра GenerativeModel .
// ...
// Set the thinking configuration
// Optionally enable thought summaries in the generated response (default is false)
let generationConfig = GenerationConfig(
thinkingConfig: ThinkingConfig(includeThoughts: true)
)
// Specify the config as part of creating the `GenerativeModel` instance
let model = FirebaseAI.firebaseAI(backend: .googleAI()).generativeModel(
modelName: "GEMINI_MODEL_NAME",
generationConfig: generationConfig
)
let stream = try model.generateContentStream("solve x^2 + 4x + 4 = 0")
// Handle the streamed response that includes thought summaries
var thoughts = ""
var answer = ""
for try await response in stream {
if let thought = response.thoughtSummary {
if thoughts.isEmpty {
print("--- Thoughts Summary ---")
}
print(thought)
thoughts += thought
}
if let text = response.text {
if answer.isEmpty {
print("--- Answer ---")
}
print(text)
answer += text
}
}
Kotlin
Включите отображение кратких изложений мыслей в GenerationConfig при создании экземпляра GenerativeModel .
// ...
// Set the thinking configuration
// Optionally enable thought summaries in the generated response (default is false)
val generationConfig = generationConfig {
thinkingConfig = thinkingConfig {
includeThoughts = true
}
}
// Specify the config as part of creating the `GenerativeModel` instance
val model = Firebase.ai(backend = GenerativeBackend.googleAI()).generativeModel(
modelName = "GEMINI_MODEL_NAME",
generationConfig,
)
// Handle the streamed response that includes thought summaries
var thoughts = ""
var answer = ""
model.generateContentStream("solve x^2 + 4x + 4 = 0").collect { response ->
response.thoughtSummary?.let {
if (thoughts.isEmpty()) {
println("--- Thoughts Summary ---")
}
print(it)
thoughts += it
}
response.text?.let {
if (answer.isEmpty()) {
println("--- Answer ---")
}
print(it)
answer += it
}
}
Java
Включите отображение кратких изложений мыслей в GenerationConfig при создании экземпляра GenerativeModel .
// ...
// Set the thinking configuration
// Optionally enable thought summaries in the generated response (default is false)
ThinkingConfig thinkingConfig = new ThinkingConfig.Builder()
.setIncludeThoughts(true)
.build();
GenerationConfig generationConfig = GenerationConfig.builder()
.setThinkingConfig(thinkingConfig)
.build();
// Specify the config as part of creating the `GenerativeModel` instance
GenerativeModelFutures model = GenerativeModelFutures.from(
FirebaseAI.getInstance(GenerativeBackend.googleAI())
.generativeModel(
/* modelName */ "GEMINI_MODEL_NAME",
/* generationConfig */ generationConfig
);
);
// Streaming with Java is complex and depends on the async library used.
// This is a conceptual example using a reactive stream.
Flowable responseStream = model.generateContentStream("solve x^2 + 4x + 4 = 0");
// Handle the streamed response that includes thought summaries
StringBuilder thoughts = new StringBuilder();
StringBuilder answer = new StringBuilder();
responseStream.subscribe(response -> {
if (response.getThoughtSummary() != null) {
if (thoughts.length() == 0) {
System.out.println("--- Thoughts Summary ---");
}
System.out.print(response.getThoughtSummary());
thoughts.append(response.getThoughtSummary());
}
if (response.getText() != null) {
if (answer.length() == 0) {
System.out.println("--- Answer ---");
}
System.out.print(response.getText());
answer.append(response.getText());
}
}, throwable -> {
// Handle error
});
Web
Включите отображение кратких изложений мыслей в GenerationConfig при создании экземпляра GenerativeModel .
// ...
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });
// Set the thinking configuration
// Optionally enable thought summaries in the generated response (default is false)
const generationConfig = {
thinkingConfig: {
includeThoughts: true
}
};
// Specify the config as part of creating the `GenerativeModel` instance
const model = getGenerativeModel(ai, { model: "GEMINI_MODEL_NAME", generationConfig });
const result = await model.generateContentStream("solve x^2 + 4x + 4 = 0");
// Handle the streamed response that includes thought summaries
let thoughts = "";
let answer = "";
for await (const chunk of result.stream) {
if (chunk.thoughtSummary()) {
if (thoughts === "") {
console.log("--- Thoughts Summary ---");
}
// In Node.js, process.stdout.write(chunk.thoughtSummary()) could be used
// to avoid extra newlines.
console.log(chunk.thoughtSummary());
thoughts += chunk.thoughtSummary();
}
const text = chunk.text();
if (text) {
if (answer === "") {
console.log("--- Answer ---");
}
// In Node.js, process.stdout.write(text) could be used.
console.log(text);
answer += text;
}
}
Dart
Включите отображение кратких изложений мыслей в GenerationConfig при создании экземпляра GenerativeModel .
// ...
// Set the thinking configuration
// Optionally enable thought summaries in the generated response (default is false)
final thinkingConfig = ThinkingConfig(includeThoughts: true);
final generationConfig = GenerationConfig(
thinkingConfig: thinkingConfig
);
// Specify the config as part of creating the `GenerativeModel` instance
final model = FirebaseAI.googleAI().generativeModel(
model: 'GEMINI_MODEL_NAME',
generationConfig: generationConfig,
);
final responses = model.generateContentStream('solve x^2 + 4x + 4 = 0');
// Handle the streamed response that includes thought summaries
var thoughts = '';
var answer = '';
await for (final response in responses) {
if (response.thoughtSummary != null) {
if (thoughts.isEmpty) {
print('--- Thoughts Summary ---');
}
thoughts += response.thoughtSummary!;
}
if (response.text != null) {
if (answer.isEmpty) {
print('--- Answer ---');
}
answer += response.text!;
}
}
Единство
Включите отображение кратких изложений мыслей в GenerationConfig при создании экземпляра GenerativeModel .
// ...
// Set the thinking configuration
// Optionally enable thought summaries in the generated response (default is false)
var thinkingConfig = new ThinkingConfig(includeThoughts: true);
var generationConfig = new GenerationConfig(
thinkingConfig: thinkingConfig
);
// Specify the config as part of creating the `GenerativeModel` instance
var model = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI()).GetGenerativeModel(
modelName: "GEMINI_MODEL_NAME",
generationConfig: generationConfig
);
var stream = model.GenerateContentStreamAsync("solve x^2 + 4x + 4 = 0");
// Handle the streamed response that includes thought summaries
var thoughts = "";
var answer = "";
await foreach (var response in stream)
{
if (response.ThoughtSummary != null)
{
if (string.IsNullOrEmpty(thoughts))
{
Debug.Log("--- Thoughts Summary ---");
}
Debug.Log(response.ThoughtSummary);
thoughts += response.ThoughtSummary;
}
if (response.Text != null)
{
if (string.IsNullOrEmpty(answer))
{
Debug.Log("--- Answer ---");
}
Debug.Log(response.Text);
answer += response.Text;
}
}
Понимание особенностей мышления
При использовании мыслительного процесса в многоходовых взаимодействиях модель не имеет доступа к контексту мыслей из предыдущих ходов. Однако, если вы используете вызов функций , вы можете воспользоваться сигнатурами мыслей для сохранения контекста мыслей между ходами. Сигнатуры мыслей — это зашифрованные представления внутреннего мыслительного процесса модели, и они доступны при использовании мыслительного процесса и вызова функций. В частности, сигнатуры мыслей генерируются, когда:
- Мышление получает возможность развиваться, и мысли генерируются.
- Запрос включает объявления функций.
Чтобы воспользоваться преимуществами сигнатур мыслей, используйте вызовы функций как обычно. SDK Firebase AI Logic упрощают этот процесс, управляя состоянием и автоматически обрабатывая сигнатуры мыслей. SDK автоматически передают все сгенерированные сигнатуры мыслей между последующими вызовами sendMessage или sendMessageStream в рамках сеанса Chat .
Оценка и подсчет жетонов мышления
Токены для размышлений имеют ту же ценовую политику, что и токены для текстового вывода. Если вы включите отображение кратких обзоров мыслей , они будут считаться токенами для размышлений и иметь соответствующую цену.
В консоли Firebase можно включить мониторинг ИИ , чтобы отслеживать количество токенов мышления для запросов, в которых включено мышление.
Общее количество токенов, содержащих мыслительные запросы, можно получить из поля thoughtsTokenCount в атрибуте usageMetadata ответа:
Быстрый
// ...
let response = try await model.generateContent("Why is the sky blue?")
if let usageMetadata = response.usageMetadata {
print("Thoughts Token Count: \(usageMetadata.thoughtsTokenCount)")
}
Kotlin
// ...
val response = model.generateContent("Why is the sky blue?")
response.usageMetadata?.let { usageMetadata ->
println("Thoughts Token Count: ${usageMetadata.thoughtsTokenCount}")
}
Java
// ...
ListenableFuture<GenerateContentResponse> response =
model.generateContent("Why is the sky blue?");
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
@Override
public void onSuccess(GenerateContentResponse result) {
String usageMetadata = result.getUsageMetadata();
if (usageMetadata != null) {
System.out.println("Thoughts Token Count: " +
usageMetadata.getThoughtsTokenCount());
}
}
@Override
public void onFailure(Throwable t) {
t.printStackTrace();
}
}, executor);
Web
// ...
const response = await model.generateContent("Why is the sky blue?");
if (response?.usageMetadata?.thoughtsTokenCount != null) {
console.log(`Thoughts Token Count: ${response.usageMetadata.thoughtsTokenCount}`);
}
Dart
// ...
final response = await model.generateContent(
Content.text("Why is the sky blue?"),
]);
if (response?.usageMetadata case final usageMetadata?) {
print("Thoughts Token Count: ${usageMetadata.thoughtsTokenCount}");
}
Единство
// ...
var response = await model.GenerateContentAsync("Why is the sky blue?");
if (response.UsageMetadata != null)
{
UnityEngine.Debug.Log($"Thoughts Token Count: {response.UsageMetadata?.ThoughtsTokenCount}");
}
Подробнее о токенах можно узнать в руководстве по подсчету токенов .