мышление

Модели Gemini 3 и Gemini 2.5 способны использовать внутренний «мыслительный процесс», который значительно улучшает их навыки рассуждения и многоэтапного планирования, что делает их весьма эффективными для решения сложных задач, таких как программирование, высшая математика и анализ данных.

Модели мышления предлагают следующие конфигурации и варианты:

  • Контролируйте количество размышлений.
    Вы можете настроить объем «размышлений», которые может выполнять модель. Эта настройка особенно важна, если приоритетом является снижение задержки или стоимости. Также, проанализируйте сравнение сложности задач , чтобы определить, насколько модели может потребоваться использовать свои мыслительные способности.

    Управляйте этой конфигурацией либо с помощью уровней мышления (модели Gemini 3 и более поздние) , либо с помощью бюджетов мышления (модели Gemini 2.5) .

  • Получите краткие обзоры мыслей
    Вы можете включить в сгенерированный ответ краткие изложения мыслей . Эти изложения представляют собой синтезированные версии исходных мыслей модели и позволяют получить представление о внутреннем процессе рассуждений модели.

  • Обработка сигнатур мыслей
    SDK Firebase AI Logic автоматически обрабатывают сигнатуры мыслей , что гарантирует модели доступ к контексту мыслей из предыдущих ходов, особенно при вызове функций.

Обязательно ознакомьтесь с передовыми методами и рекомендациями по использованию моделей мышления.



Используйте модель мышления

Используйте модель мышления, аналогичную той, что применяется к любым другим моделям Близнецов .

Чтобы максимально эффективно использовать модели мышления, ознакомьтесь с рекомендациями по передовым методам и подсказками по их применению далее на этой странице.

Модели, поддерживающие эту возможность

Эту возможность поддерживают только модели Gemini 3 и Gemini 2.5 .

  • gemini-3-pro-preview
  • gemini-3-pro-image-preview (также известный как "nano banana pro")
  • gemini-3-flash-preview
  • gemini-2.5-pro
  • gemini-2.5-flash
  • gemini-2.5-flash-lite

Рекомендации и подсказки по использованию моделей мышления

Мы рекомендуем протестировать ваши подсказки в Google AI Studio или Vertex AI Studio , где вы сможете увидеть весь мыслительный процесс. Вы сможете выявить любые области, где модель могла допустить ошибки, чтобы доработать ваши подсказки и получить более последовательные и точные ответы.

Начните с общего запроса, описывающего желаемый результат, и понаблюдайте за первоначальными мыслями модели, определяющими её ответ. Если ответ не соответствует ожиданиям, помогите модели сгенерировать лучший ответ, используя любой из следующих методов запроса :

  • Предоставьте пошаговые инструкции.
  • Приведите несколько примеров пар «вход-выход».
  • Предоставьте рекомендации по формулировке и форматированию выходных данных и ответов.
  • Укажите конкретные этапы проверки.

Помимо подсказок, рассмотрите возможность использования следующих рекомендаций:

  • Системные инструкции — это своего рода «преамбула», которую вы добавляете перед тем, как модель будет получать какие-либо дальнейшие указания от пользователя или командной строки. Они позволяют вам управлять поведением модели в соответствии с вашими конкретными потребностями и сценариями использования.

  • Установите уровень мышления (или бюджет мышления для моделей Gemini 2.5), чтобы контролировать объем мыслительной работы модели. Если вы установите его высоким, модель сможет думать больше, если это необходимо. Если вы установите его более низким, модель не будет «передумывать» свой ответ, а также зарезервирует большую часть общего лимита токенов для фактического ответа, что может помочь уменьшить задержку и стоимость.

  • Включите мониторинг ИИ в консоли Firebase , чтобы отслеживать количество токенов мышления и задержку запросов, для которых включено мышление. А если у вас включены сводки мыслей , они будут отображаться в консоли, где вы сможете изучить подробные рассуждения модели, что поможет вам отлаживать и совершенствовать ваши запросы.



Контролируйте количество размышлений.

Вы можете настроить, какой объем «размышлений» и рассуждений может выполнить модель, прежде чем вернуть ответ. Эта настройка особенно важна, если приоритетом является снижение задержки или стоимости.

Обязательно сравните сложность задач , чтобы определить, насколько сильно модели может потребоваться развитие мыслительных способностей. Вот несколько общих рекомендаций:

  • Установите более низкий уровень сложности для менее сложных задач или если для вас приоритетны снижение задержки или затрат.
  • Для более сложных задач следует отдавать предпочтение более высокому уровню мышления.

Управляйте этой конфигурацией либо с помощью уровней мышления (модели Gemini 3 и более поздние) , либо с помощью бюджетов мышления (модели Gemini 2.5) .

Уровни мышления (модели Gemini 3 )

Чтобы контролировать объем мыслительной работы, которую модель Gemini 3 может выполнить для генерации ответа, вы можете указать уровень мышления , определяющий количество токена мышления, которые ей разрешено использовать.

Настройте уровень мышления

Чтобы просмотреть контент и код, относящиеся к вашему поставщику API Gemini , нажмите на него.

Уровень мышления задается в параметре GenerationConfig при создании экземпляра GenerativeModel для модели Gemini 3. Конфигурация сохраняется на протяжении всего срока службы экземпляра. Если вы хотите использовать разные уровни мышления для разных запросов, создайте экземпляры GenerativeModel , настроенные для каждого уровня.

