למודלים מסדרות 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();
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."
}
]
}
]
}'
```
סיכומי מחשבות
סיכומי מחשבות הם גרסאות מסונטזות של המחשבות הגולמיות של המודל, והם מספקים תובנות לגבי תהליך ההיגיון הפנימי של המודל. חשוב לזכור שרמות החשיבה והתקציבים חלים על המחשבות הגולמיות של המודל ולא על סיכומי המחשבות.
כדי להפעיל סיכומי מחשבות, צריך להגדיר את includeThoughts לערך true בהגדרות הבקשה. אחר כך אפשר לגשת לסיכום על ידי איטרציה בפרמטר response של parts ובדיקה של הערך הבוליאני 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();
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)
}
}
}
}
דוגמה לשימוש בחשיבה עם סטרימינג, שמחזירה סיכומים מצטברים מצטברים במהלך היצירה:
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)
}
}
}
}
שליטה בחשיבה
מודלים של Gemini חושבים באופן דינמי כברירת מחדל, ומתאימים אוטומטית את כמות ההסקה על סמך מורכבות הבקשה של המשתמש. עם זאת, אם יש לכם אילוצים ספציפיים לגבי זמן האחזור או שאתם רוצים שהמודל יבצע ניתוח מעמיק יותר מהרגיל, אתם יכולים להשתמש בפרמטרים כדי לשלוט בהתנהגות החשיבה.
רמות חשיבה (Gemini 3)
הפרמטר thinkingLevel, שמומלץ לשימוש במודלים של Gemini 3 ואילך, מאפשר לכם לשלוט בהתנהגות של הסקת מסקנות.
אפשר להגדיר את רמת החשיבה ל-"low" או ל-"high" עבור Gemini 3 Pro, ול-"minimal", "low", "medium" ו-"high" עבור Gemini 3 Flash.
רמות החשיבה של Gemini 3 Pro ו-Flash:
-
low: מזעור זמן האחזור והעלות. הכי מתאים למשימות פשוטות של ביצוע הוראות, צ'אט או אפליקציות עם תפוקה גבוהה -
high(ברירת מחדל, דינמי): ממקסם את עומק ההיגיון. יכול להיות שייקח למודל הרבה יותר זמן להגיע לטוקן הראשון, אבל הפלט יהיה מנומק יותר.
רמות החשיבה של Gemini 3 Flash
בנוסף לרמות שצוינו למעלה, 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();
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. מודל Gemini 3 Flash גם לא תומך בהשבתה מלאה של החשיבה, אבל ההגדרה minimal מציינת שהמודל כנראה לא יחשוב (אבל עדיין יש לו פוטנציאל לעשות זאת).
אם לא מציינים רמת חשיבה, Gemini ישתמש ברמת החשיבה הדינמית שמוגדרת כברירת מחדל במודלים של Gemini 3, "high".
מודלים מסדרת Gemini 2.5 לא תומכים ב-thinkingLevel. במקום זאת, צריך להשתמש ב-thinkingBudget
.
תקציבים לשיקול
הפרמטר thinkingBudget, שהוצג בסדרת Gemini 2.5, מכוון את המודל לגבי מספר האסימונים הספציפי של חשיבה שבהם צריך להשתמש לצורך הסקת מסקנות.
בהמשך מפורטים פרטי ההגדרה של כל סוג מודל.thinkingBudget
כדי להשבית את התכונה, צריך להגדיר את thinkingBudget ל-0.
הגדרת הערך thinkingBudget כ--1 מפעילה חשיבה דינמית, כלומר המודל ישנה את התקציב בהתאם למורכבות הבקשה.
| דגם | הגדרת ברירת המחדל (התקציב לא מוגדר) |
טווח | השבתת תהליך החשיבה | הפעלת חשיבה דינמית |
|---|---|---|---|---|
| 2.5 Pro | חשיבה דינמית: המודל מחליט מתי וכמה לחשוב | 128 עד 32768 |
לא רלוונטי: אי אפשר להשבית את החשיבה | thinkingBudget = -1 |
| 2.5 Flash | חשיבה דינמית: המודל מחליט מתי וכמה לחשוב | 0 עד 24576 |
thinkingBudget = 0 |
thinkingBudget = -1 |
| 2.5 Flash Preview | חשיבה דינמית: המודל מחליט מתי וכמה לחשוב | 0 עד 24576 |
thinkingBudget = 0 |
thinkingBudget = -1 |
| 2.5 Flash Lite | המודל לא חושב | 512 עד 24576 |
thinkingBudget = 0 |
thinkingBudget = -1 |
| 2.5 Flash Lite Preview | המודל לא חושב | 512 עד 24576 |
thinkingBudget = 0 |
thinkingBudget = -1 |
| Robotics-ER 1.5 Preview | חשיבה דינמית: המודל מחליט מתי וכמה לחשוב | 0 עד 24576 |
thinkingBudget = 0 |
thinkingBudget = -1 |
| 2.5 Flash Live Native Audio Preview (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();
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
}
}
}'
בהתאם להנחיה, יכול להיות שהמודל יחרוג מהתקציב של הטוקנים או ישתמש בפחות טוקנים מהתקציב.
חתימות של מחשבות
ממשק Gemini API הוא חסר מצב (stateless), ולכן המודל מתייחס לכל בקשת API באופן עצמאי ואין לו גישה להקשר של מחשבות משיחות קודמות באינטראקציות מרובות.
כדי לאפשר שמירה על הקשר של המחשבה באינטראקציות מרובות, Gemini מחזיר חתימות של מחשבות, שהן ייצוגים מוצפנים של תהליך המחשבה הפנימי של המודל.
- מודלים של Gemini 2.5 מחזירים חתימות של מחשבות כשהחשיבה מופעלת והבקשה כוללת קריאה לפונקציה, במיוחד הצהרות על פונקציות.
מודלים של Gemini 3 עשויים להחזיר חתימות של מחשבות לכל סוגי החלקים. מומלץ תמיד להעביר את כל החתימות בחזרה כמו שהן התקבלו, אבל חובה לעשות את זה לחתימות של קריאות לפונקציות. מידע נוסף זמין בדף חתימות מחשבה.
Google GenAI SDK מטפל באופן אוטומטי בהחזרת חתימות של מחשבות. צריך לנהל את חתימות המחשבה באופן ידני רק אם משנים את היסטוריית השיחות או משתמשים ב-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}`);
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))
מודלים של חשיבה יוצרים מחשבות מלאות כדי לשפר את האיכות של התשובה הסופית, ואז יוצרים סיכומים כדי לספק תובנות לגבי תהליך החשיבה. לכן, התמחור מבוסס על כל הטוקנים של המחשבה שהמודל צריך ליצור כדי ליצור סיכום, למרות שרק הסיכום הוא הפלט של ה-API.
מידע נוסף על טוקנים זמין במדריך ספירת טוקנים.
שיטות מומלצות
בקטע הזה מופיעות כמה הנחיות לשימוש יעיל במודלים של חשיבה. כמו תמיד, כדי להשיג את התוצאות הטובות ביותר, מומלץ לפעול לפי ההנחיות והשיטות המומלצות שלנו לכתיבת הנחיות.
ניפוי באגים והכוונה
בדיקת ההיגיון: אם לא מקבלים את התשובה הרצויה ממודלים של חשיבה, כדאי לנתח בקפידה את סיכומי המחשבות של Gemini. תוכלו לראות איך הוא פירק את המשימה והגיע למסקנה, ולהשתמש במידע הזה כדי לתקן את התוצאות.
מתן הנחיות לגבי תהליך החשיבה: אם אתם רוצים לקבל פלט ארוך במיוחד, כדאי לתת הנחיות בהנחיה כדי להגביל את כמות החשיבה שהמודל משתמש בה. כך תוכלו להקצות יותר מהפלט של הטוקנים לתגובה שלכם.
מורכבות המשימה
- משימות פשוטות (החשיבה יכולה להיות מושבתת): לבקשות פשוטות שלא דורשות נימוק מורכב, כמו אחזור עובדות או סיווג, אין צורך בחשיבה. דוגמאות:
- "?Where was DeepMind founded"
- "האם האימייל הזה הוא הזמנה לפגישה או שהוא רק מספק מידע?"
- משימות בינוניות (ברירת מחדל/חלק מהחשיבה): הרבה בקשות נפוצות נהנות ממידה מסוימת של עיבוד שלב אחר שלב או מהבנה מעמיקה יותר. Gemini יכול להשתמש ביכולת החשיבה שלו באופן גמיש כדי לבצע משימות כמו:
- תערוך אנלוגיה בין פוטוסינתזה לבין גדילה.
- השוו והבדילו בין מכוניות חשמליות למכוניות היברידיות.
- משימות קשות (יכולת חשיבה מקסימלית): כדי להתמודד עם אתגרים מורכבים במיוחד, כמו פתרון בעיות מתמטיות מסובכות או משימות תכנות, מומלץ להגדיר תקציב חשיבה גבוה. כדי לבצע משימות כאלה, המודל צריך להשתמש בכל יכולות ההיגיון והתכנון שלו, ולרוב הוא מבצע הרבה שלבים פנימיים לפני שהוא מספק תשובה. דוגמאות:
- פתרון בעיה 1 ב-AIME 2025: צריך למצוא את הסכום של כל הבסיסים השלמים b > 9 שעבורם 17b הוא מחלק של 97b.
- לכתוב קוד Python לאפליקציית אינטרנט שמציגה נתונים של שוק המניות בזמן אמת, כולל אימות משתמשים. להשתדל שהתהליך יהיה יעיל ככל האפשר.
מודלים, כלים ויכולות נתמכים
תכונות החשיבה נתמכות בכל המודלים מסדרות 3 ו-2.5. בדף סקירה כללית של הדגם אפשר לראות את כל היכולות של הדגם.
מודלים מסוג Thinking פועלים עם כל הכלים והיכולות של Gemini. כך המודלים יכולים ליצור אינטראקציה עם מערכות חיצוניות, להריץ קוד או לגשת למידע בזמן אמת, ולשלב את התוצאות בהסקה ובתשובה הסופית שלהם.
אפשר לנסות דוגמאות לשימוש בכלים עם מודלים חושבים בספר המתכונים של Thinking.
מה השלב הבא?
- מידע על כיסוי החשיבה זמין במדריך שלנו בנושא תאימות ל-OpenAI.