Близнецы думают

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

В этом руководстве показано, как работать с аналитическими возможностями Gemini, используя API Gemini.

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

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

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

  fmt.Println(resp.Text())
}

ОТДЫХ

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-pro: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 в конфигурации запроса. Затем вы можете получить доступ к краткому изложению, перебирая parts параметра response и проверяя логическое значение 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-2.5-pro",
  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-2.5-pro",
    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-2.5-pro"
  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-2.5-pro",
    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-2.5-pro",
    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-2.5-pro"

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

Уровни мышления (Близнецы 3)

Параметр thinkingLevel , рекомендуемый для моделей Gemini 3 и более поздних версий, позволяет управлять логическим поведением. Вы можете установить уровень логического мышления на "low" или "high" для Gemini 3 Pro, а также "minimal" , "low" , "medium" и "high" для Gemini 3 Flash.

Уровни мышления Gemini 3 Pro и Flash:

  • low : минимизирует задержку и стоимость. Лучше всего подходит для простого выполнения инструкций, чатов или высокопроизводительных приложений.
  • high (по умолчанию, динамический): Максимизирует глубину рассуждений. Модели может потребоваться значительно больше времени для получения первого токена, но результат будет более тщательно обоснован.

Уровни мышления Близнецов 3 (быстрое мышление)

В дополнение к указанным выше уровням, Gemini 3 Flash также поддерживает следующие уровни мышления, которые в настоящее время не поддерживаются Gemini 3 Pro:

  • medium : Сбалансированное мышление для решения большинства задач.
  • minimal : соответствует настройке «без размышлений» для большинства запросов. Модель может мыслить очень минималистично для сложных задач программирования. Минимизирует задержку для чатов или приложений с высокой пропускной способностью.

Python

from google import genai
from google.genai import types

client = genai.Client()

response = client.models.generate_content(
    model="gemini-3-flash-preview",
    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 } from "@google/genai";

const ai = new GoogleGenAI({});

async function main() {
  const response = await ai.models.generateContent({
    model: "gemini-3-flash-preview",
    contents: "Provide a list of 3 famous physicists and their key contributions",
    config: {
      thinkingConfig: {
        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-flash-preview"
  resp, _ := client.Models.GenerateContent(ctx, model, contents, &genai.GenerateContentConfig{
    ThinkingConfig: &genai.ThinkingConfig{
      ThinkingLevel: &thinkingLevelVal,
    },
  })

fmt.Println(resp.Text())
}

ОТДЫХ

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-3-flash-preview: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 Pro отключить функцию «думания» невозможно. Gemini 3 Flash также не поддерживает полное отключение «думания», но minimal настройка означает, что модель, скорее всего, не будет думать (хотя потенциально это все еще возможно). Если вы не укажете уровень «думания», Gemini будет использовать уровень динамического «думания» по умолчанию для моделей Gemini 3 — "high" .

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

Размышления о бюджетах

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

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

Модель Настройки по умолчанию
(Предполагаемый бюджет еще не установлен)
Диапазон Отключите мышление Включите динамическое мышление
2.5 Про Динамическое мышление: модель сама решает, когда и сколько думать. 128 до 32768 Н/Д: Невозможно отключить мышление thinkingBudget = -1
2.5 Вспышка Динамическое мышление: модель сама решает, когда и сколько думать. 0 до 24576 thinkingBudget = 0 thinkingBudget = -1
2.5 Предварительный просмотр Flash Динамическое мышление: модель сама решает, когда и сколько думать. 0 до 24576 thinkingBudget = 0 thinkingBudget = -1
2.5 Фонарик Модель не думает 512 до 24576 thinkingBudget = 0 thinkingBudget = -1
2.5 Предварительный просмотр Flash Lite Модель не думает 512 до 24576 thinkingBudget = 0 thinkingBudget = -1
Предварительная версия Robotics-ER 1.5 Динамическое мышление: модель сама решает, когда и сколько думать. 0 до 24576 thinkingBudget = 0 thinkingBudget = -1
2.5 Предварительная версия Flash Live Native Audio (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())
}

ОТДЫХ

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
    }
  }
}'

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

Мыслительные подписи

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

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

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

SDK Google GenAI автоматически обрабатывает возврат сигнатур мыслей. Вам нужно управлять сигнатурами мыслей вручную только в том случае, если вы изменяете историю разговора или используете REST API.

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

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

Цены

Когда функция мышления включена, ценообразование ответа представляет собой сумму выходных токенов и токенов мышления. Общее количество сгенерированных токенов мышления можно получить из поля 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}`);

Идти

// ...
usageMetadata, err := json.MarshalIndent(response.UsageMetadata, "", "  ")
if err != nil {
  log.Fatal(err)
}
fmt.Println("Thoughts tokens:", string(usageMetadata.thoughts_token_count))
fmt.Println("Output tokens:", string(usageMetadata.candidates_token_count))

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

Более подробную информацию о токенах вы можете найти в руководстве по подсчету токенов .

Передовые методы

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

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

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

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

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

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

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

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

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

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

Что дальше?