Подробнее о поддерживаемых ценностях для уровня мышления вы узнаете позже в этом разделе.

Быстрый

Уровень мышления задается в параметре GenerationConfig при создании экземпляра GenerativeModel .


// ...

// Set the thinking configuration
// Use a thinking level value appropriate for your model (example value shown here)
let generationConfig = GenerationConfig(
  thinkingConfig: ThinkingConfig(thinkingLevel: .low)
)

// Specify the config as part of creating the `GenerativeModel` instance
let model = FirebaseAI.firebaseAI(backend: .googleAI()).generativeModel(
  modelName: "GEMINI_3_MODEL_NAME",
  generationConfig: generationConfig
)

// ...

Kotlin

Задайте значения параметров в GenerationConfig при создании экземпляра GenerativeModel .


// ...

// Set the thinking configuration
// Use a thinking level value appropriate for your model (example value shown here)
val generationConfig = generationConfig {
  thinkingConfig = thinkingConfig {
      thinkingLevel = ThinkingLevel.LOW
  }
}

// Specify the config as part of creating the `GenerativeModel` instance
val model = Firebase.ai(backend = GenerativeBackend.googleAI()).generativeModel(
  modelName = "GEMINI_3_MODEL_NAME",
  generationConfig,
)

// ...

Java

Задайте значения параметров в GenerationConfig при создании экземпляра GenerativeModel .


// ...

// Set the thinking configuration
// Use a thinking level value appropriate for your model (example value shown here)
ThinkingConfig thinkingConfig = new ThinkingConfig.Builder()
    .setThinkingLevel(ThinkingLevel.LOW)
    .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_3_MODEL_NAME",
                  /* generationConfig */ generationConfig
                );
);

// ...

Web

Задайте значения параметров в GenerationConfig при создании экземпляра GenerativeModel .


// ...

const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });

// Set the thinking configuration
// Use a thinking level value appropriate for your model (example value shown here)
const generationConfig = {
  thinkingConfig: {
    thinkingLevel: ThinkingLevel.LOW
  }
};

// Specify the config as part of creating the `GenerativeModel` instance
const model = getGenerativeModel(ai, { model: "GEMINI_3_MODEL_NAME", generationConfig });

// ...

Dart

Задайте значения параметров в GenerationConfig при создании экземпляра GenerativeModel .


// ...

// Set the thinking configuration
// Use a thinking level value appropriate for your model (example value shown here)
final thinkingConfig = ThinkingConfig.withThinkingLevel(ThinkingLevel.low);

final generationConfig = GenerationConfig(
  thinkingConfig: thinkingConfig
);

// Specify the config as part of creating the `GenerativeModel` instance
final model = FirebaseAI.googleAI().generativeModel(
  model: 'GEMINI_3_MODEL_NAME',
  config: generationConfig,
);

// ...

Единство

Задайте значения параметров в GenerationConfig при создании экземпляра GenerativeModel .


// ...

// Set the thinking configuration
// Use a thinking level value appropriate for your model (example value shown here)
var thinkingConfig = new ThinkingConfig(thinkingLevel: ThinkingLevel.Low);

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_3_MODEL_NAME",
  generationConfig: generationConfig
);

// ...

Значения уровня поддерживаемого мышления

В таблице ниже перечислены значения уровня мышления, которые можно установить для каждой модели, настроив thinkingLevel этой модели .

MINIMAL LOW MEDIUM HIGH
  • Модель использует минимальное количество токенов; практически не требует размышлений.
  • Задачи низкой сложности
  • Модель использует меньше токенов; минимизирует задержку и стоимость.
  • Простые задачи и задачи с высокой пропускной способностью
  • Модель использует сбалансированный подход.
  • Задачи средней сложности
  • Модель использует токены до максимального уровня.
  • Сложные задания, требующие глубокого логического мышления.
Gemini 3 Pro (по умолчанию)
Изображение Gemini 3 Pro ("nano banana pro") (по умолчанию)
Gemini 3 Flash (по умолчанию)



Расчет бюджета (модели Gemini 2.5 )

Чтобы контролировать объем мыслительной работы, которую модель Gemini 2.5 может выполнить для генерации ответа, вы можете задать « бюджет мышления» — количество мыслительных токенов, которые ей разрешено использовать.

Составьте бюджет для размышлений

Чтобы просмотреть контент и код, относящиеся к вашему поставщику API Gemini , нажмите на него.

Задайте бюджет мышления в GenerationConfig при создании экземпляра GenerativeModel для модели Gemini 2.5 . Конфигурация сохраняется на протяжении всего срока службы экземпляра. Если вы хотите использовать разные бюджеты мышления для разных запросов, создайте экземпляры 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_2.5_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_2.5_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_2.5_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_2.5_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.withThinkingBudget(1024);

final generationConfig = GenerationConfig(
  thinkingConfig: thinkingConfig
);

// Specify the config as part of creating the `GenerativeModel` instance
final model = FirebaseAI.googleAI().generativeModel(
  model: 'GEMINI_2.5_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_2.5_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



Сложность задачи для всех моделей мышления

  • Простые задачи — думать не так уж и нужно.
    Простые запросы, не требующие сложных рассуждений, например, поиск фактов или классификация. Примеры:

    • «Где была основана компания 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}");
}

Краткие обзоры мыслей в потоке

Вы также можете просмотреть сводки мыслей, если решите передавать ответ в потоковом режиме с помощью 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}");
}

Подробнее о токенах можно узнать в руководстве по подсчету токенов .