Думающая

Все модели Gemini используют внутренний "процесс мышления", который значительно улучшает их способность рассуждать и планировать многоэтапные действия. Благодаря этому они очень эффективны при выполнении сложных задач, таких как написание кода, решение сложных математических задач и анализ данных.

Для моделей рассуждения доступны следующие конфигурации и параметры:

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

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

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

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



Рекомендации и советы по созданию запросов для использования думающих моделей

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

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

  • Предоставьте пошаговые инструкции.
  • Приведите несколько примеров пар "входные данные – выходные данные".
  • Укажите, как должны быть сформулированы и отформатированы ответы.
  • Укажите конкретные шаги для проверки

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

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

  • Задайте уровень мышления, чтобы контролировать, сколько времени модель может тратить на размышления. Если вы установите высокий уровень, модель сможет думать дольше, если это необходимо. Если вы установите меньшее значение, модель не будет "слишком долго думать" над ответом, а также зарезервирует большее количество токенов для фактического ответа, что может помочь снизить задержку и стоимость.

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



Контроль времени на обдумывание

Вы можете настроить уровни рассуждения, чтобы контролировать, сколько времени модель тратит на рассуждения, прежде чем дать ответ. Такая конфигурация особенно важна, если приоритетом является снижение задержки или стоимости.

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

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

Уровни рассуждений

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

Как настроить уровень рассуждений

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

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

Подробнее о поддерживаемых значениях для уровня мышления…

Swift

Установите уровень рассуждений в 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.x_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.x_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.x_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.x_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.x_MODEL_NAME',
  config: generationConfig,
);

// ...

Unity

Задайте значения параметров в 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.x_MODEL_NAME",
  generationConfig: generationConfig
);

// ...

Поддерживаемые значения уровня рассуждений

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

MINIMAL LOW MEDIUM HIGH

Модель использует как можно меньше токенов; почти не думает

Простые задачи

Модель использует меньше токенов, что позволяет снизить задержку и стоимость.

Простые задачи и задачи с высокой пропускной способностью

Модель использует сбалансированный подход

Задачи средней сложности

Модель использует токены до максимального уровня

сложные запросы, требующие глубоких рассуждений;

Gemini 4 Argon
gemini-4-argon
1 (по умолчанию)
Gemini 3.x Pro
gemini-3.1-pro-preview
(по умолчанию)
Gemini 3.x Flash
gemini-3.8-flash
gemini-3.7-flash
gemini-3.6-flash
gemini-3.5-flash

не поддерживается gemini-3.8-flash или gemini-3.7-flash 1
(по умолчанию)
Gemini 3.x Flash‑Lite
gemini-3.5-flash-lite
gemini-3.1-flash-lite
(по умолчанию)
Gemini 3.x Pro Image
gemini-3-pro-image
("Nano Banana Pro")
(по умолчанию)
Gemini 3.x Flash Image
gemini-3.1-flash-image
("Nano Banana 2")
(по умолчанию)
Gemini 3.x Flash‑Lite Image
gemini-3.1-flash-lite-image
("Nano Banana 2 Lite")
(по умолчанию)

1 gemini-4-argon, gemini-3.8-flash и gemini-3.7-flash не поддерживают уровень рассуждений MINIMAL. Если вы установите уровень рассуждения MINIMAL, запрос не будет выполнен и вернет ошибку 400.



Бюджет на размышления (модели Gemini 2.5)

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



Сложность задач для всех думающих моделей

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

    • "Где была основана компания DeepMind?"
    • "В этом письме предлагается провести встречу или просто предоставляется информация?"
  • Задачи средней сложности, требующие некоторого размышления
    Распространенные запросы, для которых полезно пошаговое выполнение или более глубокое понимание. Примеры:

    • "Проведи аналогию между фотосинтезом и взрослением".
    • Сравни электромобили и гибридные автомобили.
  • Сложные задачи – может потребоваться максимальное время на рассуждения
    По-настоящему сложные задачи, например решение сложных математических задач или написание кода. Для выполнения таких задач модели необходимо задействовать все свои возможности рассуждения и планирования, часто выполняя множество внутренних шагов, прежде чем предоставить ответ. Примеры:

    • "Реши задачу 1 из AIME 2025: найди сумму всех целых оснований b > 9, для которых 17b является делителем 97b".
    • "Напиши код на Python для веб-приложения, которое визуализирует данные фондового рынка в реальном времени, включая аутентификацию пользователей. Сделай его как можно более эффективным".



Краткие пересказы рассуждений

Краткие пересказы рассуждений – это синтезированные версии необработанных рассуждений модели, которые дают представление о ее внутреннем процессе мышления.

Вот несколько причин, по которым стоит добавлять краткие пересказы в ответы:

  • Вы можете показывать краткое изложение рассуждений в интерфейсе приложения или сделать его доступным для пользователей. Краткое изложение мыслей возвращается как отдельная часть ответа, чтобы вы могли лучше контролировать, как оно используется в вашем приложении.

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

Вот несколько важных примечаний о кратких пересказах:

  • На краткие пересказы не влияют бюджеты на размышления (бюджеты применяются только к исходным размышлениям модели). Однако если рассуждения отключены, модель не будет возвращать сводку рассуждений.

  • Краткие изложения мыслей считаются частью обычного сгенерированного текста и учитываются как токены вывода.

Включить сводки рассуждений

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

Чтобы включить краткие пересказы, задайте для параметра includeThoughts значение true в конфигурации модели. Затем вы можете получить доступ к сводке, проверив поле thoughtSummary в ответе.

Ниже приведен пример, демонстрирующий, как включить и получить сводки мыслей с ответом:

Swift

Включите краткие пересказы мыслей в 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}');
}

Unity

Включите краткие пересказы мыслей в 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, то также сможете посмотреть краткое изложение рассуждений. В результате во время генерации ответа будут возвращаться текущие дополнительные сводки.

Swift

Включите краткие пересказы мыслей в 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!;
  }
}

Unity

Включите краткие пересказы в 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 ответа:

Swift

// ...

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}");
}

Unity

// ...

var response = await model.GenerateContentAsync("Why is the sky blue?");

if (response.UsageMetadata != null)
{
    UnityEngine.Debug.Log($"Thoughts Token Count: {response.UsageMetadata?.ThoughtsTokenCount}");
}

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