Gemini думает

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

В этом руководстве рассказывается, как использовать возможности Gemini для размышлений с помощью Gemini API.

Создание контента с помощью размышлений

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

Python

from google import genai

client = genai.Client()
prompt = "Explain the concept of Occam's Razor and provide a simple, everyday example."
response = client.models.generate_content(
    model="gemini-3.8-flash",
    contents=prompt
)

print(response.text)

JavaScript

import { GoogleGenAI } from "@google/genai";

const ai = new GoogleGenAI({});

async function main() {
  const prompt = "Explain the concept of Occam's Razor and provide a simple, everyday example.";

  const response = await ai.models.generateContent({
    model: "gemini-3.8-flash",
    contents: prompt,
  });

  console.log(response.text);
}

main();

Проложить маршрут

package main

import (
  "context"
  "fmt"
  "log"
  "os"
  "google.golang.org/genai"
)

func main() {
  ctx := context.Background()
  client, err := genai.NewClient(ctx, nil)
  if err != nil {
      log.Fatal(err)
  }

  prompt := "Explain the concept of Occam's Razor and provide a simple, everyday example."
  model := "gemini-3.8-flash"

  resp, _ := client.Models.GenerateContent(ctx, model, genai.Text(prompt), nil)

  fmt.Println(resp.Text())
}

