למודלים מסדרות 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 בהגדרות הבקשה. אחרי זה אפשר לגשת לסיכום על ידי איטרציה על parts של הפרמטר response ובדיקה של הערך הבוליאני 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 Pro)
הפרמטר thinkingLevel, שמומלץ לשימוש במודלים של Gemini 3 ואילך, מאפשר לכם לשלוט בהתנהגות של הסקת מסקנות.
אפשר להגדיר את רמת החשיבה לערך "low" או "high".
אם לא מציינים רמת חשיבה, Gemini ישתמש ברמת החשיבה הדינמית שמוגדרת כברירת מחדל במודל, "high", בגרסת טרום ההשקה של Gemini 3 Pro.
Python
from google import genai
from google.genai import types
client = genai.Client()
response = client.models.generate_content(
model="gemini-3-pro-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-pro-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-pro-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-pro-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 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-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
}
}
}'
בהתאם להנחיה, יכול להיות שהמודל יחרוג מהתקציב של הטוקנים או ישתמש בפחות טוקנים מהתקציב.
חתימות של מחשבות
ממשק 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.