Мышление Близнецов
В моделях серий Gemini 3 и 2.5 используется «процесс мышления», который значительно улучшает их способность к рассуждению и многоэтапному планированию, что делает их высокоэффективными для решения сложных задач, таких как программирование, высшая математика и анализ данных.
При использовании модели мышления Gemini проводит внутреннее осмысление перед тем, как дать ответ. API взаимодействий отображает это осмысление в виде шагов thought — специальных шагов, которые отображаются в хронологическом порядке вместе с вызовами функций, пользовательским вводом или результатами модели в массиве steps .
Каждый этап мыслительной деятельности включает в себя два поля:
| Поле | Необходимый | Описание |
|---|---|---|
signature | ✅ Да | Зашифрованное представление внутреннего состояния рассуждений модели. Всегда присутствует, даже когда модель выполняет минимальные рассуждения. |
summary | ❌ Нет | Массив содержимого (текста и/или изображений), суммирующий ход рассуждений. Может быть пустым в зависимости от конфигурации thinking_summaries , от того, выполнила ли модель достаточное количество рассуждений, или от типа содержимого (например, для латентных данных изображений текстовые резюме могут отсутствовать). |
Взаимодействие с мышлением
Инициирование взаимодействия с моделью мышления аналогично любому другому запросу на взаимодействие. Укажите одну из моделей, поддерживающих мышление, в поле model :
Python
from google import genai
client = genai.Client()
interaction = client.interactions.create(
model="gemini-3-flash-preview",
input="Explain the concept of Occam's Razor and provide a simple, everyday example."
)
print(interaction.steps[-1].content[0].text)
JavaScript
import { GoogleGenAI } from "@google/genai";
const client = new GoogleGenAI({});
const interaction = await client.interactions.create({
model: "gemini-3-flash-preview",
input: "Explain the concept of Occam's Razor and provide a simple, everyday example."
});
console.log(interaction.steps.at(-1).content[0].text);
ОТДЫХ
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H "Api-Revision: 2026-05-20" \
-H 'Content-Type: application/json' \
-d '{
"model": "gemini-3-flash-preview",
"input": "Explain the concept of Occam'\''s Razor and provide a simple example."
}'
Краткие обзоры мыслей
Краткие описания хода мыслей позволяют понять внутренний процесс рассуждений модели. По умолчанию возвращается только итоговый результат. Вы можете включить отображение кратких описаний хода мыслей с помощью thinking_summaries :
Python
from google import genai
client = genai.Client()
interaction = client.interactions.create(
model="gemini-3-flash-preview",
input="What is the sum of the first 50 prime numbers?",
generation_config={
"thinking_summaries": "auto"
}
)
for step in interaction.steps:
if step.type == "thought":
print("Thought summary:")
for content_block in step.summary:
if content_block.type == "text":
print(content_block.text)
print()
elif step.type == "model_output":
for content_block in step.content:
if content_block.type == "text":
print("Answer:")
print(content_block.text)
print()
JavaScript
import { GoogleGenAI } from "@google/genai";
const client = new GoogleGenAI({});
const interaction = await client.interactions.create({
model: "gemini-3-flash-preview",
input: "What is the sum of the first 50 prime numbers?",
generation_config: {
thinking_summaries: "auto"
}
});
for (const step of interaction.steps) {
if (step.type === "thought") {
console.log("Thought summary:");
for (const contentBlock of step.summary) {
if (contentBlock.type === "text") console.log(contentBlock.text);
}
} else if (step.type === "model_output") {
for (const contentBlock of step.content) {
if (contentBlock.type === "text") {
console.log("Answer:");
console.log(contentBlock.text);
}
}
}
}
ОТДЫХ
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H "Api-Revision: 2026-05-20" \
-H 'Content-Type: application/json' \
-d '{
"model": "gemini-3-flash-preview",
"input": "What is the sum of the first 50 prime numbers?",
"generation_config": {
"thinking_summaries": "auto"
}
}'
В таких случаях блок мыслей может содержать только подпись без краткого содержания :
- Простые запросы, по которым модель не смогла достаточно обоснованно составить сводку.
-
thinking_summaries: "none", где отображение кратких обзоров явно отключено. - Некоторые типы текстового контента, например изображения, могут не иметь текстовых аннотаций.
В вашем коде всегда следует обрабатывать блоки мыслей, где summary пустое или отсутствует.
Стриминг с размышлениями
Используйте потоковую передачу для получения поэтапных сводок мыслей в процессе их генерации. Блоки мыслей доставляются с помощью событий, отправляемых сервером (SSE), с двумя различными типами дельты:
| Дельта-тип | Содержит | Когда отправлено |
|---|---|---|
thought_summary | Сводная информация в текстовом или графическом виде | Одна или несколько дельт с инкрементальным суммированием |
thought_signature | Криптографическая подпись | последняя дельта перед step.stop |
Python
from google import genai
client = genai.Client()
prompt = """
Alice, Bob, and Carol each live in a different house on the same street: red, green, and blue.
Alice does not live in the red house.
Bob does not live in the green house.
Carol does not live in the red or green house.
Which house does each person live in?
"""
thoughts = ""
answer = ""
stream = client.interactions.create(
model="gemini-3-flash-preview",
input=prompt,
generation_config={
"thinking_summaries": "auto"
},
stream=True
)
for event in stream:
if event.event_type == "step.delta":
if event.delta.type == "thought_summary":
if not thoughts:
print("Thinking...")
summary_text = event.delta.content.get('text', '') if hasattr(event.delta, 'content') else getattr(event.delta, 'text', '')
print(f"[Thought] {summary_text}", end="")
thoughts += summary_text
elif event.delta.type == "text" and event.delta.text:
if not answer:
print("\nAnswer:")
print(event.delta.text, end="")
answer += event.delta.text
JavaScript
import { GoogleGenAI } from "@google/genai";
const client = new GoogleGenAI({});
const prompt = `Alice, Bob, and Carol each live in a different house on the same
street: red, green, and blue. Alice does not live in the red house.
Bob does not live in the green house.
Carol does not live in the red or green house.
Which house does each person live in?`;
let thoughts = "";
let answer = "";
const stream = await client.interactions.create({
model: "gemini-3-flash-preview",
input: prompt,
generation_config: {
thinking_summaries: "auto"
},
stream: true
});
for await (const event of stream) {
if (event.event_type === "step.delta") {
if (event.delta.type === "thought_summary") {
if (!thoughts) console.log("Thinking...");
const text = event.delta.content?.text || "";
process.stdout.write(`[Thought] ${text}`);
thoughts += text;
} else if (event.delta.type === "text" && event.delta.text) {
if (!answer) console.log("\nAnswer:");
process.stdout.write(event.delta.text);
answer += event.delta.text;
}
}
}
ОТДЫХ
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H "Api-Revision: 2026-05-20" \
-H 'Content-Type: application/json' \
--no-buffer \
-d '{
"model": "gemini-3-flash-preview",
"input": "Alice, Bob, and Carol each live in a different house on the same street: red, green, and blue. Alice does not live in the red house. Bob does not live in the green house. Carol does not live in the red or green house. Which house does each person live in?",
"generation_config": {
"thinking_summaries": "auto"
},
"stream": true
}'
Потоковая передача ответов осуществляется с использованием событий, отправляемых сервером (Server-Sent Events, SSE), и состоит из шагов и событий. См. пример ниже.
event: interaction.created
data: {"interaction":{"id":"v1_xxx","status":"in_progress","object":"interaction","model":"gemini-3-flash-preview"},"event_type":"interaction.created"}
event: step.start
data: {"index":0,"step":{"signature":"","summary":[{"text":"**Evaluating the clues**\n\nI'm considering...","type":"text"}],"type":"thought"},"event_type":"step.start"}
event: step.delta
data: {"index":0,"delta":{"signature":"EpoGCpcGAXLI2nx/...","type":"thought_signature"},"event_type":"step.delta"}
event: step.stop
data: {"index":0,"event_type":"step.stop"}
event: step.start
data: {"index":1,"step":{"content":[{"text":"Based on the clues provided, here","type":"text"}],"type":"model_output"},"event_type":"step.start"}
event: step.delta
data: {"index":1,"delta":{"text":" is the answer to your question...","type":"text"},"event_type":"step.delta"}
event: step.stop
data: {"index":1,"event_type":"step.stop"}
event: interaction.completed
data: {"interaction":{"id":"v1_xxx","status":"completed","usage":{"total_tokens":530,"total_input_tokens":62,"total_output_tokens":171,"total_thought_tokens":297}},"event_type":"interaction.completed"}
event: done
data: [DONE]
Контролирующее мышление
Модели Gemini по умолчанию используют динамическое мышление, автоматически регулируя объем вычислительных усилий в зависимости от сложности запроса. Вы можете управлять этим поведением с помощью параметра thinking_level .
| Модель | Мышление по умолчанию | Поддерживаемые уровни |
|---|---|---|
| gemini-3.1-pro-preview | Включено (высокий уровень) | низкий, средний, высокий |
| gemini-3-flash-preview | Включено (высокий уровень) | минимальный, низкий, средний, высокий |
| gemini-3-pro-preview | Включено (высокий уровень) | низкий, высокий |
| gemini-2.5-pro | На | низкий, средний, высокий |
| gemini-2.5-flash | На | низкий, средний, высокий |
| gemini-2.5-flash-lite | Выключенный | низкий, средний, высокий |
Python
from google import genai
client = genai.Client()
interaction = client.interactions.create(
model="gemini-3-flash-preview",
input="Provide a list of 3 famous physicists and their key contributions",
generation_config={
"thinking_level": "low"
}
)
print(interaction.steps[-1].content[0].text)
JavaScript
import { GoogleGenAI } from "@google/genai";
const client = new GoogleGenAI({});
const interaction = await client.interactions.create({
model: "gemini-3-flash-preview",
input: "Provide a list of 3 famous physicists and their key contributions",
generation_config: {
thinking_level: "low"
}
});
console.log(interaction.steps.at(-1).content[0].text);
ОТДЫХ
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H "Api-Revision: 2026-05-20" \
-H 'Content-Type: application/json' \
-d '{
"model": "gemini-3-flash-preview",
"input": "Provide a list of 3 famous physicists and their key contributions",
"generation_config": {
"thinking_level": "low"
}
}'
Мыслительные подписи
«Мысленные сигнатуры» — это зашифрованные представления внутренних рассуждений модели. Они необходимы для поддержания непрерывности рассуждений на протяжении многоходовых взаимодействий.
API для взаимодействия значительно упрощает обработку сигнатур мыслей по сравнению с API generateContent .
Режим сохранения состояния (рекомендуется)
По умолчанию, при использовании API взаимодействий в режиме сохранения состояния (путем установки store: true и передачи previous_interaction_id в последующих ходах), сервер автоматически управляет состоянием диалога, включая все блоки мыслей и подписи. В этом режиме вам не нужно ничего делать с подписями. Они обрабатываются исключительно на стороне сервера.
Безсостоятельный режим
Если вы управляете состоянием диалога самостоятельно (режим без сохранения состояния) и передаете полную историю входных и выходных данных в каждом запросе:
- Вы ОБЯЗАТЕЛЬНО должны отправлять все блоки
thoughtв точно таком же виде, в каком они были получены от модели. - Не следует удалять или изменять блоки мыслей из истории, поскольку они содержат сигнатуры, необходимые для продолжения рассуждений модели.
- При переключении моделей в рамках одной сессии вам все равно следует повторно отправить блоки мыслей предыдущей модели. Совместимость обеспечивается бэкэндом.
Цены
Когда функция мышления включена, ценообразование ответа представляет собой сумму выходных токенов и токенов мышления. Общее количество сгенерированных токенов мышления можно получить из поля total_thought_tokens .
Python
# ...
print("Thoughts tokens:", interaction.usage.total_thought_tokens)
print("Output tokens:", interaction.usage.total_output_tokens)
JavaScript
// ...
console.log(`Thoughts tokens: ${interaction.usage.total_thought_tokens}`);
console.log(`Output tokens: ${interaction.usage.total_output_tokens}`);
Модели мышления генерируют полные мысли для повышения качества конечного ответа, а затем выдают сводки , позволяющие понять ход мысли. Цена рассчитывается исходя из количества токенов, необходимых модели для генерации полных мыслей, несмотря на то, что из API выводится только сводка.
Более подробную информацию о токенах вы можете найти в руководстве по подсчету токенов .
Передовые методы
Эффективно используйте модели мышления, следуя этим рекомендациям.
- Анализ логического мышления : Проанализируйте резюме мыслей, чтобы понять причины ошибок и улучшить формулировки заданий.
- Контроль бюджета мышления : Побуждайте модель меньше думать при обработке длинных результатов, чтобы сэкономить токены.
- Простые задачи : Используйте минимальное мышление для поиска или классификации фактов (например, "Где была основана компания DeepMind?").
- Задания средней сложности : Используйте стандартное мышление для сравнения концепций или творческое рассуждение (например, сравнение электромобилей и гибридных автомобилей).
- Сложные задачи : Максимально используйте мыслительные способности при решении сложных задач по программированию, математике или многоэтапному планированию (например, решайте математические задачи AIME).
Что дальше?
- Генерация текста : базовые текстовые ответы
- Вызов функции : Подключение к инструментам
- Руководство по Gemini 3 : особенности конкретной модели