Gemini 3 ve 2.5 serisi modeller, akıl yürütme ve çok adımlı planlama yeteneklerini önemli ölçüde geliştiren dahili bir "düşünme süreci" kullanır. Bu sayede kodlama, ileri matematik ve veri analizi gibi karmaşık görevlerde oldukça etkili olurlar.
Bu kılavuzda, Gemini API'yi kullanarak Gemini'ın düşünme özellikleriyle nasıl çalışacağınız gösterilmektedir.
Düşünerek içerik üretme
Düşünme modeliyle istek başlatmak, diğer tüm içerik oluşturma isteklerine benzer. Temel fark, aşağıdaki metin oluşturma örneğinde gösterildiği gibi model alanında düşünme desteği olan modellerden birinin belirtilmesidir:
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();
Go
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())
}
REST
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."
}
]
}
]
}'
```
Düşünce özetleri
Düşünce özetleri, modelin ham düşüncelerinin sentezlenmiş versiyonlarıdır ve modelin dahili muhakeme süreci hakkında bilgiler sunar. Düşünce düzeylerinin ve bütçelerin, modelin ham düşünceleri için geçerli olduğunu, düşünce özetleri için geçerli olmadığını unutmayın.
İstek yapılandırmanızda includeThoughts değerini true olarak ayarlayarak düşünce özetlerini etkinleştirebilirsiniz. Daha sonra, response parametresinin parts değerlerini yineleyerek ve thought boole değerini kontrol ederek özete erişebilirsiniz.
Aşağıda, akış olmadan düşünce özetlerinin nasıl etkinleştirileceğini ve alınacağını gösteren bir örnek verilmiştir. Bu örnek, yanıtla birlikte tek bir nihai düşünce özeti döndürür:
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();
Go
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)
}
}
}
}
Aşağıda, akışla düşünme özelliğinin kullanıldığı bir örnek verilmiştir. Bu örnekte, oluşturma sırasında kademeli özetler döndürülür:
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();
Go
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)
}
}
}
}
Düşünce kontrolü
Gemini modelleri, varsayılan olarak dinamik düşünme özelliğini kullanır ve kullanıcının isteğinin karmaşıklığına göre akıl yürütme çabasının miktarını otomatik olarak ayarlar. Ancak belirli gecikme kısıtlamalarınız varsa veya modelin normalden daha derin bir muhakeme yapmasını istiyorsanız düşünme davranışını kontrol etmek için isteğe bağlı olarak parametreleri kullanabilirsiniz.
Düşünme seviyeleri (Gemini 3)
Gemini 3 modelleri ve sonraki sürümler için önerilen thinkingLevel parametresi, akıl yürütme davranışını kontrol etmenizi sağlar.
Gemini 3 Pro için düşünme seviyesini "low" veya "high", Gemini 3 Flash için ise "minimal", "low", "medium" ve "high" olarak ayarlayabilirsiniz.
Gemini 3 Pro ve Flash düşünme düzeyleri:
low: Gecikmeyi ve maliyeti en aza indirir. Basit talimatları uygulamak, sohbet etmek veya yüksek işleme hızlı uygulamalar için en iyisidir.high(Varsayılan, dinamik): Muhakeme derinliğini en üst düzeye çıkarır. Modelin ilk jetona ulaşması çok daha uzun sürebilir ancak çıkış daha dikkatli bir şekilde gerekçelendirilir.
Gemini 3 Flash düşünme seviyeleri
Yukarıdaki seviyelere ek olarak Gemini 3 Flash, şu anda Gemini 3 Pro tarafından desteklenmeyen aşağıdaki düşünce seviyelerini de destekler:
medium: Çoğu görev için dengeli düşünme.minimal: Çoğu sorgu için "düşünme yok" ayarıyla eşleşir. Model, karmaşık kodlama görevlerinde çok az düşünebilir. Sohbet veya yüksek işleme hızlı uygulamalarda gecikmeyi en aza indirir.
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();
Go
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())
}
REST
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'da düşünme özelliğini devre dışı bırakamazsınız. Gemini 3 Flash da tam düşünme kapatma özelliğini desteklemez ancak minimal ayarı, modelin düşünmeyeceği anlamına gelir (ancak yine de düşünebilir).
Düşünme düzeyi belirtmezseniz Gemini, Gemini 3 modellerinin varsayılan dinamik düşünme düzeyini ("high") kullanır.
Gemini 2.5 serisi modeller thinkingLevel dosya türünü desteklemez. Bunun yerine thinkingBudget dosya türünü kullanın.
Düşünme bütçeleri
Gemini 2.5 serisiyle kullanıma sunulan thinkingBudget parametresi, akıl yürütme için kullanılacak düşünme parçalarının sayısı konusunda modele yol gösterir.
Aşağıda her model türü için thinkingBudget yapılandırma ayrıntıları verilmiştir.
thinkingBudget değerini 0 olarak ayarlayarak düşünme özelliğini devre dışı bırakabilirsiniz.
thinkingBudget değerini -1 olarak ayarlamak dinamik düşünme özelliğini etkinleştirir. Bu durumda model, bütçeyi isteğin karmaşıklığına göre ayarlar.
| Model | Varsayılan ayar (Düşünme bütçesi ayarlanmamış) |
Aralık | Düşünme sürecini devre dışı bırakma | Dinamik düşünmeyi etkinleştirme |
|---|---|---|---|---|
| 2.5 Pro | Dinamik düşünme: Model, ne zaman ve ne kadar düşüneceğine karar verir. | 128 - 32768 |
Geçerli değil: Düşünme devre dışı bırakılamaz. | thinkingBudget = -1 |
| 2.5 Flash | Dinamik düşünme: Model, ne zaman ve ne kadar düşüneceğine karar verir. | 0 - 24576 |
thinkingBudget = 0 |
thinkingBudget = -1 |
| 2.5 Flash Preview | Dinamik düşünme: Model, ne zaman ve ne kadar düşüneceğine karar verir. | 0 - 24576 |
thinkingBudget = 0 |
thinkingBudget = -1 |
| 2.5 Flash Lite | Model düşünmüyor | 512 - 24576 |
thinkingBudget = 0 |
thinkingBudget = -1 |
| 2.5 Flash Lite Preview | Model düşünmüyor | 512 - 24576 |
thinkingBudget = 0 |
thinkingBudget = -1 |
| Robotics-ER 1.5 Önizlemesi | Dinamik düşünme: Model, ne zaman ve ne kadar düşüneceğine karar verir. | 0 - 24576 |
thinkingBudget = 0 |
thinkingBudget = -1 |
| 2.5 Flash Live Native Audio Preview (09-2025) | Dinamik düşünme: Model, ne zaman ve ne kadar düşüneceğine karar verir. | 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();
Go
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
}
}
}'
İstemlere bağlı olarak model, jeton bütçesini aşabilir veya bütçenin altında kalabilir.
Düşünce imzaları
Gemini API durum bilgisi içermez. Bu nedenle model, her API isteğini bağımsız olarak ele alır ve çok adımlı etkileşimlerde önceki adımlardaki düşünce bağlamına erişemez.
Çok turlu etkileşimlerde düşünce bağlamının korunmasını sağlamak için Gemini, modelin dahili düşünce sürecinin şifrelenmiş temsilleri olan düşünce imzalarını döndürür.
- Gemini 2.5 modelleri, düşünme etkinleştirildiğinde ve istek işlev çağrısı, özellikle de işlev bildirimleri içerdiğinde düşünce imzaları döndürür.
Gemini 3 modelleri, tüm parça türleri için düşünce imzaları döndürebilir. Tüm imzaları her zaman alındığı şekilde geri iletmenizi öneririz ancak işlev çağrısı imzaları için bu zorunludur. Daha fazla bilgi için Düşünce İmzaları sayfasını inceleyin.
Google GenAI SDK, düşünce imzalarının döndürülmesini sizin için otomatik olarak gerçekleştirir. Yalnızca konuşma geçmişini değiştiriyorsanız veya REST API'yi kullanıyorsanız düşünce imzalarını manuel olarak yönetmeniz gerekir.
İşlev çağrısıyla ilgili dikkate alınması gereken diğer kullanım sınırlamaları şunlardır:
- İmzalar, yanıttaki diğer bölümlerden (ör. işlev çağrısı veya metin bölümleri) döndürülür. Yanıtın tamamını sonraki dönüşlerde tüm parçalarıyla birlikte modele geri gönderin.
- İmzalı bölümleri birleştirmeyin.
- Bir bölümü imzalı, diğer bölümü imzasız olarak birleştirmeyin.
Fiyatlandırma
Düşünme özelliği etkinleştirildiğinde yanıt fiyatlandırması, çıkış jetonlarının ve düşünme jetonlarının toplamıdır. Oluşturulan düşünce jetonlarının toplam sayısını thoughtsTokenCount alanından alabilirsiniz.
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}`);
Go
// ...
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))
Düşünme modelleri, nihai yanıtın kalitesini artırmak için tam düşünceler üretir ve ardından düşünce süreci hakkında bilgi vermek için özetler oluşturur. Bu nedenle, fiyatlandırma yalnızca özet API'den çıkış olarak verilmesine rağmen, modelin özet oluşturmak için üretmesi gereken tam düşünce jetonlarına göre belirlenir.
Jetonlar hakkında daha fazla bilgiyi Jeton sayımı rehberinde bulabilirsiniz.
En iyi uygulamalar
Bu bölümde, düşünce modellerini verimli bir şekilde kullanmayla ilgili bazı yönergeler yer almaktadır. Her zaman olduğu gibi, istemlerle ilgili rehberliğimizi ve en iyi uygulamalarımızı takip ederek en iyi sonuçları elde edebilirsiniz.
Hata ayıklama ve yönlendirme
Akıl yürütmeyi inceleme: Düşünce modellerinden beklediğiniz yanıtı alamadığınızda Gemini'ın düşünce özetlerini dikkatlice analiz etmek faydalı olabilir. Görevi nasıl parçaladığını ve sonuca nasıl ulaştığını görebilir, bu bilgileri kullanarak doğru sonuçlara ulaşmak için düzeltmeler yapabilirsiniz.
Gerekçelendirme konusunda rehberlik etme: Özellikle uzun bir çıktı almak istiyorsanız isteminizde rehberlik sağlayarak modelin düşünme miktarını sınırlayabilirsiniz. Bu sayede, yanıtınız için daha fazla jeton çıktısı ayırabilirsiniz.
Görevin karmaşıklığı
- Kolay Görevler (Düşünme devre dışı olabilir): Bilgi alma veya sınıflandırma gibi karmaşık akıl yürütme gerektirmeyen basit isteklerde düşünme gerekli değildir. Örnekler:
- "DeepMind nerede kuruldu?"
- "Bu e-postada toplantı isteğinde mi bulunuluyor yoksa sadece bilgi mi veriliyor?"
- Orta Zorluktaki Görevler (Varsayılan/Biraz Düşünme): Birçok yaygın istek, adım adım işleme veya daha derin bir anlayıştan yararlanır. Gemini, aşağıdaki gibi görevlerde düşünme yeteneğini esnek bir şekilde kullanabilir:
- Fotosentez ve büyüme arasında benzerlik kur.
- Elektrikli arabalar ile hibrit arabaları karşılaştırın ve aralarındaki farkları belirtin.
- Zor Görevler (Maksimum Düşünme Kapasitesi): Karmaşık matematik problemlerini çözme veya kodlama görevleri gibi gerçekten zorlu görevler için yüksek bir düşünme bütçesi ayarlamanızı öneririz. Bu tür görevlerde modelin, tam akıl yürütme ve planlama yeteneklerini kullanması gerekir. Bu görevler genellikle yanıt vermeden önce birçok dahili adım içerir. Örnekler:
- AIME 2025'teki 1. problemi çözün: 17b sayısının 97b sayısının bir böleni olduğu tüm b > 9 tam sayı tabanlarının toplamını bulun.
- Kullanıcı kimlik doğrulaması da dahil olmak üzere gerçek zamanlı borsa verilerini görselleştiren bir web uygulaması için Python kodu yazın. Mümkün olduğunca verimli hale getirin.
Desteklenen modeller, araçlar ve özellikler
Düşünme özellikleri, tüm 3 ve 2.5 serisi modellerde desteklenir. Tüm model özelliklerini modele genel bakış sayfasında bulabilirsiniz.
Düşünen modeller, Gemini'ın tüm araçları ve özellikleriyle çalışır. Bu sayede modeller, harici sistemlerle etkileşime geçebilir, kod yürütebilir veya gerçek zamanlı bilgilere erişebilir. Ayrıca, sonuçları muhakemelerine ve nihai yanıtlarına dahil edebilir.
Düşünme çözüm kitabında, araçları düşünme modelleriyle kullanma örneklerini deneyebilirsiniz.
Sırada ne var?
- Düşünme kapsamı, OpenAI Uyumluluğu kılavuzumuzda yer almaktadır.