Модели серии Gemini 2.5 используют внутренний «мыслительный процесс», который значительно улучшает их способность к рассуждению и многошаговому планированию, что делает их высокоэффективными для решения сложных задач, таких как кодирование, высшая математика и анализ данных.
В этом руководстве показано, как работать с мыслительными возможностями Gemini с помощью API Gemini.
Прежде чем начать
Убедитесь, что вы используете поддерживаемую модель серии 2.5 для размышлений. Возможно, вам будет полезно изучить эти модели в AI Studio, прежде чем погружаться в API:
- Попробуйте Gemini 2.5 Flash в AI Studio
- Попробуйте Gemini 2.5 Pro в AI Studio
- Попробуйте Gemini 2.5 Flash-Lite Preview в AI Studio
Генерация контента с помощью мышления
Инициирование запроса с помощью модели мышления похоже на любой другой запрос на генерацию контента. Ключевое отличие заключается в указании одной из моделей с поддержкой мышления в поле model
, как показано в следующем примере генерации текста :
Питон
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."
}
]
}
]
}'
```
Продумывание бюджетов
Параметр thinkingBudget
направляет модель на количество токенов мышления, которые следует использовать при генерации ответа. Большее количество токенов обычно позволяет проводить более детальные рассуждения, что может быть полезно для решения более сложных задач . Если задержка важнее, используйте меньший бюджет или отключите мышление, установив thinkingBudget
на 0. Установка thinkingBudget
на -1 включает динамическое мышление , то есть модель будет корректировать бюджет в зависимости от сложности запроса.
thinkingBudget
поддерживается только в Gemini 2.5 Flash, 2.5 Pro и 2.5 Flash-Lite. В зависимости от подсказки модель может переполнить или недополнить бюджет токена.
Ниже приведены сведения о конфигурации thinkingBudget
для каждого типа модели.
Модель | Настройка по умолчанию (Думаю, бюджет не установлен) | Диапазон | Отключить мышление | Включите динамическое мышление |
---|---|---|---|---|
2.5 Про | Динамическое мышление: модель решает, когда и сколько думать | 128 32768 | N/A: Невозможно отключить мышление | thinkingBudget = -1 |
2.5 Вспышка | Динамическое мышление: модель решает, когда и сколько думать | 0 до 24576 | thinkingBudget = 0 | thinkingBudget = -1 |
2.5 Флэш Лайт | Модель не думает | 512 по 24576 | thinkingBudget = 0 | thinkingBudget = -1 |
Питон
from google import genai
from google.genai import types
client = genai.Client()
response = client.models.generate_content(
model="gemini-2.5-pro",
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-pro",
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-pro"
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-pro: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
# Thinking off:
# "thinkingBudget": 0
# Turn on dynamic thinking:
# "thinkingBudget": -1
}
}
}'
Краткое изложение мыслей
Резюме мыслей — это синтезированные версии сырых мыслей модели, которые дают представление о внутреннем процессе рассуждения модели. Обратите внимание, что бюджеты мышления применяются к сырым мыслям модели, а не к резюме мыслей.
Вы можете включить краткие мысли, установив includeThoughts
в true
в конфигурации запроса. Затем вы можете получить доступ к краткому содержанию, перебирая parts
параметра response
и проверяя логическое значение thought
.
Вот пример, демонстрирующий, как включить и извлечь резюме мыслей без потоковой передачи, который возвращает единое окончательное резюме мыслей с ответом:
Питон
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)
}
}
}
}
А вот пример использования потокового мышления, которое возвращает скользящие, инкрементные сводки в процессе генерации:
Питон
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("Thoughts summary:")
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)
}
}
}
}
Ценообразование
Когда мышление включено, ответное ценообразование представляет собой сумму выходных токенов и токенов мышления. Вы можете получить общее количество сгенерированных токенов мышления из поля thoughtsTokenCount
.
Питон
# ...
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 выводится только резюме.
Дополнительную информацию о токенах можно найти в руководстве по подсчету токенов .
Поддерживаемые модели
Функции Thinking поддерживаются на всех моделях серии 2.5. Вы можете найти все возможности модели на странице обзора модели .
Лучшие практики
В этом разделе приведены некоторые рекомендации по эффективному использованию моделей мышления. Как всегда, следуя нашим подсказкам и рекомендациям, вы получите наилучшие результаты.
Отладка и управление
Обзор рассуждений : Когда вы не получаете ожидаемого ответа от моделей мышления, может помочь тщательный анализ резюме мыслей Gemini. Вы можете увидеть, как он разбил задачу и пришел к ее заключению, и использовать эту информацию для исправления в сторону правильных результатов.
Предоставьте руководство по рассуждению : если вы надеетесь на особенно длинный вывод, вы можете предоставить руководство в своей подсказке, чтобы ограничить объем мышления, используемого моделью. Это позволяет вам зарезервировать больше вывода токенов для вашего ответа.
Сложность задачи
- Простые задачи (мышление может быть ОТКЛЮЧЕНО): для простых запросов, где не требуется сложное рассуждение, например, поиск фактов или классификация, мышление не требуется. Вот некоторые примеры:
- «Где была основана компания DeepMind?»
- «В этом письме содержится просьба о встрече или просто информация?»
- Средние задачи (по умолчанию/некоторое размышление): Многие общие запросы выигрывают от степени пошаговой обработки или более глубокого понимания. Близнецы могут гибко использовать способность к мышлению для таких задач, как:
- Проведите аналогию между фотосинтезом и взрослением.
- Сравните и сопоставьте электромобили и гибридные автомобили.
- Сложные задачи (максимальная способность к мышлению): для действительно сложных задач, таких как решение сложных математических задач или задач по кодированию, мы рекомендуем устанавливать высокий бюджет мышления. Эти типы задач требуют, чтобы модель задействовала все свои возможности рассуждения и планирования, часто включающие множество внутренних шагов перед предоставлением ответа. Вот некоторые примеры:
- Решите задачу 1 в AIME 2025: Найдите сумму всех целых оснований b > 9, для которых 17 b является делителем 97 b .
- Напишите код Python для веб-приложения, которое визуализирует данные фондового рынка в реальном времени, включая аутентификацию пользователей. Сделайте его максимально эффективным.
Мышление с помощью инструментов и возможностей
Модели мышления работают со всеми инструментами и возможностями Gemini. Это позволяет моделям взаимодействовать с внешними системами, выполнять код или получать доступ к информации в реальном времени, включая результаты в свои рассуждения и окончательный ответ.
Инструмент поиска позволяет модели запрашивать Google Search для поиска актуальной информации или информации, выходящей за рамки ее обучающих данных. Это полезно для вопросов о недавних событиях или очень специфических темах.
Инструмент выполнения кода позволяет модели генерировать и запускать код Python для выполнения вычислений, манипулирования данными или решения проблем, которые лучше всего обрабатываются алгоритмически. Модель получает вывод кода и может использовать его в своем ответе.
С помощью структурированного вывода вы можете ограничить Gemini для ответа с помощью JSON. Это особенно полезно для интеграции вывода модели в приложения.
Вызов функций подключает модель мышления к внешним инструментам и API, что позволяет ей рассуждать о том, когда вызывать нужную функцию и какие параметры предоставлять.
URL Context предоставляет модели URL в качестве дополнительного контекста для вашего запроса. Затем модель может извлекать содержимое из URL и использовать это содержимое для информирования и формирования своего ответа.
Вы можете попробовать примеры использования инструментов с моделями мышления в «Кулинарной книге мышления» .
Что дальше?
Для более глубокой проработки примеров, таких как:
- Использование инструментов с мышлением
- Потоковая передача с мышлением
- Корректировка бюджета мышления для различных результатов
и многое другое, попробуйте нашу кулинарную книгу «Мышление» .
Охват Thinking теперь доступен в нашем руководстве по совместимости OpenAI .
Дополнительную информацию о Gemini 2.5 Pro, Gemini Flash 2.5 и Gemini 2.5 Flash-Lite можно найти на странице модели .