REST

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.8-flash:generateContent" \
 -H "x-goog-api-key: $GEMINI_API_KEY" \
 -H 'Content-Type: application/json' \
 -X POST \
 -d '{
   "contents": [
     {
       "parts": [
         {
           "text": "Explain the concept of Occam'\''s Razor and provide a simple, everyday example."
         }
       ]
     }
   ]
 }'
 ```

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

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

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

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

Python

from google import genai
from google.genai import types

client = genai.Client()
prompt = "What is the sum of the first 50 prime numbers?"
response = client.models.generate_content(
  model="gemini-3.8-flash",
  contents=prompt,
  config=types.GenerateContentConfig(
    thinking_config=types.ThinkingConfig(
      include_thoughts=True
    )
  )
)

for part in response.candidates[0].content.parts:
  if not part.text:
    continue
  if part.thought:
    print("Thought summary:")
    print(part.text)
    print()
  else:
    print("Answer:")
    print(part.text)
    print()

JavaScript

import { GoogleGenAI } from "@google/genai";

const ai = new GoogleGenAI({});

async function main() {
  const response = await ai.models.generateContent({
    model: "gemini-3.8-flash",
    contents: "What is the sum of the first 50 prime numbers?",
    config: {
      thinkingConfig: {
        includeThoughts: true,
      },
    },
  });

  for (const part of response.candidates[0].content.parts) {
    if (!part.text) {
      continue;
    }
    else if (part.thought) {
      console.log("Thoughts summary:");
      console.log(part.text);
    }
    else {
      console.log("Answer:");
      console.log(part.text);
    }
  }
}

main();

Проложить маршрут

package main

import (
  "context"
  "fmt"
  "google.golang.org/genai"
  "os"
)

func main() {
  ctx := context.Background()
  client, err := genai.NewClient(ctx, nil)
  if err != nil {
      log.Fatal(err)
  }

  contents := genai.Text("What is the sum of the first 50 prime numbers?")
  model := "gemini-3.8-flash"
  resp, _ := client.Models.GenerateContent(ctx, model, contents, &genai.GenerateContentConfig{
    ThinkingConfig: &genai.ThinkingConfig{
      IncludeThoughts: true,
    },
  })

  for _, part := range resp.Candidates[0].Content.Parts {
    if part.Text != "" {
      if part.Thought {
        fmt.Println("Thoughts Summary:")
        fmt.Println(part.Text)
      } else {
        fmt.Println("Answer:")
        fmt.Println(part.Text)
      }
    }
  }
}

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

Python

from google import genai
from google.genai import types

client = genai.Client()

prompt = """
Alice, Bob, and Carol each live in a different house on the same street: red, green, and blue.
The person who lives in the red house owns a cat.
Bob does not live in the green house.
Carol owns a dog.
The green house is to the left of the red house.
Alice does not own a cat.
Who lives in each house, and what pet do they own?
"""

thoughts = ""
answer = ""

for chunk in client.models.generate_content_stream(
    model="gemini-3.8-flash",
    contents=prompt,
    config=types.GenerateContentConfig(
      thinking_config=types.ThinkingConfig(
        include_thoughts=True
      )
    )
):
  for part in chunk.candidates[0].content.parts:
    if not part.text:
      continue
    elif part.thought:
      if not thoughts:
        print("Thoughts summary:")
      print(part.text)
      thoughts += part.text
    else:
      if not answer:
        print("Answer:")
      print(part.text)
      answer += part.text

JavaScript

import { GoogleGenAI } from "@google/genai";

const ai = new GoogleGenAI({});

const prompt = `Alice, Bob, and Carol each live in a different house on the same
street: red, green, and blue. The person who lives in the red house owns a cat.
Bob does not live in the green house. Carol owns a dog. The green house is to
the left of the red house. Alice does not own a cat. Who lives in each house,
and what pet do they own?`;

let thoughts = "";
let answer = "";

async function main() {
  const response = await ai.models.generateContentStream({
    model: "gemini-3.8-flash",
    contents: prompt,
    config: {
      thinkingConfig: {
        includeThoughts: true,
      },
    },
  });

  for await (const chunk of response) {
    for (const part of chunk.candidates[0].content.parts) {
      if (!part.text) {
        continue;
      } else if (part.thought) {
        if (!thoughts) {
          console.log("Thoughts summary:");
        }
        console.log(part.text);
        thoughts = thoughts + part.text;
      } else {
        if (!answer) {
          console.log("Answer:");
        }
        console.log(part.text);
        answer = answer + part.text;
      }
    }
  }
}

await main();

Проложить маршрут

package main

import (
  "context"
  "fmt"
  "log"
  "os"
  "google.golang.org/genai"
)

const prompt = `
Alice, Bob, and Carol each live in a different house on the same street: red, green, and blue.
The person who lives in the red house owns a cat.
Bob does not live in the green house.
Carol owns a dog.
The green house is to the left of the red house.
Alice does not own a cat.
Who lives in each house, and what pet do they own?
`

func main() {
  ctx := context.Background()
  client, err := genai.NewClient(ctx, nil)
  if err != nil {
      log.Fatal(err)
  }

  contents := genai.Text(prompt)
  model := "gemini-3.8-flash"

  resp := client.Models.GenerateContentStream(ctx, model, contents, &genai.GenerateContentConfig{
    ThinkingConfig: &genai.ThinkingConfig{
      IncludeThoughts: true,
    },
  })

  for chunk := range resp {
    for _, part := range chunk.Candidates[0].Content.Parts {
      if len(part.Text) == 0 {
        continue
      }

      if part.Thought {
        fmt.Printf("Thought: %s\n", part.Text)
      } else {
        fmt.Printf("Answer: %s\n", part.Text)
      }
    }
  }
}

Контроль мышления

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

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

Параметр thinkingLevel, который рекомендуется использовать с моделями Gemini 3 и более поздних версий, позволяет управлять логическими рассуждениями.

В таблице ниже приведены настройки thinkingLevel для каждого типа модели.

Уровень рассуждений Gemini 3.8 Flash Gemini 3.6 Flash Gemini 3.1 Pro Gemini 3.5 и 3.1 Flash-Lite Gemini 3.1 Flash-Lite Image Gemini 3 Flash Gemini Robotics ER 2 Описание
minimal Не поддерживается (ошибка) Что пользователь может Чего пользователь не может Поддерживается (по умолчанию) Поддерживается (по умолчанию) Что пользователь может Что пользователь может Соответствует настройке "не думать" для большинства запросов. Обратите внимание, что minimal не гарантирует, что рассуждения будут отключены. Модель может рассуждать минимально при выполнении сложных задач.
low Что пользователь может Что пользователь может Что пользователь может Что пользователь может Не поддерживается Что пользователь может Что пользователь может Минимизирует задержку и стоимость.
medium Поддерживается (по умолчанию) Поддерживается (по умолчанию) Что пользователь может Что пользователь может Чего пользователь не может Что пользователь может Что пользователь может Сбалансированное мышление для большинства задач.
high Поддерживается (динамический) Поддерживается (динамический) Поддерживается (по умолчанию, динамический) Поддерживается (динамический) Поддерживается (динамический) Поддерживается (по умолчанию, динамический) Поддерживается (по умолчанию, динамический) Максимальная глубина рассуждений. Модели может потребоваться значительно больше времени, чтобы сгенерировать первый токен (не относящийся к рассуждениям), но при этом ответ будет более обоснованным.

В следующем примере показано, как задать уровень мышления.

Python

from google import genai
from google.genai import types

client = genai.Client()

response = client.models.generate_content(
    model="gemini-3.8-flash",
    contents="Provide a list of 3 famous physicists and their key contributions",
    config=types.GenerateContentConfig(
        thinking_config=types.ThinkingConfig(thinking_level="low")
    ),
)

print(response.text)

JavaScript

import { GoogleGenAI, ThinkingLevel } from "@google/genai";

const ai = new GoogleGenAI({});

async function main() {
  const response = await ai.models.generateContent({
    model: "gemini-3.8-flash",
    contents: "Provide a list of 3 famous physicists and their key contributions",
    config: {
      thinkingConfig: {
        thinkingLevel: ThinkingLevel.LOW,
      },
    },
  });

  console.log(response.text);
}

main();

Проложить маршрут

package main

import (
  "context"
  "fmt"
  "google.golang.org/genai"
  "os"
)

func main() {
  ctx := context.Background()
  client, err := genai.NewClient(ctx, nil)
  if err != nil {
      log.Fatal(err)
  }

  thinkingLevelVal := "low"

  contents := genai.Text("Provide a list of 3 famous physicists and their key contributions")
  model := "gemini-3.8-flash"
  resp, _ := client.Models.GenerateContent(ctx, model, contents, &genai.GenerateContentConfig{
    ThinkingConfig: &genai.ThinkingConfig{
      ThinkingLevel: &thinkingLevelVal,
    },
  })

fmt.Println(resp.Text())
}

REST

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.8-flash:generateContent" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-X POST \
-d '{
  "contents": [
    {
      "parts": [
        {
          "text": "Provide a list of 3 famous physicists and their key contributions"
        }
      ]
    }
  ],
  "generationConfig": {
    "thinkingConfig": {
          "thinkingLevel": "low"
    }
  }
}'

Отключить размышления для Gemini 3.1 Pro нельзя. Gemini 3 Flash и Flash-Lite также не поддерживают полное отключение функции "Думать". Если вы не укажете уровень мышления, Gemini будет использовать уровень по умолчанию для моделей Gemini 3 (например, "high" для Gemini 3.1 Pro и "medium" для Gemini 3.8 Flash и Gemini 3.6 Flash).

Модели серии Gemini 2.5 не поддерживают thinkingLevel. Вместо этого используйте thinkingBudget.

Ограничения на количество токенов и max_output_tokens

Параметр генерации max_output_tokens задает максимальное количество токенов, которые может сгенерировать ответ, включая токены размышлений.

Если задан этот параметр, он действует как жесткое ограничение, накладываемое инфраструктурой, не влияя на то, как модель распределяет бюджет на размышления (thinking_level).

Если модель достигает этого лимита во время рассуждений, она прекращает генерировать ответ с помощью finish_reason: MAX_TOKENS и возвращает усеченный или пустой результат (при этом с вас будет списана плата за все сгенерированные токены). Чтобы снизить стоимость или задержку без усечения ответов, уменьшите значение thinking_level (low или medium), а не задавайте небольшое значение max_output_tokens.

Бюджеты

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

Ниже приведены сведения о конфигурации для каждого типа модели.thinkingBudget Чтобы отключить функцию, задайте для параметра thinkingBudget значение 0. Если задать для параметра thinkingBudget значение -1, будет включено динамическое мышление, то есть модель будет корректировать бюджет в зависимости от сложности запроса.

Модель Настройка по умолчанию
(бюджет на размышления не задан)
Диапазон Отключить режим размышления Как включить динамическое мышление
2.5 Pro Динамическое мышление 128 – 32768 —: нельзя отключить режим размышления thinkingBudget = -1 (по умолчанию)
2.5 Flash Динамическое мышление 0 – 24576 thinkingBudget = 0 thinkingBudget = -1 (по умолчанию)
2.5. Предварительный просмотр Flash Динамическое мышление 0 – 24576 thinkingBudget = 0 thinkingBudget = -1 (по умолчанию)
2.5 Flash Lite Модель не думает 512 – 24576 thinkingBudget = 0 thinkingBudget = -1
2.5 Flash Lite Preview Модель не думает 512 – 24576 thinkingBudget = 0 thinkingBudget = -1
Robotics-ER 1.6 Preview Динамическое мышление 0 – 24576 thinkingBudget = 0 thinkingBudget = -1 (по умолчанию)
2.5 Flash Live Native Audio Preview (09-2025) Динамическое мышление 0 – 24576 thinkingBudget = 0 thinkingBudget = -1 (по умолчанию)

Python

from google import genai
from google.genai import types

client = genai.Client()

response = client.models.generate_content(
    model="gemini-2.5-flash",
    contents="Provide a list of 3 famous physicists and their key contributions",
    config=types.GenerateContentConfig(
        thinking_config=types.ThinkingConfig(thinking_budget=1024)
        # Turn off thinking:
        # thinking_config=types.ThinkingConfig(thinking_budget=0)
        # Turn on dynamic thinking:
        # thinking_config=types.ThinkingConfig(thinking_budget=-1)
    ),
)

print(response.text)

JavaScript

import { GoogleGenAI } from "@google/genai";

const ai = new GoogleGenAI({});

async function main() {
  const response = await ai.models.generateContent({
    model: "gemini-2.5-flash",
    contents: "Provide a list of 3 famous physicists and their key contributions",
    config: {
      thinkingConfig: {
        thinkingBudget: 1024,
        // Turn off thinking:
        // thinkingBudget: 0
        // Turn on dynamic thinking:
        // thinkingBudget: -1
      },
    },
  });

  console.log(response.text);
}

main();

Проложить маршрут

package main

import (
  "context"
  "fmt"
  "google.golang.org/genai"
  "os"
)

func main() {
  ctx := context.Background()
  client, err := genai.NewClient(ctx, nil)
  if err != nil {
      log.Fatal(err)
  }

  thinkingBudgetVal := int32(1024)

  contents := genai.Text("Provide a list of 3 famous physicists and their key contributions")
  model := "gemini-2.5-flash"
  resp, _ := client.Models.GenerateContent(ctx, model, contents, &genai.GenerateContentConfig{
    ThinkingConfig: &genai.ThinkingConfig{
      ThinkingBudget: &thinkingBudgetVal,
      // Turn off thinking:
      // ThinkingBudget: int32(0),
      // Turn on dynamic thinking:
      // ThinkingBudget: int32(-1),
    },
  })

fmt.Println(resp.Text())
}

REST

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-X POST \
-d '{
  "contents": [
    {
      "parts": [
        {
          "text": "Provide a list of 3 famous physicists and their key contributions"
        }
      ]
    }
  ],
  "generationConfig": {
    "thinkingConfig": {
          "thinkingBudget": 1024
    }
  }
}'

В зависимости от запроса модель может превысить или не достичь лимита токенов.

Подписи к рассуждениям

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

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

  • Модели Gemini 2.5 возвращают сигнатуры размышлений, если эта функция включена и запрос включает вызов функций, в частности объявления функций.
  • Модели Gemini 3 могут возвращать сигнатуры размышлений для всех типов частей. Мы рекомендуем всегда возвращать все полученные подписи, но для подписей вызовов функций это обязательно. Подробнее о подписях мыслей…

При использовании вызова функций также следует учитывать следующие ограничения:

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

Цены

Если функция "Размышления" включена, цена ответа будет равна сумме токенов для выходных данных и токенов для размышлений. Общее количество сгенерированных токенов мышления можно узнать из поля thoughtsTokenCount.

Python

# ...
print("Thoughts tokens:", response.usage_metadata.thoughts_token_count)
print("Output tokens:", response.usage_metadata.candidates_token_count)

JavaScript

// ...
console.log(`Thoughts tokens: ${response.usageMetadata.thoughtsTokenCount}`);
console.log(`Output tokens: ${response.usageMetadata.candidatesTokenCount}`);

Проложить маршрут

// ...
fmt.Println("Thoughts tokens:", response.UsageMetadata.ThoughtsTokenCount)
fmt.Println("Output tokens:", response.UsageMetadata.CandidatesTokenCount)

Модели мышления генерируют полные мысли, чтобы улучшить качество окончательного ответа, а затем выводят краткие изложения, чтобы дать представление о процессе мышления. Таким образом, цена определяется количеством токенов, которые модели необходимо сгенерировать, чтобы создать краткий пересказ, хотя API возвращает только сам пересказ.

Подробнее о подсчете токенов…

Рекомендации

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

Отладка и управление

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

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

Сложность задачи

  • Простые задачи (мышление может быть отключено). Для простых запросов, не требующих сложных рассуждений, например для поиска фактов или классификации, мышление не требуется. Примеры:
    • "Где была основана компания DeepMind?"
    • "В этом письме предлагается провести встречу или просто предоставляется информация?"
  • Задачи средней сложности (по умолчанию/требующие размышлений). Многие распространенные запросы требуют пошаговой обработки или более глубокого понимания. Gemini может гибко использовать свои возможности для решения таких задач, как:
    • Приведи аналогию между фотосинтезом и взрослением.
    • Сравнивать электромобили и гибридные автомобили.
  • Сложные задачи (максимальная мыслительная способность). Для действительно сложных задач, таких как решение сложных математических задач или задач по программированию, мы рекомендуем задавать высокий бюджет на мышление. Для выполнения таких задач модели необходимо задействовать все свои возможности рассуждения и планирования, и часто для получения ответа требуется выполнить множество внутренних шагов. Примеры:
    • Реши задачу 1 из AIME 2025: найди сумму всех целых оснований b > 9, для которых 17b является делителем 97b.
    • Напиши код на языке Python для веб-приложения, которое визуализирует данные фондового рынка в реальном времени, включая аутентификацию пользователей. Сделайте его максимально эффективным.

Поддерживаемые модели, инструменты и возможности

Функции рассуждения поддерживаются во всех моделях серий 3 и 2.5. Все возможности модели перечислены на странице Обзор моделей.

Думающие модели работают со всеми инструментами и функциями Gemini. Это позволяет моделям взаимодействовать с внешними системами, выполнять код или получать информацию в реальном времени, а затем использовать полученные результаты в своих рассуждениях и окончательном ответе.

Примеры использования инструментов с моделями мышления можно найти в [кулинарной книге по мышлению][Colab].

Что дальше?

  • Информация о покрытии функции "Размышление" приведена в нашем руководстве по совместимости с OpenAI.

[Colab]: https://colab.sandbox.google.com/github/google-gemini/cookbook/blob/main/quickstarts/Get_started_thinking.ipynb