Gemini düşüncesi

Gemini 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.

Başlamadan önce

Düşünme için desteklenen bir 2.5 serisi modeli kullandığınızdan emin olun. API'ye geçmeden önce AI Studio'da bu modelleri incelemeniz faydalı olabilir:

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üşünme bütçeleri

thinkingBudget parametresi, yanıt oluştururken kullanılacak düşünce jetonlarının sayısı konusunda modele yol gösterir. Daha yüksek jeton sayısı genellikle daha ayrıntılı akıl yürütmeye olanak tanır. Bu da daha karmaşık görevlerle başa çıkmak için faydalı olabilir. Gecikme süresi daha önemliyse daha düşük bir bütçe kullanın veya thinkingBudget değerini 0 olarak ayarlayarak düşünme işlevini devre dışı bırakın. 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.

thinkingBudget yalnızca Gemini 2.5 Flash, 2.5 Pro ve 2.5 Flash-Lite'ta desteklenir. Modele verilen isteme bağlı olarak, jeton bütçesi aşılabilir veya jeton bütçesinin altında kalınabilir.

Aşağıda her model türü için thinkingBudget yapılandırma ayrıntıları verilmiştir.

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 özelliği 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 Lite Model düşünmüyor 512 - 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-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();

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-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())
}

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

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 bütçelerinin, modelin ham düşünceleri için geçerli olduğunu ve 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, oluşturma sırasında kademeli ve artımlı özetler döndüren akışla düşünme yönteminin kullanıldığı bir örnek verilmiştir:

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 imzaları

Standart Gemini API metin ve içerik oluşturma çağrıları durum bilgisi içermediğinden, çok turlu etkileşimlerde (ör. sohbet) düşünme özelliğini kullanırken model, önceki turlardaki düşünce bağlamına erişemez.

Modelin dahili düşünce sürecinin şifrelenmiş temsilleri olan düşünce imzalarını kullanarak düşünce bağlamını koruyabilirsiniz. Model, düşünme ve işlev çağrısı etkinleştirildiğinde yanıt nesnesinde düşünce imzaları döndürür. Modelin bir görüşmenin birden fazla dönüşünde bağlamı korumasını sağlamak için düşünce imzalarını sonraki isteklerde modele geri göndermeniz gerekir.

Aşağıdaki durumlarda düşünce imzaları alırsınız:

  • Düşünme özelliği etkinleştirilir ve düşünceler üretilir.
  • İstek işlev bildirimleri içeriyor.

İşlev çağrılarıyla düşünme örneğini İşlev çağrısı sayfasında bulabilirsiniz.

İş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ümlerle birlikte modelden döndürülür. Örneğin, işlev çağrısı veya metin bölümleri. Tüm bölümleriyle birlikte yanıtın tamamını sonraki dönüşlerde modele geri gönder.
  • İ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, API'den yalnızca özet çıktısı alınsa da fiyatlandırma, modelin özet oluşturmak için üretmesi gereken tam düşünce jetonlarına göre yapılır.

Jetonlar hakkında daha fazla bilgiyi Jeton sayımı rehberinde bulabilirsiniz.

Desteklenen modeller

Düşünme özellikleri, 2.5 serisindeki tüm modellerde desteklenir. Tüm model özelliklerini modele genel bakış sayfasında 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şabilirsiniz.

  • 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 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:
    • Fotosentezi ve büyümeyi benzet.
    • 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 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.

Araçlar ve özelliklerle düşünme

Düşünme modelleri, 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. Sonuçları muhakemelerine ve nihai yanıtlarına dahil edebilirler.

  • Arama aracı, modelin güncel bilgileri veya eğitim verilerinin ötesindeki bilgileri bulmak için Google Arama'ya sorgu göndermesine olanak tanır. Bu, son etkinlikler veya çok spesifik konularla ilgili sorular için yararlıdır.

  • Kod yürütme aracı, modelin hesaplama yapmak, verileri değiştirmek veya algoritmik olarak en iyi şekilde ele alınabilecek sorunları çözmek için Python kodu oluşturup çalıştırmasına olanak tanır. Model, kodun çıkışını alır ve yanıtında kullanabilir.

  • Yapılandırılmış çıkış ile Gemini'ı JSON ile yanıt vermeye zorlayabilirsiniz. Bu, özellikle modelin çıktısını uygulamalara entegre etmek için yararlıdır.

  • İşlev çağrısı, düşünce modelini harici araçlara ve API'lere bağlar. Böylece, doğru işlevin ne zaman çağrılacağı ve hangi parametrelerin sağlanacağı konusunda akıl yürütebilir.

  • URL Bağlamı, isteminiz için ek bağlam olarak modele URL'ler sağlar. Model daha sonra URL'lerden içerik alabilir ve bu içeriği yanıtını bilgilendirmek ve şekillendirmek için kullanabilir.

Düşünme çözüm kitabında, düşünme modelleriyle araç kullanma örneklerini deneyebilirsiniz.

Sırada ne var?

  • Aşağıdaki gibi daha ayrıntılı örnekler için:

    • Düşünme ile araçları kullanma
    • Düşünerek yayın yapma
    • Farklı sonuçlar için düşünme bütçesini ayarlama

    ve daha fazlası için Düşünme yemek kitabımızı deneyin.

  • Düşünme kapsamı artık OpenAI Uyumluluğu rehberimizde yer alıyor.

  • Gemini 2.5 Pro, Gemini Flash 2.5 ve Gemini 2.5 Flash-Lite hakkında daha fazla bilgi için model sayfasını ziyaret edin.